1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,1.5 MATLAB,的数值运算,MATLAB,具有强大的数值能力,它不仅能对矩阵和向量进行相应的运算,而且也可处理多项式的解、数据分析、函数的极值、线性方程组的解、函数的微积分和函数绘图等问题。,1,1.5.1,矩阵运算,MATLAB,的基本数据单元是不需要指定维数的复数矩阵,它提供了各种矩阵的运算与操作,因它既可以对矩阵整体地进行处理,也可以对矩阵的某个或某些元素进行单独地处理,所以在,MATLAB,环境下矩阵的操作同数的操作一样简单。,2,1.,矩阵的实现,在,MATLAB,语言中不必描述矩阵
2、的维数和类型,它们是由输入的格式和内容来确定的,例如当,A,1 2,时,把,A,当作一个,2,维行向量;,A,5,时,把,A,当作一个标量;,A,1,2i,时,把,A,当作一个复数。,3,矩阵可以用以下几种方式进行赋值:,直接列出元素的形式;,通过语句和函数产生;,建立在文件中;,从外部的数据文件中装入。,(1),矩阵的赋值,4,对于比较小的简单矩阵可以使用直接排列的形式输入,把矩阵的元素直接排列到方括号中,每行内的元素间用,空格,或,逗号,分开,行与行的内容用,分号,隔开。例如,矩阵,在,MATLAB,下的输入方式为,A,=1,2,3;4,5,6;7,8,9,或,A,=1 2 3;4 5 6
3、7 8 9,简单矩阵的输入,5,简单矩阵的输入,对于比较大的矩阵,可以用,回车键,代替分号,对每一行的内容分行输入,也可利用,续行符号(,),,把一行的内容分两行来输入。例如,,A,=1 2 3;4 5 6,7 8 9,或,A,=1 2 3;4 5,6;7 8 9,输入后,A,矩阵将一直保存在工作空间中,除非被替代和清除,在,MATLAB,的命令窗口中可随时查看其内容。,6,利用语句或函数产生矩阵,在,MATLAB,中,矩阵也可利用下面的语句来产生:,s1:s2:s3,其中,,s1,为起始值;,s3,为终止值;,s2,为步矩。使用这样的命令就可以产生一个由,s1,开始,以步距,s2,自增,并
4、终止于,s3,的行向量。,7,利用语句或函数产生矩阵,例如:,y=0:pi/4:pi,结果显示:,y=,0 0.7854 1.5708 2.3562 3.1416,如果,S2,省略,则可以认为自增步距为,1,,例如,x=1:5,结果显示:,x=,1 2 3 4 5,8,利用语句或函数产生矩阵,利用,size(),函数可测取一个矩阵的维数,该函数的调用格式为,n,m=,size(,A,),其中:,A,为要测试的矩阵名,而返回的两个参数,n,和,m,分别为,A,矩阵的行数和列数。,9,利用语句或函数产生矩阵,当要测试的变量是一个向量时,当然仍可由,size(),函数来得出其大小,更简洁地,用户可以
5、使用,length(),函数来求出,该函数的调用格式为,n=,length(,x,),其中,,x,为要测试的向量名,而返回的,n,为向量,x,的元素个数。,如果对一个矩阵,A,用,length(A),函数测试,则返回该矩阵行、列的最大值,即该函数等效于,max(size(A),。,10,(2),矩阵的元素,MATLAB,的矩阵元素可用任何表达式来描述,它既可以是实数,也可以是复数,例如,B=-1/3 1.3;sqrt(3)(1+2+3)*i,结果显示:,B,-0.3333 1.3000,1.7321 0+6.0000i,11,矩阵的元素,MATLAB,允许把矩阵作为元素来建立新的矩阵,例如,利
6、用,A,矩阵通过下面的语句,C=A;10,11,12,结果显示:,C=,1 2 3,4 5 6,7 8 9,10 11 12,12,矩阵的元素,MATLAB,还允许对一个矩阵的单个元素进行赋值和操作,例如如果想将,A,矩阵的第,2,行第,3,列的元素赋为,100,,则可通过下面的语句来完成,A,(2,3)=100,结果显示:,A=,1 2 3,4 5 100,7 8 9,这时将只改变此元素的值,而不影响其它元素的值。,13,矩阵的元素,如果给出的行数或列数大于原来矩阵的范围,则,MATLAB,将自动扩展原来的矩阵,并将扩展后未赋值的矩阵元素置为,0,。例如如果想把矩阵,A,的第,4,行第,5,
7、列元素的值定义为,8,,就可以通过下面语句来完成。,A,(4,5)=8,结果显示:,A,=,1 2 3 0 0,4 5 100 0 0,7 8 9 0 0,0 0 0 0 8,14,矩阵的元素,MATLAB,还允许对子矩阵进行定义和处理。例如:,A,(1:3,1:2:5),%,取,A,矩阵的第,1,行到第,3,行内,且位于第,1,,,2,,,5,列上的所有元素构成的子矩阵,A,(2:3,:),%,取,A,矩阵的第,2,行和第,3,行所有元素构成的子矩阵,15,(3),特殊矩阵的实现,在,MATLAB,中特殊矩阵可以利用函数来建立。,(1),单位矩阵函数,eye(),基本格式:,A,eye(n)
8、产生一个,n,阶的单位矩阵,A,A,eye(size(B),产生与,B,矩阵同阶的单位矩阵,A,如,:,A=eye(5),16,特殊矩阵的实现,(2),零矩阵函数,zeros(),(3)1,矩阵函数,ones(),(4),随机元素矩阵函数,rand(),(5),对角矩阵函数,diag,(),(6),伴随矩阵函数,compan,(),(7),上三角矩阵函数,triu,(),和下三角矩阵函数,tril,(),17,2.,矩阵的基本运算,矩阵运算是,MATLAB,的基础,,MATLAB,的矩阵运算功能十分强大,并且运算的形式和一般的数学表示十分相似。,18,(1),矩阵的转置,矩阵转置的运算符为“
9、例如,A,=1 2 3;4 5 6;,B,=,A,结果显示:,B,=,1 4,2 5,3 6,19,矩阵的转置,如果是复数的矩阵,则转置()将同时对复数进行共轭处理,而(,.,)则只是将其排列形式进行转置。,例:,b=1+2i 2-7i,b=,1.0000-2.0000i,2.0000+7.0000i,b=1+2i 2-7i.,b=,1.0000+2.0000i,2.0000-7.0000i,20,(2),矩阵的加和减,矩阵的加减法的运算符为“”和“”。矩阵只有,同阶,方可进行加减运算,标量可以和矩阵进行加减运算但应对矩阵的,每个元素,施加运算。例如,A,=1 2 3;4 5 6;,B
10、A,+1,B,=,2 3 4,5 6 7,21,(3),矩阵的乘法,矩阵的乘法运算符为“*”。当两个矩阵中,前一矩阵的列数和后一矩阵的行数相同,时,可以进行乘法运算,这与数学上的形式是一致的。例如:,C,A,*,B,;,在,MATLAB,中还可进行矩阵和标量相乘,其结果为标量与矩阵中的,每个元素,分别相乘。,22,(4),矩阵的除法,矩阵的除法有两种运算符“,”,和“,/”,分别表示左除和右除。,一般地讲,,x=A,B,是,A,*,x=B,的解,,x=B,/,A,是,x,*,A,=,B,的解,通常,A,B,B,/,A,而,A,B,=inv(,A,)*,B,B,/,A,=,B,*,inv(
11、A,),23,(5),矩阵的乘方,矩阵的乘方运算符为“”。一个方阵的乘方运算可以用,A,P,来表示。,P,为正整数,则,A,的,P,次幂即为,A,矩阵自乘,P,次,。如果,P,为负整数,则可以将,A,自乘,P,次,然后对结果进行求逆运算,就可得出该乘方结果。如果,P,是一个分数,例如,P,n,m,,其中,n,和,m,均为整数,则首先应该将,A,矩阵自乘,n,次,然后对结果再开,m,次方。,24,(6),矩阵的翻转,MATLAB,还提供了一些矩阵翻转处理的特殊命令,对,nm,维矩阵,A,,如,B,=,fliplr(,A,),%,将矩阵,A,进行左右翻转再赋给,B,,即,b,ij,a,i,m+1
12、j,,,C,=flipud(,A,),%,将矩阵,A,进行上下翻转再赋给,C,,即,c,ij,a,n+1-i,j,,,D,=rot90(,A,),%,将矩阵,A,逆时针,进行旋转,90,度后赋给,D,,即,d,ij,a,j,m+1-i,。,25,(7),矩阵的超越函数,MATLAB,中,exp(),sqrt(),sin(),cos(),等基本函数命令可以直接使用在矩阵上,这种运算只定义在矩阵的单个元素上,即分别对矩阵的,每个元素,进行运算。,超越数学函数,可以在函数后加上,m,而成为矩阵的超越函数,例如,expm(,A,),sqrtm(,A,),logm(,A,),分别为矩阵指数、矩阵开方和
13、矩阵对数。矩阵的超越函数要求运算的矩阵必须为方阵。,26,3.,矩阵的特殊运算,(1),矩阵行列式和矩阵求逆,求逆:,inv(A,),求行列式:,det(A),要求矩阵必须为,方阵,。,a=1 2 3;4 5 6;2 3 5;,b=inv,(a),b=,-2.3333 0.3333 1.0000,2.6667 0.3333 -2.0000,-0.6667 -0.3333 1.0000,det,(a),ans=,-3,27,(2),矩阵的迹,假设一个方阵为,A,a,ij,i,j=1,2,n;,则矩阵,A,的迹定义为,即矩阵的迹为该矩阵,对角线上各个元素之和,。由代数理论可知矩阵的迹和该矩阵的特征
14、值之和是相同的。,在,MATLAB,中提供了求取矩阵迹的函数,trace(),,,其调用方法为,trace(A),28,(3),矩阵的秩,对于,nm,维的矩阵,A,,,若矩阵所有的列向量中共有,rc,个线性无关,则称矩阵的列秩为,rc,,,如果,rc=m,,,则称,A,为列满秩矩阵;相应地,若矩阵,A,的行向量中有,rr,个是线性无关的,则称矩阵,A,的行秩为,rr,如果,rr,n,,,则称,A,为行满秩矩阵。,MATLAB,提供了一个内部函数,rank(),来用数值方法求取一个已知矩阵的秩,其调用格式为,k=rank(A),29,(4),矩阵的三角分解,矩阵的三角分解又称为,LU,分解,它的
15、目的是将一个矩阵,A,分解成一个下三角矩阵,L,和一个上三角矩阵,U,的乘积,亦即可以写成,A,LU,。,在,MATLAB,下也给出了矩阵的,LU,分解函数,lu(),,,该函数的调用格式为,L,U,=lu(A),30,(5),矩阵的特征值与特征向量,V,,,D,=eig(A),其中:,A,为要处理的矩阵,,D,为一个对角矩阵,其对角线上的元素为矩阵,A,的特征值,而每个特征值对应的,V,矩阵的列为该特征值的特征向量。该矩阵是一个满秩矩阵,它满足,AV,VD,,,且每个特征向量各元素的平方和均为,1,。如果调用该函数时只返回一个变量,D,,则,D,为,A,的特征值。,31,(6),矩阵的特征多
16、项式、特征方程和特征根,MATLAB,提供了求取矩阵特征多项式系数的函数,poly(),,其调用格式为,P=,poly(A,),其中:,A,为给定的矩阵,返回值,P,为一个行向量,其各个分量为矩阵,A,的降幂排列的特征多项式系数。即,P=a,0,a,1,a,n,32,MATLAB,语言把多项式表达成一个行向量,该向量中的元素是按多项式降幂排列的。,f(x)=a,0,x,n,+a,1,x,n-1,+a,n-1,x+a,n,可用行向量,p=a,0,a,1,a,n-1,a,n,表示。,poly(A)1,、,产生,A,矩阵特征多项式系数向量;,2,、求根向量,A,对应的多项式。,特征多项式一定是,n+
17、1,维的,特征多项式第一个元素一定是,1,33,例,:,a=1 2 3;4 5 6;7 8 0;,p=,poly(a,),p=,1.00 -6.00 -72.00 -27.00,p,是多项式,p(x)=x,3,-6x,2,-72x-27,的,MATLAB,描述方法,我们可用函数文件,显示数学多项式的形式:,p1=poly2sym(p),p1=,x3-6*x2-72*x-27,34,MATLAB,中根据矩阵特征多项式求特征根的函数为,roots(),,其调用格式为,V,=,roots(,P,),其中:,P,为特征多项式的系数向量,而,V,为特征多项式的解,即原始矩阵的特征根。,35,例:,a=1
18、 2 3;4 5 6;7 8 0;p=poly(a),p=,1.00 -6.00 -72.00 -27.00,r=,roots(p,),r=,12.1229,-5.7345,-0.3884,显然,,r,是矩阵,a,的特征值,36,当然我们可用,poly,令其返回多项式形式,p2=poly(r),p2=,1.00 -6.00 -72.00 -27.00,MATLAB,规定多项式系数向量用行向量表示,一组根用列向量表示。,37,1.5.2,向量运算,虽然在,MATLAB,中向量和矩阵在形式上有很多的一致性,但它们实际上遵循着不同的运算规则。,MATLAB,向量运算符由矩阵运算符前面加一点“,.”,
19、来表示,如“,.*”,、“,./”,和“,.,”等。,38,1.,向量的加减,向量的加、减运算与矩阵的运算相同,所以“”和“”既可被向量接收又可被矩阵接收。,39,2.,向量的乘法,向量乘法的操作符为“,.*”,。如果,x,,,y,两向量具有相同的维数,则,x,.*,y,表示,x,和,y,单个对应元素之间的对应相乘。例如,x,=1 2 3;,y,=4 5 6;,z=x,.*,y,z,=,4 10 18,可见向量的输入和输出与矩阵具有相同的格式,但它们的运算规则不同,例如,如果,x,是一个向量,则求取函数,x,平方时不能直接写成,x,*,x,,而必须写成,x,.*,x,,否则将给出错误信息。,4
20、0,但是对于矩阵可以使用向量运算符号,这时实际上就相当于把矩阵看成了向量进行运算。例如对于两个维数相同的,A,B,矩阵,,C,A,.*,B,表示,A,和,B,矩阵的相应元素之间直接进行乘法运算,然后将结果赋给,C,矩阵,把这种运算称为矩阵的点积运算,,两个矩阵之间的点积是它们,对应元素,的直接运算,,它与矩阵的乘法是不同的。例如,A=1 2 3;4 5 6;7 8 9;,B=2 3 4;5 6 7;8 9 0;C=A.*B,C=,2 6 12,20 30 42,56 72 0,41,3.,向量的除法,向量除法的操作符为“,./”,或“,.,”。它们的运算结果一样。例如对前面给出的,x,和,y,
21、向量,x,=1 2 3;,y,=4 5 6;,z=y,./,x,z=,4.0000 2.5000 2.0000,42,对于向量,x,.,y,和,y,./,x,一样,将得到相同的结果,这与矩阵的左除、右除是不一样的,因向量的运算是它们对应元素间的运算。,对于矩阵也可使用向量的除法操作符,这时就相当于把矩阵看成向量进行运算。,43,4.,向量的乘方,向量乘方的运算符为“,.,”。向量的乘方是对应元素的乘方,在这种底与指数均为向量的情况下,要求它们的维数必须相同。例如,x,=1 2 3;,y,=4 5 6;,z,=,x,.,y,z,=,1 32 729,它相当于,z,=1 2 3.4 5 6=1,4
22、2,5,3,6,44,1.5.3,关系和逻辑运算,1,关系运算,MATLAB,常用的关系操作符见表,1-8,表示。,MATLAB,的关系操作符可以用来比较两个大小相同的矩阵,或者比较一个矩阵和一个标量。如果给定的关系成立,则操作结果为逻辑真,(1),,否则操作结果为逻辑假,(0),。,45,表,1-8,关系运算符,关系操作符,意 义,关系操作符,意 义,小于,大于等于,小于等于,等于,大于,=,不等于,46,函数,find(),在关系运算中很有用,它可以在矩阵中找出一些满足一定关系的数据元素。例如,A,=1:9;,B,=,A,4,B=,0 0 0 0 1 1 1 1 1,C=A(A4),C=
23、5 6 7 8 9,或,C=,find(A,4),C=,5 6 7 8 9,find,功能:查找非零元素的值。,格式:,k=find(X),47,2.,逻辑运算,MATLAB,的逻辑操作符有(与)、,|,(或)和,(非)。它们通常用于元素或,0,1,矩阵的逻辑运算。,与运算符和或运算符可比较两个标量或两个同阶矩阵,对于矩阵,逻辑运算符是作用于矩阵中的,元素,。逻辑运算结果信息也用“,0”,和“,1”,表示,逻辑操作符认定任何非零元素都表示为真。给出,1,为真,,0,为假。,48,非是一元操作符,当,A,非零时,,A,返回的信息为,0,,当,A,为零时,,A,返回信息为,1,。因而就有:,P,
24、P,),返回值为,1,,,P,(,P,),返回值为,0,。例,A,=1:9;,C,=(,A,4),C,=,1 1 1 1 0 0 0 0 0,C,=(,A,4)&(,A,p=1 5 0 3 2;f=poly2str(p,x),结果显示:,f=,x4+5 x3+3 x+2,52,2,多项式的四则运算,多项式的四则运算主要是多项式的加、减、乘和除运算。其中多项式的加、减运算要求两个相加、减多项式的系数向量维数的大小必须相等。,(1),多项式的加减,例,1-11,求以下两个多项式的和。,f,1,(,x,)=,x,4,+5,x,3,+3,x,+2,,,f,2,(,x,)=,x,2,+6,x,+5
25、解:,MATLAB,命令如下,p1=1 5 0 3 2;p2=0 0 1 6 5;p=p1+p2,p=,1 5 1 9 7,53,(2),多项式的乘法,在,MATLAB,中,多项式的乘法运算,利用函数,conv(),来实现,函数,conv(),相等于执行两个数组的卷积,其调用格式为,p=conv(p1,p2),上例中:,p1=1 5 0 3 2;p2=1 6 5;p=conv(p1,p2),p=,1 11 35 28 20 27 10,54,(3),多项式的除法,在,MATLAB,中,多项式的除法运算,利用函数,deconv,(),来实现,其调用格式为,p,r,=deconv(p1,p2),
26、其中:,p,为商多项式、,r,为余多项式。,函数,deconv,(),相当于两个数组的解卷运算,使,p1=conv(p2,p)+r,成立。,55,3,多项式的值及多项式的导数,在,MATLAB,中提供了多项式求值函数,polyval(),和多项式求导的函数,polyder(),它们的调用格式分别为,f0=polyval(p,x0),dp,=,polyder(p,),其中:,x0,为求值点的,x,值,,p,为多项式的系数向量。,同样,,MATLAB,也提供了多项式矩阵的求值函数,polyvalm(),,,其调用格式为,fA=polyvalm(p,A),56,4,多项式的求解,MATLAB,中多项
27、式的求解运算同样可利用前面介绍的函数,roots(),来实现,其调用格式为,r=,roots(p,),57,5,多项式的拟合,在,MATLAB,中,多项式的拟合可用函数,polyfit,(),来实现,其调用格式为,p,s,=,polyfit(x,y,n,),其中:,x,y,为利用最小二乘法进行拟合的数据;,n,为要拟合的多项式的阶次;,p,为要拟合的多项式的系数向量;,s,为使用该函数获得的错误预估计值。,一般说来,多项式拟合的阶数越高,拟合的精度就越高。,58,例:,x=0:0.1:2*pi;,%,生成样本点,x,y=sin(x)+0.5*rand(size(x);,%,生成样本点,y,,,通过随机矩阵,p=polyfit(x,y,3),%,拟合出多项式(,3,阶),y1=polyval(p,x);,%,求多项式的值,plot(x,y,+,x,y1,-r,),%,绘制多项式曲线,验证结果,p1=poly2str(p,x),59,运行结果:,60,






