1、Matlab数值与符号运算功能,数值计算功能符号计算功能,数值计算功能,数字计算功能 向量运算功能 矩阵运算功能 数组逻辑运算功能 多项式运算功能,数字运算功能,Matlab是以矩阵为基本运算单元的,而构成矩阵的基本单元是数字。258369ans95202x258369x95202,变量,(1)变量的命名:变量的名字必须以字母开头(不超过19个字符),之后可以是字母、数字或下划线;变量名区分字母的大小写;变量中不能包含有标点符号。 (2)一些特殊的变量 ans:用于结果的缺省变量名 i、j:虚数单位 pi:圆周率 eps:计算机的最小数(相对精度) inf:无穷大 realmin:最小正实数
2、realmax:最大正实数 nan:不定量(not a number) (3)变量操作 在命令窗口中,同时存储着输入的命令和创建的所有变量值,它们可以在任何需要的时候被调用。如要察看变量a的值,只需要在命令窗口中输入变量的名称即可:a,数值显示格式,任何MATLAB的语句的执行结果都可以在屏幕上显示,同时赋值给指定的变量,没有指定变量时,赋值给一个特殊的变量ans,数据的显示格式由format命令控制。 format只是影响结果的显示,不影响其计算与存储;MATLAB总是以双字长浮点数(双精度)来执行所有的运算。 Matlab的所有计算都是通过双精度进行的,在内存中的数都是双精度的。doubl
3、e 是一个双精度浮点数,每个存储的双精度数用64位。,如果结果为整数,则显示没有小数;如果结果不是整数,则输出形式有: format (short):短格式(5位定点数)99.1253 format long:长格式(15位定点数 ) 99.12345678900000 format short e:短格式e方式 9.9123e+001 format long e:长格式e方式 9.912345678900000e+001 format bank:2位十进制 99.12 format hex:十六进制格式,简单的数学运算,1、常用的数学运算符 ,*(乘),/(左除),(右除),(幂) 在运算式
4、中,MATLAB通常不需要考虑空格;多条命令可以放在一行中,它们之间需要用分号隔开;逗号告诉MATLAB显示结果,而分号则禁止结果显示。 2、常用数学函数abs,sin,cos,tan,asin,acos,atan,sqrt,exp,imag,real, sign,log,log10,conj(共扼复数)等,2.向量运算功能,1向量向量是matlab中的一个基本单位,向量的每一个元 素的运算包括1)向量的创建; 2)向量的加减运算;3)向量的乘除运算,向量的创建,输入向量最直接的方法就是在命令窗口中输入,格式上需要向量元素用“ ”括起来,元素之间可以用空格、逗号或分号分隔。值得注意的是用空格和
5、逗号分隔生成行向量,用分号分隔生成列向量。在matlab的命令窗口键入以下字符 a = 1 2 3 4 5 6 9 8 7a = 1 2 3 4 5 6 9 8 7希望得到元素从0到20,步距为2的一个向量,只需键入以下命令即可 t = 0:2:20t = 2 4 6 8 10 12 14 16 18 20,可以不要,线性等分向量的生成 y=linspace(x1,x2) 生成(1*100)维的行向量,使得y(1)=x1,y(100)=x2 y=linspace(x1,x2,n)生成(1*n)维的行向量,使得y(1)=x1,y(n)=x2 对数等分向量的生成 y=logspace(x1,x2)
6、 生成(1*50)维的对数等分向量,使得y(1)=10x1,y(50)=10x2 y=logspace(x1,x2,n)生成(1*n)维的对数等分向量,使得y(1)=10x1,y(n)=10x2例:a2=logspace(1,5,6)a2=1 10 100 1000 10000 100000,向量的加减运算,设a,b为同维向量,则c=a+b 或c=a-b得到两个向量相加减的结果。 向量与常数的相加减为每个元素加减这个常数。例如:b = a + 2得到b =3 4 5 6 7 8 11 10 9c = a + bc =4 6 8 10 12 14 20 18 16,向量的乘除运算,a. 向量的乘
7、法运算 点乘运算的运算符为 .*, 其意义为两个向量的对应元素进行乘法运算,例如a=1 2, b=3 4 则c=a.*b=3 8 为向量的乘方运算,例如c=a.2=1 4b. 向量的除法运算,点积、叉积和混合积,点积:两个向量在其中一个向量方向上的投影的乘积 a=1,2,3; b=3,4,5; dot(a,b) ans= (相当于sum(a.*b)26 叉积:过两相交向量的交点且垂直于两向量所在平面的 向量 c=cross(a,b) c=-2 4 -2 混合积: dot(a,cross(b,c) ans=24,矩阵运算功能,矩阵的生成 矩阵的基本数学运算 矩阵的基本函数运算 矩阵分解函数 特殊
8、矩阵的生成 矩阵的一些特殊操作,矩阵的生成,输入矩阵时每一行元素有分号或者回车键分隔。例如: B = 1 2 3 4;5 6 7 8;9 10 11 12B =1 2 3 45 6 7 89 10 11 12c=sin(pi/3),cos(pi/4); log(9),tanh(6)c=0.8660 0.70712.1972 1.0000,矩阵下标 MATLAB通过确认矩阵下标,可以对矩阵进行插入子块,提取子块和重排子块的操作。 A(m,n):提取第m行,第n列元素 A(:,n):提取第n列元素 A(m,:):提取第m行元素 A(m1:m2,n1:n2):提取第m1行到第m2行和第n1列到 第n
9、2列的所有元素(提取子块)。 A(:):得到一个长列矢量,该矢量的元素按矩阵的列进行排列。 矩阵扩展:如果在原矩阵中一个不存在的地址位置上设定一个数(赋值),则该矩阵会自动扩展行列数,并在该位置上添加这个数,而且在其他没有指定的位置补零。 消除子块:如果将矩阵的子块赋值为空矩阵 ,则相当于消除了相应的矩阵子块。,A(3,3) A(1,5) A(:,3) 代表矩阵的第三列A(1: 5, :) 代表前5行所有元素组成的子矩阵 A( : ) 由矩阵直接生成列向量,先列后行,矩阵的大小 m,n=size(A,x):返回矩阵的行列数m与n,当x=1,则只返回行数m,当x=2,则只返回列数n。 lengt
10、h(A)=max(size(A):返回行数或列数的最大值。,a=1 2 3;3 4 5; m,n=size(a) m =2 n =3,length(a) ans =3 max(size(a) ans =3,矩阵的基本数学运算,B= 1 2 3 4 5 6 7 8 9 10 11 12,(2)矩阵乘法:,(1)矩阵转置运算:C = BC =1 5 92 6 103 7 114 8 12,D = B * CD =30 70 11070 174 278110 278 446,要求B的列数等于C的行数,3)矩阵点乘、加减法当两矩阵维数相同时,运算符.*的结果是两矩阵的对应元素相乘,加减法相同。E =
11、1 2;3 4;F = 2 3;4 5;G = E .* FG =2 612 20,点运算是两个维数相同矩阵对应元素之间的运算,在有的教材中也定义为数组运算。,( 4)矩阵与常数间的运算常数与矩阵的运算即是同此矩阵各元素之间进行运算数加是指矩阵每个元素都加上此常数 数减是指矩阵每个元素都乘以此常数 数乘是指矩阵每个元素都与此数相乘 数除是指矩阵每个元素都除以此常数,因此常数只能作为除数。,( 5)矩阵的除法(左除“|”和右除“/”)右除要作矩阵的逆然后再作矩阵的乘法,通常速度较快左除不需要计算逆,直接进行除运算,可以避免被除矩 阵奇异造成大的误差 解方程组:Ax=b, 其中A是(n*m)的矩阵
12、n=m且非奇异时,恰定方程nm时,超定方程(拟合)nm时,欠定方程(最优解) x=ab 或 x=b/a 都可以直接解上述方程,求得x但一般左除结果准确而且稳定 注意:ab运算等效于求a*x=b的解;而a/b等效于求x*b=a的解。,(6)矩阵的乘方矩阵为方阵时,可以进行矩阵的乘方运算,运算符为,与矩阵分解有关E3ans = 37 5481 118若仅是元素进行乘方运算,可用运算符.E.3ans =1 827 64,( 7)矩阵的逆矩阵逆利用函数inv计算,此时,要求矩阵 方阵且可逆。X = inv(E)X =-2.0000 1.00001.5000 -0.5000(8)矩阵元素的赋值与运算Ma
13、tlab允许用户对矩阵的单个元素进行赋值和操作,Matlab此时命令方式为X(i,j)=变量名,( 9)矩阵的指数和对数运算expm(a), expm1(a), expm2(a), expm3(a)logm(a) ( 10)矩阵的开方运算sqrtm(m) 注意:以上函数如果去掉最后的m,都变成只对矩阵中的每个元素进行相应的运算。( 11)矩阵的行列式运算: a1=det(a),矩阵的基本函数运算,了解矩阵超越函数 在MATLAB中exp、sqrt等命令也可以作用到矩阵上,但这种运算是定义在矩阵的单个元素上的,即分别对矩阵的每一个元素进行计算。超越数学函数可以在函数后加上m而成为矩阵的超越函数,
14、例如:expm,sqrtm。矩阵的超越函数要求运算矩阵为方阵。,(1)矩阵的特征值及特征多项式(eig或eigs)求矩阵A的特征向量V及特征值D,满足A*V=V*D。其中D的对角线元素为特征值,V的列为对应的特征向量。如果D=eig(A)则只返回特征值。 a = 1 23 4 x,y=eig(a) x =-0.8246 -0.41600.5658 -0.9094 y =-0.3723 00 5.3723 可以验证:A*V=V*D, x,y=eigs(a) x =-0.4160 -0.8246-0.9094 0.5658 y =5.3723 00 -0.3723,跌代法求解,(2)奇异值函数(s
15、vd或svds) 求矩阵A的奇异值及分解矩阵,满足U*S*V=A,其中U、V矩 为正交矩阵(U*U=I),S矩阵为对角矩阵,它的对角元素即A矩阵的奇异值。 例:a =9 86 8 可以验证: u*u=I v*v=I u*s*v=a,u,s,v=svd(a) u =0.7705 -0.63750.6375 0.7705 s =15.5765 00 1.5408 v =0.6907 -0.72310.7231 0.6907,(3)条件数函数cond: 计算矩阵条件数的值condest: 计算矩阵一范数的条件数的值recond: 计算矩阵条件数的倒数值 h=hilb(9); cond(h) ans
16、=4.9315e+011 特征值的条件数:condeig, condest(h) ans =1.0997e+012 recond(h) ans =9.0938e-013,(4)范数函数矩阵的范数是矩阵的一种量度,它分为1范数、2范数、无穷大范数和F范数,最常用的是2范数,即平方和范数。normest(x):计算矩阵的2范数norm(x,p):p的取值可以是1,2,inf或fro, 分别对x求相应的范数,(5)矩阵的秩函数 h=hilb(9); rank(h)ans =9 (6)矩阵的迹函数矩阵所有对角线上元素的和称为矩阵的迹 h=hilb(9); trace(h)ans =2.0806,(7)
17、矩阵的正交空间函数用来求矩阵的一组正交基:orth h=hilb(4); orth(h)ans =-0.7926 0.5821 -0.1792 -0.0292-0.4519 -0.3705 0.7419 0.3287-0.3224 -0.5096 -0.1002 -0.7914-0.2522 -0.5140 -0.6383 0.5146,(8)矩阵的伪逆函数求解系数矩阵严重“病态”的问题时,利用pinv可避免“伪解”的产生。 a=magic(4); b=a*1 1 1 1; inv(a)*b Warning: Matrix is close to singular or badly scale
18、d.Results may be inaccurate. RCOND = 1.306145e-017. ans =0.50004.0000-2.00000, pinv(a)*b ans =1.00001.00001.00001.0000,(9)通用函数形式: funm(A,funname)上述函数形式在实际运算中是远远不够的,对常用的其它函数形式的运算,如三角函数、双曲函数等,需要一种能够使用这些通用函数进行计算的形式,matlab中通用函数的格式为funm(A,funname)如:funm(b,log) = logm(b)funm(b,sqrt) = sqrtm(b),矩阵分解函数,(1)特
19、征值分解和奇异值分解(略) (2)lu分解(三角分解) L,U=lu(A) 将A做对角线分解,使得A=L*U,其中L为下三角矩阵,U为上三角矩阵。 注意:L实际上是一个“心理上”的下三角矩阵,它事实上是一个置换矩阵P的逆矩阵与一个真正下三角矩阵L1(其对角线元素为1)的乘积。 L1,U1,P=lu(A) 例:a=1 2 3;4 5 6;7 8 9比较: l1,u1,p=lu(a) l,u=lu(a),可以验证:u1=u,inv(p)*l1=la=l*up*a=l1*u1,(3)chol分解(chollesky分解)如果A是对称正定矩阵,则存在一个实的非奇异下三角矩阵L,使得ALLT,当限定L的
20、对角元素为正时,这种分解是唯一的,称为chollesky分解。 a=4 -1 1;-1 4.25 2.75;1 2.75 3.5; chol(a) ans =2.0000 -0.5000 0.50000 2.0000 1.50000 0 1.0000,(4)QR分解将矩阵A做正交化分解,使得Q*R=A,其中Q为正交矩阵(其范数为1,指令norm(Q)=1),R为对角化的上三角矩阵。 Q,R=qr(A) 例: a =9 86 8 验证:norm(q)=1a=q*r,q,r=qr(a) q =-0.8321 -0.5547-0.5547 0.8321 r =-10.8167 -11.09400 2
21、.2188,特殊矩阵的生成,一些常用的特殊矩阵 单位矩阵:eye(m,n); eye(m) 零矩阵:zeros(m,n); zeros(m) 一矩阵:ones(m,n); ones(m) 对角矩阵:对角元素向量 V=a1,a2,an A=diag(V) 随机矩阵:rand(m,n)产生一个m*n的均匀分别的随机矩阵, randn(m,n)产生一个m*n的正态随机阵 注意:上述函数中的维数变量可用size(A)代替,表示生成的矩阵与A矩阵同维。,eye(2,3) ans=1 0 0 0 1 0 zeros(2,3) ans=0 0 00 0 0 ones(2,3) ans=1 1 11 1 1
22、V=5 7 2; A=diag(V) A=5 0 00 7 00 0 2,eye(2) ans=1 0 0 1 zeros(2) ans=0 0 0 0 ones(2) ans=1 11 1,如果已知A为方阵,则V=diag(A)可以提取A的对角元素构成向量V。,空阵:matlab中定义为空阵,一个被定义为空阵的变量具有以下性质 在matlab工作空间中确实存在被赋空阵的变量 空阵中不包含任何元素,它的维数是0*0的 空阵可以在matlab的运算中传递 可以用clear从内存中清除空阵变量, a=1:18; a=reshape(a,3,6) a =1 4 7 10 13 162 5 8 11
23、14 173 6 9 12 15 18 a1=a(:,1 3 4 6) a1 =1 7 10 162 8 11 173 9 12 18 a(:,2 5)= a =1 7 10 162 8 11 173 9 12 18,变维函数,矩阵的一些特殊操作,变维 “:”或者函数“reshape” a=1:12; b=reshape(a,2,6) b =1 3 5 7 9 112 4 6 8 10 12 c=zeros(3,4); c(:)=a(:) c =1 4 7 102 5 8 113 6 9 12,(2) 变向rot90(A):将A逆时针方向旋转90度rot90(A,k):将A逆时针方向旋转90*
24、k度,k可正可负fliplr(X):将X左右翻转flipud(X):将X上下翻转flipdim(X,DIM):将X按第DIM维翻转,(3) 抽取diag(X,k):抽取矩阵X的第k条对角线的元素向量。K 为零即为抽取主对角线,k为正值时为上方第k条对角线,k为负值时为下方第k条对角线。diag(X):即为diag(X,0),抽取主对角线元素向量diag(v,k):使得向量v为所得矩阵的第k条对角线元素diag(v): 使得v为矩阵的主对角线元素tril(X): 提取矩阵X的主下三角部分tril(X,k): 提取矩阵X的第k条对角线下面的部分(包括k对角线)triu(X): 提取矩阵的主上三角部
25、分triu(X,k): 提取矩阵X的第k条对角线上面的部分(包括k对角线), a=pascal(4) a =1 1 1 11 2 3 41 3 6 101 4 10 20, v=diag(a) v =12620, v=diag(a,2) v =14 v=diag(diag(a) v =1 0 0 00 2 0 00 0 6 00 0 0 20, a1=tril(a,-1) a1 =0 0 0 01 0 0 01 3 0 01 4 10 0, a1=tril(a,2) a1 =1 1 1 01 2 3 41 3 6 101 4 10 20,(4) 抽取 利用对矩阵标识块的赋值命令X(m1:m2,
26、n1:n2)=a, 其中(m2-m1+1)必须等于a的行维数,(n2-n1+1)必须等于a的列维数。生成的(m2*n2)维的矩阵X,除赋值子阵和已存在的元素外,其余元素都默认为零。利用小矩阵的组合来生成大矩阵 要严格注意矩阵大小的匹配。,建立多项式的伴随矩阵 v=1 2 6 20; a1=compan(v) a1 =-2 -6 -201 0 00 1 0,方法一 a2=-v(2:4);eye(2),zeros(2,1) a2 =-2 -6 -201 0 00 1 0,方法二 a3=-v(2:4); a3(2:3,1:2)=eye(2) a3 =-2 -6 -201 0 00 1 0,数组逻辑运
27、算功能,基本逻辑关系运算 在关系比较中,若比较双方为同维数组。其元素值由0和1组成,当比较双方对应位置上的元素值满足比较关系时,对应值为1,否则为0。 当比较双方中一方为常数,另一方为数组时,则结果数组与原数组同维,且其值为已知数组和常数的比较结果。 “与”:当运算双方的对应元素均为非零时结果为1,否则为0。 “或”:当运算双方的对应元素有一非零时结果为1,否则为0。 “非”:当运算数组的对应位置的值为零时结果为1,否则为0。 在算术运算、比较运算和逻辑与、非、或运算中,他们的优先级关系为:算术运算比较运算逻辑与、或、非运算, a=1:3;4:6;7:9; x=5; y=ones(3)*5;
28、xa=x=a xa =0 0 00 1 11 1 1, b=0 1 0;1 0 1;0 0 23; ab=a&b ab =0 1 01 0 10 0 1 nb=b nb =1 0 10 1 01 1 0,逻辑关系函数运算, a=magic(5); a(:,3)=zeros(5,1) a =17 24 0 8 1523 5 0 14 164 6 0 20 2210 12 0 21 311 18 0 2 9, a1=all(a(:,1) a2=all(a3) a2 =1 1 0 0 0 all=any(a(:,1)10) all =1 a11=any(a10) a11 =1 1 0 1 1, a=
29、1:5; a=1./a a =1.0000 0.5000 0.3333 0.2500 0.2000 f1=find(a) f1 =1 2 3 4 5 f2=find(abs(a)0.4|abs(a)0.23) f2 =1 2 5,多项式运算功能,多项式的表示方法多项式的运算,多项式的表示方法,多项式的表达约定: 对于多项式 ,用以下行向量表示这样就把多项式问题转化成为向量问题,例如:s4+3s3-15s2-2s+9如果想将其输入到matlab中,只需按下列方式输入向量x = 1 3 -15 -2 9x =1 3 -15 -2 9,(1) 系数向量的直接输入法, a=1 2 3 4; b=a;
30、poly2sym(a) ans = x3+2*x2+3*x+4 poly2sym(b) ans = x3+2*x2+3*x+4,将多项式向量变成符号形式,特征多项式 由特征多项式生成的多项式的首项系数一定是1 n阶矩阵一般产生n阶多项式。, a=1 2 3;2 3 4;3 4 5; p1=poly(a) p1 =1.0000 -9.0000 -6.0000 -0.0000 poly2sym(p1) ans = x3-9*x2-6*x-8399472/25353012,由根创建多项式 同样用poly函数,其实由矩阵直接创建也是把矩阵的特征值作为多项式形成的方程的根, root=-5 -3+4i
31、-3-4i; p=poly(root) p =1 11 55 125 poly2sym(p) ans = x3+11*x2+55*x+125,多项式运算,求多项式的值 输入变量值代入多项式计算时以数组为单元,此时的计算函数为polyval. 输入变量值代入多项式计算时以矩阵为单元,进行矩阵式运算,此时的计算函数为polyval., p=1 11 55 155; b=1 1;1 1; polyval(p,b) ans =222 222222 222 polyvalm(p,b) ans =236 8181 236,z = polyval(1 0 0 0 1,2)z = 17,(2)求多项式的根 直
32、接调用求根函数roots,求解所有根 通过建立多项式的伴随矩阵再求其特征值得解, p=2 -5 6 -1 9; roots(p) ans =1.6024 + 1.2709i1.6024 - 1.2709i-0.3524 + 0.9755i-0.3524 - 0.9755i, compan(p) ans =2.5000 -3.0000 0.5000 -4.50001.0000 0 0 00 1.0000 0 00 0 1.0000 0 eig(ans) ans =1.6024 + 1.2709i1.6024 - 1.2709i-0.3524 + 0.9755i-0.3524 - 0.9755i,
33、多项式的乘除法运算(conv和deconv) 卷积函数(conv)和解卷函数(deconv), p=2 -5 6 -1 9; poly2sym(p) ans = 2*x4-5*x3+6*x2-x+9 d=3 -90 -18; poly2sym(d) ans = 3*x2-90*x-18, pd=conv(p,d) pd =6 -195 432 -453 9 -792 -162 poly2sym(pd) ans = 6*x6-195*x5+432*x4-453*x3+9*x2-792*x-162 p1=deconv(pd,d) p1 =2 -5 6 -1 9,多项式加法 两个同阶多项式的相加,可
34、用z=x+y。对于一般x和y不同维数的情况,可用自定义的函数polyadd完成functionpoly=polyadd(poly1,poly2) %polyadd(poly1,poly2) adds two polynominals possibly of uneven length if length(poly1)0poly=zeros(1,mz),short+long; elsepoly=long+short; end,z = polyadd(x,y)x =1 2y =1 4 8z =1 5 10,(5) 多项式微分(polyder), p=2 -5 6 -1 9; poly2sym(p)
35、 ans = 2*x4-5*x3+6*x2-x+9 Dp=polyder(p) Dp =8 -15 12 -1 poly2sym(Dp) ans = 8*x3-15*x2+12*x-1,(6) 多项式拟合多项式拟合又称为曲线拟合,其目的就是在众多的样本点中进行拟合,找出满足样本点分布的多项式。这在分析实验数据,将实验数据做解析描述时非常有用。 Polyfit(X,Y,n) X,Y为拟合数据,n为拟合多项式的阶数 p,s=Polyfit(X,Y,n) P为拟合多项式系数向量,s为结构信息。, x=0:pi/20:pi/2; y=sin(x); a=polyfit(x,y,5); x1=0:pi/
36、30:pi*2; y1=sin(x1); y2=a(1)*x1.5+a(2)*x1.4+a(3)*x1.3+a(4)*x1.2+a(5)*x1+a(6); plot(x1,y1,b-,x1,y2,r*) legend(原曲线,拟合曲线) axis(0,7,-1.2,4),(7) 多项式插值 多项式插值是指根据给定的有限个样本点,产生另外的估计点以达到数据更为平滑的效果。该技巧在信号处理与图像处理上应用广泛。 所用指令有一维的interp1、二维的interp2、三维的interp3。这些指令分别有不同的方法,设计者可以根据需要选择适当的方法,以满足系统属性的要求。Help polyfun可以得到更详细的内容。y=interp1(xs,ys,x,method) 在有限样本点向量xs与ys中,插值产生向量x和y,所用方法定义在method中,有4种选择: nearest:执行速度最快,输出结果为直角转折 linear:默认值,在样本点上斜率变化很大 spline:最花时间,但输出结果也最平滑 cubic:最占内存,输出结果与spline差不多,