1、第3章 矩阵、数组和符号运算,一、矩阵和数组运算 要求内容: ( 1)熟练掌握矩阵的创建。 ( 2)掌握矩阵运算和数组运算。 ( 3)学会如何使用矩阵运算函数和数组运算函数。 ( 4)注意区分矩阵和数组的差别,特别是运算符的差别。 ( 6)了解多项式的创建方法和基本运算。,MATLAB 以矩阵为基本的运算单元,向量和标量作为特殊的矩阵处理:向量看作只有一行或一列的矩阵;标量看作只有一个元素的矩阵。 1、 矩阵的构造 a.直接输入 b.利用内部函数产生矩阵 c.利用M文件产生矩阵 d.从外部数据文件调入矩阵,第3章 矩阵、数组和符号运算,第3章 矩阵、数组和符号运算,a. 直接输入 直接输入需遵
2、循以下基本规则: 整个矩阵应以“ ”为首尾,即整个输入矩阵必须包含在方括号中; 矩阵中,行与行之间必须用分号“ ;”或 Enter 键( 按 Enter 键)符分隔; 每行中的元素用逗号“ ,”或空格分隔; 矩阵中的元素可以是数字或表达式,但表达式中不可包含未知的变量,MATLAB用表达式的值为该位置的矩阵元素赋值。当矩阵中没有任何元素时,该矩阵被称作“ 空阵”( Empty Matrix)。, A=1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16A =1 2 3 45 6 7 89 10 11 12 13 14 15 16利用表达式输入 B=1,sqrt(25),
3、9,13 2,6,10,7*2 3+sin(pi),7,11,15 4,abs(-8),12,16 B =1 5 9 132 6 10 143 7 11 154 8 12 16,第3章 矩阵、数组和符号运算,第3章 矩阵、数组和符号运算,由向量构成矩阵 向量是组成矩阵的基本元素之一。向量元素需要用方括号括起来。元素之间用空格和逗号分隔生成行向量,用分号隔开生成列向量。可以把行向量看成1n 阶矩阵,把列向量看成n1 阶矩阵。 向量的构造方法:直接输入向量利用冒号生成向量利用 linspace/logspace 生成向量 a=1,2,3,4; x=0:0.5:2; % x=logspace(a,b
4、,n) 生成有 n 个元素的行向量 x,其元素起点 x(1)=10a,终点 x(n)=10b。 b=logspace(0,2,4) b =1.0000 4.6416 21.5443 100.0000, x x =0 0.5000 1.0000 1.5000 2.0000 % x=linspace(a,b,n) 生成有 n 个元素的行向量 x,其元素值在 a、b 之间线性分布。 y=linspace(0,2,7) y =0 0.3333 0.6667 1.0000 1.3333 1.6667 2.0000 z=-1 x 3 z =-1.0000 0 0.5000 1.0000 1.5000 2.
5、0000 3.0000 u=y;z u =0 0.3333 0.6667 1.0000 1.3333 1.6667 2.0000-1.0000 0 0.5000 1.0000 1.5000 2.0000 3.0000,第3章 矩阵、数组和符号运算,第3章 矩阵、数组和符号运算,b.利用内部函数产生矩阵 %compan生成x向量的伴随矩阵 x=2,4,6,8,10 x =2 4 6 8 10 compan(x) ans =-2 -3 -4 -5 -61 0 0 0 00 1 0 0 00 0 1 0 00 0 0 1 0 % eye 生成单位阵 S=eye(6) S =1 0 0 0 0 00
6、1 0 0 0 00 0 1 0 0 00 0 0 1 0 00 0 0 0 1 00 0 0 0 0 1,% ones 生成全部元素为 1 的矩阵 ones(3,4) ans =1 1 1 11 1 1 11 1 1 1 F=5*ones(3) F =5 5 55 5 55 5 5 % zeros 生成全部元素为0的矩阵 Z=zeros(2,4) Z =0 0 0 00 0 0 0 % rand 生成均匀分布的随机矩阵 R=rand(4) R =0.9501 0.8913 0.8214 0.92180.2311 0.7621 0.4447 0.73820.6068 0.4565 0.6154
7、 0.17630.4860 0.0185 0.7919 0.4057,%生成空阵 K=K =,第3章 矩阵、数组和符号运算,c.利用M文件产生矩阵 A=1,2,3,4,56,7,8,9,1011,12,13,14,1516,17,18,19,20 21,22,23,24,25,第3章 矩阵、数组和符号运算,d.从外部数据文件调入矩阵用load命令输入用Import 菜单输入,第3章 矩阵、数组和符号运算,2、矩阵元素的修改 A=1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16A =1 2 3 45 6 7 89 10 11 1213 14 15 16 A(1,1)
8、ans =1 A(2,3) ans =7 A(1,1)=0;A(2,2)=A(1,2)+A(2,1);A(4,4)=cos(0); A A =0 2 3 45 7 7 89 10 11 1213 14 15 1,第3章 矩阵、数组和符号运算,3、矩阵的运算 矩阵运算按照线性代数中基本的运算法则进行; 加减运算必须在具有相同行列的矩阵之间进行; 只有当矩阵 A 的列数和矩阵 B 的行数相同时,才可进行矩阵 A 和 B 的乘法运算; 乘方运算只有在矩阵为方阵时才有意义; 当一个矩阵和一个标量( 11 的矩阵)进行运算时,其结果将是此标量和矩阵中的每一个元素“ 相加”、“ 相减”、“ 相乘”、“ 相
9、除”; 在 MATLAB 中,矩阵左除和右除的含义不同。矩阵右除定义为:BA=(A/B)。,第3章 矩阵、数组和符号运算,a. 矩阵的加减运算 A=1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16 B=1,sqrt(25),9,13 2,6,10 7*2 3+sin(pi),7,11,15 4,abs(-8),12,16 C=A+BC =2 7 12 177 12 17 2212 17 22 2717 22 27 32 D=A-B D =0 -3 -6 -93 0 -3 -66 3 0 -39 6 3 0, E=A+3E =4 5 6 78 9 10 1112 13
10、 14 15 16 17 18 19,第3章 矩阵、数组和符号运算,b. 矩阵乘法 C=A*B C =30 70 110 15070 174 278 382110 278 446 614150 382 614 846 D=A*3 D =3 6 9 1215 18 21 2427 30 33 3639 42 45 48 c. 矩阵除法 左除 AB=inv(A)*B A=8,1,6;3,5,7;4,9,2 A =8 1 63 5 74 9 2, B=1,1,1;1,2,3;1,3,6B =1 1 11 2 31 3 6 AB ans =0.0667 0.0500 0.09720.0667 0.30
11、00 0.63890.0667 0.0500 -0.0694 C=inv(A) C =0.1472 -0.1444 0.0639-0.0611 0.0222 0.1056-0.0194 0.1889 -0.1028 C*Bans =0.0667 0.0500 0.09720.0667 0.3000 0.63890.0667 0.0500 -0.0694,右除 A/B =A*inv(B) A/B ans =27 -31 121 2 0-13 29 -12 D=inv(B)D =3 -3 1-3 5 -21 -2 1 A*D ans =27 -31 121 2 0-13 29 -12,第3章 矩阵
12、、数组和符号运算,当对矩阵作除法运算时,有可能因为误差设置的差别导致不精确的结果,此时,MATLAB 会自动给出警告信息: MATLAB 采用 IEEE( 国际认可的)算法,即使 A 为奇异阵( 即 A 的行列式值是0),运算也照样进行,但是此时 MATLAB 将给出警告信息:“ Warning: Matrix is singular to working precision.”,求出的矩阵所有元素为无穷大( Inf); 当矩阵 A 为病态阵( Badly Scaled)时,MATLAB 使用的算法产生的误差可能很大,MATLAB 系统也将给出警告信息:“ Warning: Matrix is
13、 badly scaled to working precision. Results may be inaccurate.”。, E=1,2,3;4,5,6;7,8,9 E =1 2 34 5 67 8 9 F=1,4,7;2,5,8;3,6,9 F =1 4 72 5 83 6 9, EF Warning: Matrix is close to singular or badly scaled.Results may be inaccurate. RCOND = 1.541976e-018. ans =-0.3333 -7.3333 -14.33330.6667 11.6667 22.66
14、670 -4.0000 -8.0000,第3章 矩阵、数组和符号运算,4、矩阵的函数 a.矩阵的基本变换函数 A=3,3,5;2,4,6;7,8,9 %创建方阵 A A =3 3 52 4 67 8 9 inv(A) %矩阵的逆(A必须为非奇异方阵)ans =0.5000 -0.5417 0.0833-1.0000 0.3333 0.33330.5000 0.1250 -0.2500 A %矩阵的转置ans =3 2 73 4 85 6 9,b.常用的矩阵运算函数,只有方阵才可计算行列式值,即 det(A)的计算只有在 A 为方阵时才有意义。 logm(A)和 sqrtm(A)计算矩阵的对数/
15、平方根是指对整个矩阵 A 求对数/平方根。,第3章 矩阵、数组和符号运算,第3章 矩阵、数组和符号运算, det(A) %求方阵 A 的行列式值 ans =-24 eig(A) %求特征值 ans =16.75030.8793-1.6295 logm(A) %求矩阵 A 的对数 ans =0.5432 + 0.8066i 0.7475 + 0.5526i 0.6902 - 0.6914i0.8584 + 1.4131i 0.7845 + 0.9681i 0.6967 - 1.2112i0.7502 - 1.5947i 1.1089 - 1.0926i 1.8504 + 1.3668i sqrt
16、m(A) %求矩阵 A 的平方根 ans =1.2466 + 0.3278i 0.5192 + 0.2246i 1.0906 - 0.2809i0.2001 + 0.5742i 1.4228 + 0.3934i 1.3620 - 0.4921i1.6144 - 0.6480i 1.7430 - 0.4439i 2.3610 + 0.5554i,c.矩阵的分解函数,第3章 矩阵、数组和符号运算,第3章 矩阵、数组和符号运算, X=3,-1,2;1,2,-1;-2,1,4 %输入矩阵 XX =3 -1 21 2 -1 -2 1 4 L,U=lu(X) %对矩阵 X 进行 LU 分解L =1.000
17、0 0 00.3333 1.0000 0-0.6667 0.1429 1.0000 U =3.0000 -1.0000 2.00000 2.3333 -1.66670 0 5.5714, Q,R=qr(X) %对矩阵 X 进行 QR 分解Q =-0.8018 0.1543 0.5774-0.2673 -0.9567 -0.11550.5345 -0.2469 0.8083R =-3.7417 0.8018 0.80180 -2.3146 0.27770 0 4.5033,第3章 矩阵、数组和符号运算,5、数组运算 Matlab是以矩阵为基本运算单元的,数组作为独立的计算单元实体是不存在的。数组
18、运算是Matlab的一种运算形式,它从矩阵的单个元素出发,针对每个元素进行的运算。MATLAB对数组运算在符号上做了不同的约定,运算符形式为:.* , ./ , . , . 矩阵运算和数组运算有着显著的不同。属于两种不同的运算:矩阵运算是从矩阵的整体出发,按照线性代数的运算规则进行,有着明确而严格的数学规则;而数组运算是从矩阵的单个元素出发,针对每个元素进行的运算。 对于加法和减法而言,矩阵运算和数组运算相同;对于乘法和除法而言,矩阵和数组的运算有着显著的不同。,第3章 矩阵、数组和符号运算,矩阵的数组乘/除及乘方 数组除的运算规则: 当参与除运算的两个矩阵同维时,运算为矩阵的相应元素相除,计
19、算结果是与参与运算的矩阵同维的矩阵; 当参与运算的矩阵有一个是标量时,运算是标量和矩阵的每一个元素相除,计算结果是与参与运算的矩阵同维的矩阵; 右除与左除的关系为 A./B=B.A,其中 A 是被除数,B 是除数。,第3章 矩阵、数组和符号运算, E=1,2,3;4,5,6;7,8,9 E =1 2 34 5 67 8 9 F=1,4,7;2,5,8;3,6,9 F =1 4 72 5 83 6 9 E.F ans =1.0000 2.0000 2.33330.5000 1.0000 1.3333 0.4286 0.7500 1.0000 4.Fans =0.2500 1.0000 1.750
20、00.5000 1.2500 2.0000 0.7500 1.5000 2.2500, F./Eans =1.0000 2.0000 2.33330.5000 1.0000 1.33330.4286 0.7500 1.0000 E*F ans =14 32 5032 77 12250 122 194 E.*F ans =1 8 218 25 4821 48 81,数组乘方的运算规则: 矩阵的标量乘方 A.p( 即 A 为矩阵,p 为标量),运算为矩阵每个元素的 p 次方,计算结果是与矩阵A 同维的矩阵; 标量的矩阵乘方 p.A,表示以 p 为底,分别以 A 的元素为指数求幂值,计算结果是与矩阵
21、A 同维的矩阵。,第3章 矩阵、数组和符号运算,b.向量的数组运算: 加/减法: x=1,2,3 y=4,5,6 c=x-y a=1+x 乘/除法: b=2*x b=2.*x z3=x.9 z4=x./9 z=x.*y z1=x./y z2=x.y,第3章 矩阵、数组和符号运算,乘方: z7=2.x z5=x.3 z6=x.y点积、叉积: c1=dot(a,b) c1= sum(a.*b) c2=cross(a,b),6、数组函数,常用的数学函数,第3章 矩阵、数组和符号运算,常用三角函数和超越函数,第3章 矩阵、数组和符号运算, A=3,3,5;2,4,6;7,8,9A =3 3 52 4
22、67 8 9 log(A) ans =1.0986 1.0986 1.60940.6931 1.3863 1.79181.9459 2.0794 2.1972 sqrt(A) ans =1.7321 1.7321 2.23611.4142 2.0000 2.4495 2.6458 2.8284 3.0000, cos(A) ans =-0.9900 -0.9900 0.2837-0.4161 -0.6536 0.9602 0.7539 -0.1455 -0.9111 pow2(A) ans =8 8 324 16 64128 256 512 2.A ans =8 8 324 16 64128
23、256 512,第3章 矩阵、数组和符号运算,7、多项式及其运算 a.多项式的输入 向量A=a0,a1,an-1,an, 则命令poly(A)会生成(x-a0)(x-a1)(x-an-1)(x-an) 的多项式 a a =1 2 3 4 PA=poly(a) PA =1 -10 35 -50 24 poly2sym(PA,x)ans =x4-10*x3+35*x2-50*x+24 p_a=poly2sym(a) p_a =x3+2*x2+3*x+4,第3章 矩阵、数组和符号运算,b.多项式的运算 a a = 1 2 3 4 b=0,1 b = 0 1 加法: c=a+0 0 b c =1 2
24、3 5 乘法: d=conv(a,b) d = 0 1 2 3 4,除法: div,rest=deconv(d,a) div =0 1 rest = 0 0 0 0 0 微分: polyder(a) ans =3 4 3 求根: roots(a) ans =-1.6506 -0.1747 + 1.5469i-0.1747 - 1.5469i,第3章 矩阵、数组和符号运算,求值: a=1,2,3,4 a =1 2 3 4 b=1,1;1,1 b =1 11 1 polyvalm(a,4) % x=4时多项式的值ans =112 %与polyval(a,4)结果相同 polyval(a,b) %数
25、组运算 ans =10 1010 10 polyvalm(a,b) %矩阵运算 ans =15 1111 15,第3章 矩阵、数组和符号运算,多项式拟合: x=0:pi/20:pi/2; y=sin(x); p,s=polyfit(x,y,5); x1=0:pi/30:pi*2; y1=sin(x1); y2=p(1)*x1.5+p(2)*x1.4+p(3)*x1.3+p(4)*x1.2+p(5)*x1+p(6); plot(x1,y1,b-,x1,y2,r*) legend(Original curve,Fitted curve) axis(0,7,-1.2,4),( 1)在 MATLAB
26、6.0 的工作空间中用直接输入法建立如下两个矩阵,然后在矩阵编辑器中将矩阵A改为3行3列的矩阵,并将其保存。, ( 2)分别对(1)产生的两个矩阵 作加、减、乘和除(左除,右除)运算,同时运用数组运算法则进行运算,比较二者的计算结果有何异同。 ( 3)利用矩阵生成函数建立一个对角线元素全部为 1 的 4 阶单位矩阵。 ( 4)利用矩阵生成函数建立一个 44 的随机矩阵。,上机习题(4),( 5)对题(4)所产生的矩阵求特征值和特征向量,并用 lu和 qr命令对该矩阵进行分解。 ( 6)对题( 1)中的矩阵 B 求秩、行列式的值、条件数、平方根及对数。 ( 7)将如下矩阵 A 进行转置和求逆。( 8)在 MATLAB 环境下,用下面三条指令创建矩阵 C,看输出怎样的结果。 a=2.7358; b=33/79; C=1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i,上机练习(4),