1、MATLAB 7.0从入门到精通,主要讲述内容,第1章 MATLAB简介 第2章 数值运算 第3章 单元数组和结构 第4章 字符串 第5章 符号运算 第6章 MATLAB绘图基础 第7章 程序设计 第8章 计算方法的MATLAB实现 第9章 优化设计 第10章 Simulink仿真初探,第1章 MATLAB简介,MATLAB是一种高效能的、用于科学和技术计算的计算机语言。它将计算、可视化和编程等功能集于一个易于使用的环境。MATLAB是一个交互式系统(写程序与执行命令同步),其基本的数据元素是没有维数限制的阵列,因此采用MATLAB编制包含矩阵和向量问题的程序时比采用只支持标量和非交互式的编程
2、C或FORTAN语言更加方便。MATLAB的全名是Matrix Laboratory,意思是矩阵实验室,是由MathWorks公司推出的。,1.1 概述,MATLAB语言的优点: (1)简单易学; (2)代码短小高效,只需熟悉算法特点、使用场合、函数调用格式和参数意义,不必花大量时间纠缠具体算法; (3)计算功能非常强大; (4)强大的图形表达功能; (5)可扩展性能。,MATLAB的一个重要特色:它有一套程序扩展系统和一组称之为工具箱(toolbox)的特殊应用子程序。工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包括信号处理、控制系统、神经网络、模
3、糊逻辑、小波分析和系统仿真等方面的应用。,MATLAB提供两种运行方式,命令行方式和M文件方式。具体情况见下面的两幅图。,1.2运行环境,命令窗口左侧是工作空间窗口,其中包括变量名、变量数组大小、变量字节大小和变量类型。双击该变量会出现该变量的详细信息。命令历史窗口显示所有执行过的命令,可以双击再次执行。当前目录窗口显示当前目录下所有文件类型和最后修改时间。,1.3 MATLAB7.0的通用命令,1.4 MATLAB的帮助系统,命令行中输入help,列出所有函数类别和工具箱的名称和功能。命令行中输入help+工具箱名或函数名,可以显示对应的功能信息。 单击工具条上的问号按钮或单击Help菜单中
4、的MATLAN Help项,可以打开联机帮助窗口。 helpdesk和helpwin或doc产生联机帮助。 单击Help菜单中的Demos项或直接在命令窗口输入Demos,可以进行演示。 lookfor函数的用法,lookfor+关键字,这样可以避免新学者不知道函数名而束手无策。,1.4 MATLAB的帮助系统,第2章 数值运算,首先matlab中支持复数,表示方法为a=m+ni(j),当n是表达式时,n与i(j)之间必须要加乘号。另外也可以用complex(x,y)来产生复数。i,j不要作为变量名称,以免生成数据时发生误解。,2.1MATLAB中的变量, a=1+2ia =1.0000 +
5、2.0000i a=1+2*ia =1.0000 + 2.0000i, b=sin(2)+cos(2)i ? b=sin(2)+cos(2)i| Error: Unexpected MATLAB expression. b=sin(2)+cos(2)*ib =0.9093 - 0.4161i, x=sin(2); y=cos(3); z=complex(x,y)z =0.9093 - 0.9900i z=complex(x)z =0.9093, i+2ians =0 + 3.0000i i+2*ians =0 + 3.0000i, i=10; i+2i ans =10.0000 + 2.000
6、0i i+2*i ans =30 5+2i ans =5.0000 + 2.0000i 5+2*i ans =25,MATLAB中的变量必须以字母打头,之后可以是任意字母、数字或下划线,变量名区分字母大小写,变量名不超过19个字符,默认变量名为ans。除此之外还包含一些特殊的变量。 Whos命令能够显示变量的信息。,2.2 MATLAB的数值运算基础,A/B相当于B*inv(A) AB相当于inv(A)*B,2.3数组及向量运算,1、数组构造 数组及向量的生成可直接在方括号内输入数据,也可以不加括号,同样生成数组。 (1)利用first:increment:last来创建等差数组,a=(fir
7、st:increment:last),increment为增量。 a=(0:0.5:2) a =0 0.5000 1.0000 1.5000 2.0000,(2)利用MATLAB函数linspace来创建数组,形成一个等差数列关系的数组,number为数组个数 linspace(firstvalue,lastvalue,number)。 a=linspace(0,2,5)a =0 0.5000 1.0000 1.5000 2.0000,(3)利用logspace函数来创建一个对数分隔的数组,形成一个等比数列关系的数组,logspace(firstvalue,lastvalue,number)。
8、数值从10的firstvalue次幂到10的lastvalue次幂结束。 a=logspace(0,2,5)a =1.0000 3.1623 10.0000 31.6228 100.0000,2、数组运算 (1)数组与标量的四则运算是指数组中的每个元素与标量进行加、减、乘、除运算。数组的指数运算exp,以2为底的指数运算pow2,自然对数运算log,常用对数运算log10,以2为底的对数运算log2,开方运算sqrt。是数组中每个元素进行相对应的运算。 (2)数组与数组之间进行运算时,每个数组必须具有相同的维数,且必须用点乘或点除。,查询x数组的第n个元素,x(n); 查询x数组的第2到4个元
9、素,x(2:4); 查询x数组的第4到最后1个元素,x(4:end); 查询x数组的第3、2、1个元素,x(3:-1:1); 查询x数组的小于n元素,x(find(xn); 查询x数组的第4、2、5个元素,x(4 2 5); 将x数组的第n个元素赋值为A,x(n)=A; 查询数组A的第2行,第3列的元素,A(2,3); 查询数组A的第3行所有的元素,A(3,:); 查询数组A的第2列转置后所有的元素,(A(:,2)。,数组排序:sort(x)命令将数组x中的元素按升序排列。 当x是多维数组时,命令是将x中各列元素按升序排列; 当x是一个字符型单元数组,命令是将x中的元素按ASC码升序排列; 当
10、x数据类型是复数,命令将按各元素的模升序排列; y=sort(x,mode)中,mode决定排序方式,选择ascend将按升序排列,选择descend将按降序排列,y与x保持相同大小。,3、向量运算 在高等数学中,向量的点积是指两个向量在其中某一向量方向上的投影的乘积,它通常来定义向量的长度,是个数值。c=dot(a,b)表示向量a与b的点积放在c中,a与b长度必须相同。 在高等数学中,向量的叉积是过两个向量的交点并且与这两个向量所在平面相垂直的向量,是个向量。c=cross(a,b)表示向量a与b的叉积放在c中,a与b必须是三个元素的向量,生成的仍然是一个三维的向量。,2.4 矩阵及其运算,
11、1、矩阵的生成和基本操作 矩阵的生成通常有四种方法: (1)在命令窗口中直接输入矩阵; (2)通过语句和函数产生矩阵; (3)在M文件中建立矩阵; (4)从外部的数据文件中导入矩阵。 求方阵行列式的函数是det(determinant),求矩阵秩的函数是rank,求矩阵逆阵的函数是inv(inverse matrix),size命令能测试矩阵的大小。,2、矩阵与常数的四则运算 矩阵与常数的四则运算是指矩阵各元素与常数之间的四则运算,但是矩阵与常数进行除法时,常数通常只能做除数。,3、矩阵之间的四则运算 矩阵与矩阵之间的加减法就是矩阵中各元素之间的加减运算,矩阵必须具有相同的维数。 矩阵与矩阵之
12、间的乘法与除法要符合矩阵之间的乘除法则。 大小完全相同的方阵即可进行乘除运算,也可以进行点乘点除运算,但结果是不同的。 矩阵的左除为矩阵乘法的逆运算,若AB=C,则B=AC,矩阵左除常用于解线性方程组AX=B; 矩阵的右除也为矩阵乘法的逆运算,若AB=C,则A=C/B。,4、矩阵的特征参数运算 矩阵的指数运算expm,自然对数运算logm,开方运算sqrtm。 其中矩阵必须是方阵。,矩阵的特征值运算使用函数eig或eigs计算;条件数的值代表矩阵“病态”程度的大小。计算矩阵的条件数值cond(a),计算1-范数矩阵条件值condest(a),计算矩阵的逆条件数值rcond(a);矩阵的奇异值一
13、般通过函数svd(a)和svds(a)计算得到;矩阵范数运算norm(a),矩阵1-范数运算norm(a,1),矩阵2-范数运算norm(a,2),矩阵无穷大范数运算norm(a,inf),矩阵F-范数运算norm(a,fro);矩阵中的秩用函数rangk(a)求得;矩阵的正交化运算由函数orth(a)得到;求矩阵对角线所有元素之和用trace(a)计算;矩阵的伪逆运算pinv(a);矩阵函数计算funm(a,fun),a为矩阵,fun为调用函数名,函数名不带m。,5、矩阵的分解运算 三角分解(lu) 高斯消去法又称LU分解。 l,u=lu(x)产生一个“心理” 下三角矩阵(下三角矩阵和置换矩
14、阵的乘积)l和一个上三角矩阵u,使x=l*u成立,x可以不是方阵。 l,u,p=lu(x)产生一个单位下三角矩阵l,一个上三角矩阵u和交换矩阵p,使它们满足P*x=l*u。, x=1 2;3 4; l,u=lu(x) l =0.3333 1.00001.0000 0 u =3.0000 4.00000 0.6667 l,u,p=lu(x) l =1.0000 00.3333 1.0000 u =3.0000 4.00000 0.6667 p =0 11 0,正交分解(qr) q,r=qr(a)产生一个与a维数相同的上三角矩阵r和一个正交矩阵q(q* q=单位矩阵),使它们满足a=q*r。 q,
15、r,e=qr(a)产生一个交换矩阵e、一个上三角矩阵r和正交矩阵q,使它们满足a*e=q*r。 q,r=qr(a,0)对矩阵a进行有选择的qr分解。当矩阵a为m*n并且mn,则只产生具有前n列的正交矩阵q。 R=qr(a)只产生矩阵r,且满足r=chol(a*a)。,特征值分解(eig) v,d=eig(x)命令生成两个矩阵v和d,其中v是以矩阵x的特征向量作为列向量组成的矩阵,d是由矩阵x的特征值作为主对角线元素构成的对角矩阵,它们满足x*v=v*d。 v,d=eig(a,b)命令对矩阵a、b作广义特征值分解,它们满足a*v=b*v*d。,Chollesky分解(chol) 当矩阵a(n*n
16、)对称正定时,则存在唯一的对角元素为正的上三角矩阵r,使得a=r*r,这既是Chollesky分解。,奇异值分解(svd) u,s,v=svd(x)命令产生一个与矩阵x维数相同的对角矩阵s、正交矩阵u和正交矩阵v,使它们满足x=u*s*v。 u,s,v=svd(x,0)命令进行奇异值的最佳分解。X为m*n阶矩阵,当mn时,生成的矩阵u只有前n列元素被计算出来,且s为n*n阶矩阵。,6、矩阵的一些特殊处理函数 矩阵的变维 reshape(x,m,n)命令将矩阵x的所有元素分配到一个m*n的新矩阵,当矩阵x的元素数不是m*n时,返回错误信息。原则按列优先。 reshape(x,m,n,p) 和re
17、shape(x,m,n,p)命令一样返回由矩阵x的元素组成的m*n*p*多维矩阵,元素个数必须相等。,矩阵的变向 rot90(a)命令返回矩阵a按逆时针旋转90度所得的矩阵。 rot90(a,k)命令返回矩阵a按逆时针旋转90*k度所得的矩阵。 flipud(x)命令将矩阵x上下翻转。 fliplr(x)命令将矩阵x左右翻转。 flipdim(x,dim)命令将矩阵x的dim维翻转。,选取数组上三角或下三角矩阵 tril(a,k)命令的功能是提取矩阵的下三角矩阵,k为正数时,非零元素向右上角错k行,k为负数时,非零元素向左下角错k行。 triu(a,k)命令的功能是提取矩阵的上三角矩阵, k为
18、正数时,非零元素向右上角错k行,k为负数时,非零元素向左下角错k行。, a=1 2 3 4;2 3 4 5;3 4 5 6;4 5 6 7; tril(a)ans =1 0 0 02 3 0 03 4 5 04 5 6 7, a=1 2 3 4;2 3 4 5;3 4 5 6;4 5 6 7; triu(a,1) ans =0 2 3 40 0 4 50 0 0 60 0 0 0 triu(a,-1) ans =1 2 3 42 3 4 50 4 5 60 0 6 7, a=1 2 3 4;2 3 4 5;3 4 5 6;4 5 6 7; triu(a)ans =1 2 3 40 3 4 50
19、 0 5 60 0 0 7, a=1 2 3 4;2 3 4 5;3 4 5 6;4 5 6 7; triu(a,1) ans =0 2 3 40 0 4 50 0 0 60 0 0 0 triu(a,-1) ans =1 2 3 42 3 4 50 4 5 60 0 6 7,7、特殊矩阵的生成 空矩阵:空矩阵用表示,空矩阵大小为零,但变量名存在于工作空间。 零矩阵:a=zeros(m,n),a=zeros(size(b)其中b是已存在的矩阵,若a是方阵也可a=zeros(n)。 全1矩阵: a=ones(m,n),a=ones(size(b)其中b是已存在的矩阵,若a是方阵也可a=ones(
20、n)。 单位矩阵: a=eye(m,n),a=eye(size(b)其中b是已存在的矩阵,若a是方阵也可a=eye(n)。,对角矩阵:对角矩阵指的是对角线上的元素为任意数,其它元素为零的矩阵。 a=diag(v,k)中,v是向量,k为向量v偏离主对角线的列数,k等于零时表示v为主对角线,k大于零时表示v在主对角线以上,k小于零时表示v在主对角线以下。 a=diag(v)相当于a=diag(v,0)。, v=1 2 3; a=diag(v)a =1 0 00 2 00 0 3, v=1 2 3; a=diag(v,1)a =0 1 0 00 0 2 00 0 0 30 0 0 0, v=1 2
21、3; a=diag(v,2)a =0 0 1 0 00 0 0 2 00 0 0 0 30 0 0 0 00 0 0 0 0, v=1 2 3; a=diag(v,-1)a =0 0 0 01 0 0 00 2 0 00 0 3 0, v=1 2 3; a=diag(v,-2)a =0 0 0 0 00 0 0 0 01 0 0 0 00 2 0 0 00 0 3 0 0,随机矩阵:随机矩阵是指矩阵元素由随机数构成的矩阵。 rand(n)命令生成n*n阶随机矩阵,生成矩阵的元素值在区间(0.0,1.0)之间。 rand(m,n) 命令生成m*n阶随机矩阵,生成矩阵的元素值在区间(0.0,1.0
22、)之间。 randn(n)命令生成n*n阶随机矩阵,生成矩阵的元素值在服从正态分布N(0,1)。 randn(m,n) 命令生成m*n阶随机矩阵,生成矩阵的元素值在服从正态分布N(0,1)。,魔方矩阵:魔方矩阵是个方阵,其每一行,每一列,每条主对角线的和都相等(2阶除外)。 A=magic(n) 范德蒙德矩阵:a=vender(v),其中a(i,j)=v(i)n-j。,矩阵重组 用新的行或列取代原有矩阵的行或列。 a=1 2 3;4 5 6;5 4 3; b=1 1 1;2 2 2;3 3 3; b(1,:)=a(1,:) b =1 2 32 2 23 3 3 b(:,2)=a(:,1) b
23、=1 1 32 4 23 5 3,从矩阵中选取子矩阵 a=1 2 3;4 5 6;5 4 3 a =1 2 34 5 65 4 3 b=a(1:2,2:3) b =2 35 6,将矩阵改成行向量或列向量 a=1 2 3;4 5 6;5 4 3 a =1 2 34 5 65 4 3 b=a(:) b =1 4 5 2 5 4 3 6 3,矩阵的水平连接用horzcat(a,b)或a,b。 a=1 2;3 4; b=5 6;7 8; a,b ans =1 2 5 63 4 7 8 horzcat(a,b) ans =1 2 5 63 4 7 8,矩阵的垂直连接用vertcat(a,b)或a;b。
24、a=1 2; b=3 4; a;b ans =1 23 4 vertcat(a,b) ans =1 23 4,矩阵的尺寸信息 length命令是获取矩阵最长方向的长度; ndims命令是获取矩阵的维数; numel命令是获取矩阵的元素个数; size命令是获取矩阵大小信息,及几行几列。,2.5 稀疏矩阵,在MATLAB中用两种方式来存储矩阵,即满矩阵存储方式和稀疏矩阵存储方式,简称满矩阵和稀疏矩阵。 满矩阵中所有的数值都要存储,会造成存储空间的浪费和计算速度的降低,而稀疏矩阵是以非零元素行标和列标来表示的,可以节省空间,也可以提高计算速度。,1、稀疏矩阵的生成 speye(n)生成n阶单位稀疏
25、矩阵, speye(m,n)也生成一个单位稀疏矩阵,其维数是m和n中较小的,注意:它所生成的矩阵仍然是m*n的矩阵,它只是在显示主对角线上的元素。 speye(size(a)生成与a大小相等的稀疏矩阵,主对角线上元素为1,其它为0。 spones(a)创建矩阵a中非零元素为1的稀疏矩阵。, speye(3) ans =(1,1) 1(2,2) 1(3,3) 1 speye(3)+1 ans =2 1 11 2 11 1 2, speye(3,4) ans =(1,1) 1(2,2) 1(3,3) 1 speye(3,4)+1 ans =2 1 1 11 2 1 11 1 2 1, speye(
26、4,3) ans =(1,1) 1(2,2) 1(3,3) 1 speye(4,3)+1 ans =2 1 11 2 11 1 21 1 1, a=1 2 3;4 5 6 a =1 2 34 5 6 speye(size(a) ans =(1,1) 1(2,2) 1 speye(size(a)+1 ans =2 1 11 2 1,2、稀疏矩阵与满矩阵的转换 a=sparse(x)将满矩阵x转化为稀疏矩阵a。 a=sparse(i,j,s,m,n,nzm)生成m*n阶的稀疏矩阵a,向量s的元素分布在以向量i的对应值和向量j的对应值为坐标的位置上,nzm为给出的矩阵存储的非零元素的个数,不能小于s
27、的长度,此时nzmax是返回用于存储非零值的空间长度。 a=sparse(i,j,s,m,n)生成m*n阶的稀疏矩阵a,向量s的元素分布在以向量i的对应值和向量j的对应值为坐标的位置上,其中nzmax=length(s)。, x=1 2;3 4 x =1 23 4 a=sparse(x) a =(1,1) 1(2,1) 3(1,2) 2(2,2) 4, x=1 0;3 0 x =1 03 0 a=sparse(x) a =(1,1) 1(2,1) 3, s=sparse(1,2,3,4,3,2,1,3,1,2,3,4,4,4,3) ? Error using = sparse Index ex
28、ceeds matrix dimensions., s=sparse(1,2,3,4,3,2,1,3,1,2,3,4,4,4)s =(3,1) 3(2,2) 2(1,3) 1(4,3) 4 n=nzmax(s) n =4, s=sparse(1,2,3,4,3,2,1,3,1,2,3,4,4,4,8)s =(3,1) 3(2,2) 2(1,3) 1(4,3) 4 n=nzmax(s) n =8,a=sparse(i,j,s)生成m*n阶的稀疏矩阵a,向量s的元素分布在以向量i的对应值和向量j的对应值为坐标的位置上,其中m=max(i),n=max(j)。 a=sparse(m,n)就是 a=s
29、parse(,m,n,0)的简化形式。生成n阶稀疏方阵时必须用a=sparse(n,n),不能用a=sparse(n)。 s=full(x)将稀疏矩阵x转化为满矩阵S。,s=full(sparse(1,2,3,4,3,2,1,3,1,2,3,4)s =0 0 10 2 03 0 00 0 4, s=sparse(1,2,3,4,3,2,1,3,1,2,3,4,5,5)+1s =1 1 2 1 11 3 1 1 14 1 1 1 11 1 5 1 11 1 1 1 1, s=sparse(5,5) s =All zero sparse: 5-by-5 a=sparse(5) a =(1,1) 5
30、, s=full(sparse(5,5)s =0 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0,i=find(x)返回矩阵x的非零元素的位置,按照列数优先的原则选取。 i,j=find(x)返回矩阵x的非零元素的所在行和所在列的位置,按照列数优先的原则表述。 i,j,v=find(x)除了返回矩阵x的非零元素的行列之外,还返回矩阵中非零元素的值,按照列数优先的原则表述。, x=0 2 0 0;3 0 0 6;0 0 7 0;0 0 0 2; i=find(x)i =25111416, x=0 2 0 0;3 0 0 6;0 0 7 0;0 0 0 2;
31、 i j=find(x) i =21324 j =12344, x=0 2 0 0;3 0 0 6;0 0 7 0;0 0 0 2; i j v=find(x) i = 21324 j =12344 v =32762,3、稀疏矩阵的操作 n=nnz(s)返回矩阵s中非零元素的个数。 d=nnz(s)/prod(size(s)表示稀疏矩阵s中非零元素的密度。prod表示矩阵s行数与列数的乘积,既表明s中元素的总个数。 nonzeros返回非零值。, x=0 2 0 0;3 0 0 6;0 0 7 0;0 0 0 2; n=nnz(x)n =5, x=0 2 0 0;3 0 0 6;0 0 7 0
32、;0 0 0 2; d=nnz(x)/prod(size(x)d =0.3125, x=0 2 0 0;3 0 0 6;0 0 7 0;0 0 0 2; nonzeros(x)ans =32762,r=spones(s)生成一个与稀疏矩阵s结构相同的稀疏矩阵r,但是矩阵s中的非零元素都用1替代。 issparse(s)判断s是否是稀疏矩阵,返回1则说明矩阵s是稀疏矩阵,返回0则说明矩阵s不是稀疏矩阵。, x=0 2 0 0;3 0 0 6;0 0 7 0;0 0 0 2; spones(x)ans =(2,1) 1(1,2) 1(3,3) 1(2,4) 1(4,4) 1, x=0 2 0 0;
33、3 0 0 6;0 0 7 0;0 0 0 2; issparse(x)ans =0 issparse(sparse(x)ans =1,4、稀疏矩阵的图形显示 为了形象地显示稀疏矩阵的密度,可以用稀疏矩阵图像化函数spy,其语法格式如下: spy(s)输出任意稀疏矩阵的图形,其横坐标表示列数,纵坐标表示行数。该图形中对非零元素相应的坐标显示一个圆点,圆点的颜色为蓝色。圆点大小与非零元素的数值无关。对于矩阵中零元素相应位置显示空白。 spy(s,markersize)通过markersize改变圆点大小。 spy(s,linespec,markersize)通过linespec改变标记的类型和颜
34、色。, a=1 0 0 9 0 0;0 3 0 0 5 0;0 0 3 0 0 4;2 0 0 0 0 0a =1 0 0 9 0 00 3 0 0 5 00 0 3 0 0 42 0 0 0 0 0 spy(a), a=1 0 0 9 0 0;0 3 0 0 5 0;0 0 3 0 0 4;2 0 0 0 0 0a =1 0 0 9 0 00 3 0 0 5 00 0 3 0 0 42 0 0 0 0 0 spy(a,35), a=1 0 0 9 0 0;0 3 0 0 5 0;0 0 3 0 0 4;2 0 0 0 0 0 a =1 0 0 9 0 00 3 0 0 5 00 0 3 0
35、0 42 0 0 0 0 0 spy(a,*,20), a=1 0 0 9 0 0;0 3 0 0 5 0;0 0 3 0 0 4;2 0 0 0 0 0 a =1 0 0 9 0 00 3 0 0 5 00 0 3 0 0 42 0 0 0 0 0 spy(a,o,20), a=1 0 0 9 0 0;0 3 0 0 5 0;0 0 3 0 0 4;2 0 0 0 0 0 a =1 0 0 9 0 00 3 0 0 5 00 0 3 0 0 42 0 0 0 0 0 spy(a,+,20),2.6 多项式运算,多项式(polynomial),1、多项式的四则运算 多项式的四则运算主要是加、减
36、、乘、除运算,加减运算时向量的大小必须相等,没项的用零补,乘法运算t=conv(t1,t2),除法运算t r=deconv(t1,t2),t多项式相除后的商向量,r多项式相除后的余向量。, x=1 2 3; y=2 3 4; z=conv(x,y)z =2 7 16 17 12, x=1 2 3; y=2 7 16 17 12; t,r=deconv(y,x)t =2 3 4r =0 0 0 0 0,2、多项式的导数和微分 多项式的导数运算用函数polyder实现,其调用方式为: k=polyder(p),返回多项式p的导数,k仍是一系数多项式; k=polyder(a,b)返回多项式a与多项
37、式b乘积的导数, k仍是一系数多项式; p,q=polyder(a,b)返回多项式a除以b的商的导数,并以p/q的格式表示,参照商的导数规则。 c=poly2sym(b)命令实现多项式符号化。 c=poly2sym(b,v)自变量用先定义好的符号变量v指定。, x=1 2 3; y=2 7 16 17 12; p,q=polyder(y,x) p =4 19 52 78 72 27 q =1 4 10 12 9, a=2 3 4 5; b=polyder(a); c=poly2sym(b) c = 6*x2+6*x+4 b=poly2sym(a,y) ? Undefined function
38、or variable y. syms y b=poly2sym(a,y) b = 2*y3+3*y2+4*y+5, a=1 2 3; b=2 3 4; k=polyder(conv(a,b) k =8 21 32 17 k=polyder(a,b) k =8 21 32 17, a=1 2 3 4; b=1 2; p,q=polyder(a,b) p =2 8 8 2 q =1 4 4,多项式的积分运算是采用polyint函数来实现的,其调用方式如下: k=polyint(p,m),返回多项式p的积分,设积分的常数项为m; k=polyint(p),返回多项式p的积分,设积分的常数项为零。,
39、 a=1 2 3; k=poly(a,8) k=polyint(a,8) k =0.3333 1.0000 3.0000 8.0000 k=polyint(a) k =0.3333 1.0000 3.0000 0,3、多项式的估值运算 多项式的估值,即求给定点的多项式函数的值,用polyval(p,s)和polyvalm(p,s)来实现,后者实现的是矩阵运算。, a=2 5 0 4 1 4; b=polyval(a,3 4)b =934 3400 b=polyvalm(a,3 4) ? Error using = polyvalm at 29 Matrix must be square., a
40、=2 5 0 4 1 4; polyval(a,1 2;3 4) ans =16 166934 3400 polyvalm(a,1 2;3 4) ans =3166 46086912 10078, a=2 5 0 4 1 4; polyval(a,1 2;3 4;5 6) ans =16 166934 34009484 22186 polyvalm(a,1 2;3 4;5 6) ? Error using = polyvalm at 29 Matrix must be square.,4、多项式的根和由根创建多项式 多项式的求根运算使用函数roots来实现,其调用格式如下: r=roots(c
41、)返回多项式c的所有根r。 t=2 3 4 5; b=roots(t) b =-1.3711 -0.0644 + 1.3488i-0.0644 - 1.3488i,与多项式求根相反的过程是由根创建多项式,其调用格式如下: p=poly(r),r为向量时,返回以r为根的多项式系数; p=poly(A),A为方阵时,返回以A的特征值为根的多项式系数。A*x=k*x。, a=1 2; p=poly(a) p =1 -3 2 b=1 2;3 4; p=poly(b) p =1.0000 -5.0000 -2.0000,5、多项式部分分式展开 函数residue可以将多项式之比用部分分式展开,也可以将一
42、个部分分式表示为多项式之比。其调用格式如下: r,p,k=residue(a,b)返回多项式之比a/b的部分分式展开,参照下面公式。 a,b=residue(r,p,k)返回部分分式的多项式向量。, a=2 3 -4 1; b=1 -3 2; r,p,k=residue(a,b) r =21-2 p =21 k =2 9, r=21;-2; p=2;1; k=2 9; c,d=residue(r,p,k) c =2 3 -4 1 d =1 -3 2,6、多项式的拟合 多项式拟合用polyfit(x,y,n)来实现,n是拟合多项式的阶次。 x=linspace(0,2*pi,100); y=co
43、s(x); t=polyfit(x,y,6); y1=polyval(t,x); plot(x,y,go,x,y1,b-), x=linspace(0,2*pi,100); y=cos(x); t=polyfit(x,y,3); y1=polyval(t,x); plot(x,y,go,x,y1,b-),7、曲线拟合图形用户接口 为了方便用户的使用,MATLAB7.0提供了支持曲线拟合的图形用户接口。它位于“Figure”窗口的“ToolBasic Fitting”菜单中。为了使用该工具,首先用代拟合的数据画图。, x=0:0.2:10; y=0.25*x+20*sin(x); plot(x,
44、y,ro),2.7 数据分析 2.7.1 基本数据操作函数,1、max与min函数 使用方法完全一样,max(a),min(a)中a为向量时,输出单个最大(小)值,a为矩阵时,输出矩阵每列的最大(小)元素;y,i=max(a), y,i=min(a)同上,只是多输出最大(小)元素在向量中或在矩阵中的最大(小)值下标,按列优先的原则。 max(a,b),min(a,b)对比两个矩阵的元素,输出最大(小)值。, a=2 5 0 4 1 7; min(a) ans =0 y i=min(a) y =0 i =3, a=2 5 0 4 1 7; max(a) ans =7 y i=max(a) y =
45、7 i =6, b=1 2;3 4; min(b)ans =1 2 max(b)ans =3 4,b=1 2;3 4; y i=min(b) y =1 2 i =1 1 y i=max(b) y =3 4 i =2 2, a=2 6 1 5; b=4 1 0 8; min(a,b) ans =2 1 0 5 max(a,b) ans =4 6 1 8, a=1 5 3;2 1 4; b=3 1 2;7 1 8; min(a,b) ans =1 1 22 1 4 max(a,b) ans =3 5 37 1 8,min函数的应用 如图所示的一个用围墙围起来的场地,构建面积为1600平方米,围墙成本:弯曲部分每米40元,直边部分每米30元,使用min函数确定,当分辨率为0.01米时,使围墙成本最小所需的R和L值,并计算最小成本。,解:根据题意有 2*R*l+0.5*pi*R*R=1600 W=40*pi*R+30*(l+l+2R) 化简W=40*pi*R+15*(3200+(4-pi)*R*R)/R),