第3章 矩阵、数组和符号运算 一、矩阵和数组运算 要求内容: ( 1)熟练掌握矩阵的创建。 ( 2)掌握矩阵运算和数组运算。 第3章 矩阵、数组和符号运算 一、矩阵和数组运算 要求内容: ( 1)熟练掌握矩阵的创建。 ( 2)掌握矩阵运算和数组运算。 ( 3)学会如何使用矩阵运算函数和数组运算函数。 ( 4)注意区分矩阵和数组的差别,特别是运算符的差别。 ( 6)了解多项式的创建方法和基本运算。
第3章 矩阵、数组和符号运算 MATLAB 以矩阵为基本的运算单元,向量和标量作为特殊的矩阵处理:向量看作只有一行或一列的矩阵;标量看作只有一个元素的矩阵。 1、 矩阵的构造 a.直接输入 b.利用内部函数产生矩阵 c.利用M文件产生矩阵 d.从外部数据文件调入矩阵
第3章 矩阵、数组和符号运算 a. 直接输入 直接输入需遵循以下基本规则: 第3章 矩阵、数组和符号运算 a. 直接输入 直接输入需遵循以下基本规则: 整个矩阵应以“ [ ]”为首尾,即整个输入矩阵必须包含在方括号中; 矩阵中,行与行之间必须用分号“ ;”或 Enter 键( 按 Enter 键)符分隔; 每行中的元素用逗号“ ,”或空格分隔; 矩阵中的元素可以是数字或表达式,但表达式中不可包含未知的变量,MATLAB用表达式的值为该位置的矩阵元素赋值。当矩阵中没有任何元素时,该矩阵被称作“ 空阵”( Empty Matrix)。
第3章 矩阵、数组和符号运算 >> A=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16] 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] B = 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16
第3章 矩阵、数组和符号运算 由向量构成矩阵 向量是组成矩阵的基本元素之一。向量元素需要用方括号括起来。元素之间用空格和逗号分隔生成行向量,用分号隔开生成列向量。可以把行向量看成1n 阶矩阵,把列向量看成n1 阶矩阵。 向量的构造方法: 直接输入向量 利用冒号生成向量 利用 linspace/logspace 生成向量 >> a=[1,2,3,4]; >> x=0:0.5:2; % x=logspace(a,b,n) 生成有 n 个元素的行向量 x,其元素起点 x(1)=10a,终点 x(n)=10b。 >> b=logspace(0,2,4) b = 1.0000 4.6416 21.5443 100.0000
第3章 矩阵、数组和符号运算 % x=linspace(a,b,n) 生成有 n 个元素的行向量 x,其元素值在 a、b 之间线性分布。 第3章 矩阵、数组和符号运算 >> 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.0000 3.0000 >> u=[y;z] u = 0 0.3333 0.6667 1.0000 1.3333 1.6667 2.0000
第3章 矩阵、数组和符号运算 b.利用内部函数产生矩阵 % ones 生成全部元素为 1 的矩阵 %compan生成x向量的伴随矩阵 第3章 矩阵、数组和符号运算 b.利用内部函数产生矩阵 %compan生成x向量的伴随矩阵 >> x=[2,4,6,8,10] x = 2 4 6 8 10 >> compan(x) ans = -2 -3 -4 -5 -6 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 % eye 生成单位阵 >> S=eye(6) S = 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 % ones 生成全部元素为 1 的矩阵 >> ones(3,4) ans = 1 1 1 1 >> F=5*ones(3) F = 5 5 5 % zeros 生成全部元素为0的矩阵 >> Z=zeros(2,4) Z = 0 0 0 0 % rand 生成均匀分布的随机矩阵 >> R=rand(4) R = 0.9501 0.8913 0.8214 0.9218 0.2311 0.7621 0.4447 0.7382 0.6068 0.4565 0.6154 0.1763 0.4860 0.0185 0.7919 0.4057 %生成空阵 >> K=[] K = []
第3章 矩阵、数组和符号运算 c.利用M文件产生矩阵 A=[1,2,3,4,5 6,7,8,9,10 11,12,13,14,15 第3章 矩阵、数组和符号运算 c.利用M文件产生矩阵 A=[1,2,3,4,5 6,7,8,9,10 11,12,13,14,15 16,17,18,19,20 21,22,23,24,25]
第3章 矩阵、数组和符号运算 d.从外部数据文件调入矩阵 用load命令输入 用Import 菜单输入
第3章 矩阵、数组和符号运算 2、矩阵元素的修改 第3章 矩阵、数组和符号运算 2、矩阵元素的修改 >> A=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16] A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 >> A(1,1) ans = 1 >> A(2,3) 7 >> A(1,1)=0;A(2,2)=A(1,2)+A(2,1);A(4,4)=cos(0); >> A A = 0 2 3 4 5 7 7 8 13 14 15 1
第3章 矩阵、数组和符号运算 3、矩阵的运算 矩阵运算按照线性代数中基本的运算法则进行; 加减运算必须在具有相同行列的矩阵之间进行; 第3章 矩阵、数组和符号运算 3、矩阵的运算 矩阵运算按照线性代数中基本的运算法则进行; 加减运算必须在具有相同行列的矩阵之间进行; 只有当矩阵 A 的列数和矩阵 B 的行数相同时,才可进行矩阵 A 和 B 的乘法运算; 乘方运算只有在矩阵为方阵时才有意义; 当一个矩阵和一个标量( 1×1 的矩阵)进行运算时,其结果将是此标量和矩阵中的每一个元素“ 相加”、“ 相减”、“ 相乘”、“ 相除”; 在 MATLAB 中,矩阵左除和右除的含义不同。矩阵右除定义为:B\A=(A′/B′)。
第3章 矩阵、数组和符号运算 a. 矩阵的加减运算 第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+B C = 2 7 12 17 7 12 17 22 12 17 22 27 17 22 27 32 >> D=A-B D = 0 -3 -6 -9 3 0 -3 -6 6 3 0 -3 9 6 3 0 >> E=A+3 E = 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
第3章 矩阵、数组和符号运算 b. 矩阵乘法 c. 矩阵除法 右除 A/B =A*inv(B) 左除 A\B=inv(A)*B 第3章 矩阵、数组和符号运算 b. 矩阵乘法 >> C=A*B C = 30 70 110 150 70 174 278 382 110 278 446 614 150 382 614 846 >> D=A*3 D = 3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 c. 矩阵除法 左除 A\B=inv(A)*B >> A=[8,1,6;3,5,7;4,9,2] A = 8 1 6 3 5 7 4 9 2 >> B=[1,1,1;1,2,3;1,3,6] B = 1 1 1 1 2 3 1 3 6 >> A\B ans = 0.0667 0.0500 0.0972 0.0667 0.3000 0.6389 0.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*B ans = 0.0667 0.0500 0.0972 右除 A/B =A*inv(B) >> A/B ans = 27 -31 12 1 2 0 -13 29 -12 >> D=inv(B) D = 3 -3 1 -3 5 -2 1 -2 1 >> A*D
第3章 矩阵、数组和符号运算 当对矩阵作除法运算时,有可能因为误差设置的差别导致不精确的结果,此时,MATLAB 会自动给出警告信息: 第3章 矩阵、数组和符号运算 当对矩阵作除法运算时,有可能因为误差设置的差别导致不精确的结果,此时,MATLAB 会自动给出警告信息: MATLAB 采用 IEEE( 国际认可的)算法,即使 A 为奇异阵( 即 A 的行列式值是0),运算也照样进行,但是此时 MATLAB 将给出警告信息:“ Warning: Matrix is singular to working precision.”,求出的矩阵所有元素为无穷大( Inf); 当矩阵 A 为病态阵( Badly Scaled)时,MATLAB 使用的算法产生的误差可能很大,MATLAB 系统也将给出警告信息:“ Warning: Matrix is badly scaled to working precision. Results may be inaccurate.”。 >> E=[1,2,3;4,5,6;7,8,9] E = 1 2 3 4 5 6 7 8 9 >> F=[1,4,7;2,5,8;3,6,9] F = 1 4 7 2 5 8 3 6 9 >> E\F Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.541976e-018. ans = -0.3333 -7.3333 -14.3333 0.6667 11.6667 22.6667 0 -4.0000 -8.0000
第3章 矩阵、数组和符号运算 4、矩阵的函数 a.矩阵的基本变换函数 第3章 矩阵、数组和符号运算 4、矩阵的函数 a.矩阵的基本变换函数 >> A=[3,3,5;2,4,6;7,8,9] %创建方阵 A A = 3 3 5 2 4 6 7 8 9 >> inv(A) %矩阵的逆(A必须为非奇异方阵) ans = 0.5000 -0.5417 0.0833 -1.0000 0.3333 0.3333 0.5000 0.1250 -0.2500 >> A‘ %矩阵的转置 3 2 7 3 4 8 5 6 9
第3章 矩阵、数组和符号运算 b.常用的矩阵运算函数 只有方阵才可计算行列式值,即 det(A)的计算只有在 A 为方阵时才有意义。 第3章 矩阵、数组和符号运算 b.常用的矩阵运算函数 只有方阵才可计算行列式值,即 det(A)的计算只有在 A 为方阵时才有意义。 logm(A)和 sqrtm(A)计算矩阵的对数/平方根是指对整个矩阵 A 求对数/平方根。
第3章 矩阵、数组和符号运算 >> det(A) %求方阵 A 的行列式值 ans = -24 第3章 矩阵、数组和符号运算 >> det(A) %求方阵 A 的行列式值 ans = -24 >> eig(A) %求特征值 16.7503 0.8793 -1.6295 >> logm(A) %求矩阵 A 的对数 0.5432 + 0.8066i 0.7475 + 0.5526i 0.6902 - 0.6914i 0.8584 + 1.4131i 0.7845 + 0.9681i 0.6967 - 1.2112i 0.7502 - 1.5947i 1.1089 - 1.0926i 1.8504 + 1.3668i >> sqrtm(A) %求矩阵 A 的平方根 1.2466 + 0.3278i 0.5192 + 0.2246i 1.0906 - 0.2809i 0.2001 + 0.5742i 1.4228 + 0.3934i 1.3620 - 0.4921i 1.6144 - 0.6480i 1.7430 - 0.4439i 2.3610 + 0.5554i
第3章 矩阵、数组和符号运算 c.矩阵的分解函数
第3章 矩阵、数组和符号运算 >> X=[3,-1,2;1,2,-1;-2,1,4] %输入矩阵 X X = 3 -1 2 第3章 矩阵、数组和符号运算 >> X=[3,-1,2;1,2,-1;-2,1,4] %输入矩阵 X X = 3 -1 2 1 2 -1 -2 1 4 >> [L,U]=lu(X) %对矩阵 X 进行 LU 分解 L = 1.0000 0 0 0.3333 1.0000 0 -0.6667 0.1429 1.0000 U = 3.0000 -1.0000 2.0000 0 2.3333 -1.6667 0 0 5.5714 >> [Q,R]=qr(X) %对矩阵 X 进行 QR 分解 Q = -0.8018 0.1543 0.5774 -0.2673 -0.9567 -0.1155 0.5345 -0.2469 0.8083 R = -3.7417 0.8018 0.8018 0 -2.3146 0.2777 0 0 4.5033
第3章 矩阵、数组和符号运算 5、数组运算 Matlab是以矩阵为基本运算单元的,数组作为独立的计算单元实体是不存在的。数组运算是Matlab的一种运算形式,它从矩阵的单个元素出发,针对每个元素进行的运算。 MATLAB对数组运算在符号上做了不同的约定,运算符形式为:.* , ./ , .\ , .^ 矩阵运算和数组运算有着显著的不同。属于两种不同的运算:矩阵运算是从矩阵的整体出发,按照线性代数的运算规则进行,有着明确而严格的数学规则;而数组运算是从矩阵的单个元素出发,针对每个元素进行的运算。 对于加法和减法而言,矩阵运算和数组运算相同;对于乘法和除法而言,矩阵和数组的运算有着显著的不同。
第3章 矩阵、数组和符号运算 矩阵的数组乘/除及乘方 数组除的运算规则: 第3章 矩阵、数组和符号运算 矩阵的数组乘/除及乘方 数组除的运算规则: 当参与除运算的两个矩阵同维时,运算为矩阵的相应元素相除,计算结果是与参与运算的矩阵同维的矩阵; 当参与运算的矩阵有一个是标量时,运算是标量和矩阵的每一个元素相除,计算结果是与参与运算的矩阵同维的矩阵; 右除与左除的关系为 A./B=B.\A,其中 A 是被除数,B 是除数。
第3章 矩阵、数组和符号运算 > > E=[1,2,3;4,5,6;7,8,9] >> F./E ans = 第3章 矩阵、数组和符号运算 > > E=[1,2,3;4,5,6;7,8,9] E = 1 2 3 4 5 6 7 8 9 >> F=[1,4,7;2,5,8;3,6,9] F = 1 4 7 2 5 8 3 6 9 >> E.\F ans = 1.0000 2.0000 2.3333 0.5000 1.0000 1.3333 0.4286 0.7500 1.0000 >> 4.\F ans = 0.2500 1.0000 1.7500 0.5000 1.2500 2.0000 0.7500 1.5000 2.2500 >> F./E ans = 1.0000 2.0000 2.3333 0.5000 1.0000 1.3333 0.4286 0.7500 1.0000 >> E*F ans = 14 32 50 32 77 122 50 122 194 >> E.*F 1 8 21 8 25 48 21 48 81
第3章 矩阵、数组和符号运算 数组乘方的运算规则: 第3章 矩阵、数组和符号运算 数组乘方的运算规则: ①矩阵的标量乘方 A.^p( 即 A 为矩阵,p 为标量),运算为矩阵每个元素的 p 次方,计算结果是与矩阵A 同维的矩阵; ②标量的矩阵乘方 p.^A,表示以 p 为底,分别以 A 的元素为指数求幂值,计算结果是与矩阵A 同维的矩阵。
第3章 矩阵、数组和符号运算 b.向量的数组运算: 加/减法: 乘方: 乘/除法: 点积、叉积: >> x=[1,2,3] 第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 乘方: >> z7=2.^x >> z5=x.^3 >> z6=x.^y 点积、叉积: >> c1=dot(a,b) >> c1= sum(a.*b) >> c2=cross(a,b)
第3章 矩阵、数组和符号运算 6、数组函数 常用的数学函数
第3章 矩阵、数组和符号运算 常用三角函数和超越函数
第3章 矩阵、数组和符号运算 >> A=[3,3,5;2,4,6;7,8,9] A = 3 3 5 2 4 6 7 8 9 第3章 矩阵、数组和符号运算 >> A=[3,3,5;2,4,6;7,8,9] A = 3 3 5 2 4 6 7 8 9 >> log(A) ans = 1.0986 1.0986 1.6094 0.6931 1.3863 1.7918 1.9459 2.0794 2.1972 >> sqrt(A) 1.7321 1.7321 2.2361 1.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) 8 8 32 4 16 64 128 256 512 >> 2.^A
第3章 矩阵、数组和符号运算 7、多项式及其运算 a.多项式的输入 向量A=[a0,a1,…,an-1,an], 第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 = x^4-10*x^3+35*x^2-50*x+24 >> p_a=poly2sym(a) p_a = x^3+2*x^2+3*x+4
第3章 矩阵、数组和符号运算 b.多项式的运算 除法: 微分: 加法: 求根: 乘法: >> a a = 第3章 矩阵、数组和符号运算 b.多项式的运算 >> a a = 1 2 3 4 >> b=[0,1] b = 0 1 加法: >> c=a+[0 0 b] c = 1 2 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) -1.6506 -0.1747 + 1.5469i -0.1747 - 1.5469i
第3章 矩阵、数组和符号运算 求值: 多项式拟合: >> a=[1,2,3,4] a = 1 2 3 4 第3章 矩阵、数组和符号运算 求值: >> a=[1,2,3,4] a = 1 2 3 4 >> b=[1,1;1,1] b = 1 1 >> polyvalm(a,4) % x=4时多项式的值 ans = 112 %与polyval(a,4)结果相同 >> polyval(a,b) %数组运算 ans = 10 10 >> polyvalm(a,b) %矩阵运算 15 11 11 15 多项式拟合: >> 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])
上机习题(4) ( 1)在 MATLAB 6.0 的工作空间中用直接输入法建立如下两个矩阵,然后在矩阵编辑器中将矩阵A改为3行3列的矩阵,并将其保存。 , ( 2)分别对(1)产生的两个矩阵 作加、减、乘和除(左除,右除)运算,同时运用数组运算法则进行运算,比较二者的计算结果有何异同。 ( 3)利用矩阵生成函数建立一个对角线元素全部为 1 的 4 阶单位矩阵。 ( 4)利用矩阵生成函数建立一个 4×4 的随机矩阵。
上机练习(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]