目录
一、矩阵的代数运算
如果一个矩阵A有n行、m列元素,则称A矩阵为nxm矩阵;若n=m,则矩阵A又称为方阵。 MATLAB 语言中定义了下面各种矩阵的基本代数运算:
1. 矩阵的转置
在数学公式中一般把一个矩阵的转置记作 ,其元素定义为
,故B为
矩阵。如果A矩阵含有复数元素,则对之进行转置时,其转置矩阵B的元素定义为
,亦即首先对各个元素进行转置,然后再逐项求取其共轭复数值。这种转置方式又称为 Hermit 转置,其数学记号为
。MATLAB 中用“A' ”可以求出A矩阵的 Hermit 转置,矩阵的转置可以由“A.’ ”求出。(结合下述实例进行理解)
(1)“. '”运算符转置
>> A = [1, 2, 3; 4, 5, 6];
B = A'
B =
1 4
2 5
3 6
>> A = [1, 2, 3; 4, 5, 6];
B = A.'
B =
1 4
2 5
3 6
>> C = [1+2i, 3+4i; 5+6i, 7+8i];
D = C' % A矩阵的 Hermit 转置
D =
1.0000 - 2.0000i 5.0000 - 6.0000i
3.0000 - 4.0000i 7.0000 - 8.0000i
>> C = [1+2i, 3+4i; 5+6i, 7+8i];
D = C.'
D =
1.0000 + 2.0000i 5.0000 + 6.0000i
3.0000 + 4.0000i 7.0000 + 8.0000i
(2)transpose函数转置
B = transpose(A) %用于求解矩阵A的转置
>> A = [1, 2, 3; 4, 5, 6];
>> B=transpose(A)
B =
1 4
2 5
3 6
>> C = [1+2i, 3+4i; 5+6i, 7+8i];
>> D=transpose(C)
D =
1.0000 + 2.0000i 5.0000 + 6.0000i
3.0000 + 4.0000i 7.0000 + 8.0000i
2. 加减法运算
假设在 MATLAB 工作环境下有两个矩阵A和B,则可以由“C=A+B”和“C=A-B”命令执行矩阵加减法。若A和B矩阵的维数相同,它会自动地将A和B矩阵的相应元素相加减,从而得出正确的结果,并赋给C变量;若二者之一为标量,则应该将其遍加(减)于另一个矩阵;如果两个矩阵不能加减,MATLAB将自动地给出错误信息,提示用户两个矩阵的维数不匹配。
>> a=[1 2 3;4 5 6;7 8 9];
>> b=[9 8 7;6 5 4;3 2 1];
>> c=a+b
c =
10 10 10
10 10 10
10 10 10
>> c=a-b
c =
-8 -6 -4
-2 0 2
4 6 8
>> c=a+1
c =
2 3 4
5 6 7
8 9 10
>> d=[1 2 3];
>> c=a+d
c =
2 4 6
5 7 9
8 10 12
>> d=[1 2];
>> c=a+d
对于此运算,数组的大小不兼容。
3. 矩阵乘法
假设有矩阵A和B,其中A的列数与B的行数相等,或其一为标量,则称A、B矩阵是可乘的,或称A和B矩阵的维数是相容的。MATLAB 语言中两个矩阵的乘法由“C=A*B”直接求出,且这里并不需要指定A和B矩阵的维数。如果A和B 矩阵的维数相容,则可以准确无误地获得乘积矩阵C;如果二者的维数不相容,则将给出错误信息,通知用户两个矩阵是不可乘的。
>> a=[1 2;3 4;5 6];
>> b=[1 2;3 4];
>> c=[1 2;3 4;5 6];
>> d1=a*b % 前提:前列=后行;结果:前行=后列
d1 =
7 10
15 22
23 34
>> d2=a*c
错误使用 *
用于矩阵乘法的维度不正确。请检查并确保第一个矩阵中的列数与第二个矩阵中的行数匹配。要单
独对矩阵的每个元素进行运算,请使用 TIMES (.*)执行按元素相乘。
4. 矩阵的左、右除法
MATLAB 中用" \ "和" / "运算符号分别表示两个矩阵的左除和右除,“X=A \ B”为方程“AX=B”的解X,若A为非奇异矩阵,即;“X=A / B”为方程“XA=B”的解X,若A为非奇异矩阵,即
;如果A矩阵不是方阵,则左、右除得出的是方程的最小二乘解。
>> A = [2, 3; 4, 5];
>> B = [6; 7];
>> X = A \ B
X =
-4.5000
5.0000
>> A_inv = inv(A) % 求解矩阵A对应逆矩阵,经验证得上述结果正确
A_inv =
-2.5000 1.5000
2.0000 -1.0000
>> X = A / B
错误使用 /
矩阵维度必须一致。
5. 矩阵翻转
MATLAB 提供了一些矩阵翻转处理的特殊命令,如矩阵A进行左右翻转再赋给B可以由 B=fliplr(A) 实现,亦即 ;如果想上下翻转 A矩阵,则可以使用 C=flipud(A) 命令,将得出结果赋给C,亦即
; D=rot90(A) 将A矩阵逆时针旋转90°后赋给 D,亦即
;rot90(A,k) 函数还可以对A矩阵作其他旋转,k为旋转次数。
B = fliplr(A) %水平翻转矩阵A
B = flipud(A) %垂直反转矩阵A
B = rot90(A,k) %将A矩阵逆时针旋转90°,k为旋转次数
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> B=fliplr(A)
B =
3 2 1
6 5 4
9 8 7
>> C=flipud(A)
C =
7 8 9
4 5 6
1 2 3
>> D=rot90(A)
D =
3 6 9
2 5 8
1 4 7
>> D=rot90(A,2)
D =
9 8 7
6 5 4
3 2 1
6. 矩阵的乘方
矩阵的乘方运算可以在数学上表述成,而其前提条件要求
矩阵为方阵。在 MATLAB 中
统一表示成
,其中
可以为整数、分数、无理数和复数。
① 由“ ^ ”运算可以容易地得出原矩阵的一个三次方根。
>> A=[1 2 3;4 5 6;7 8 0];
>> C=A^(1/3),e=norm(A-C^3)
C =
0.7718 + 0.6538i 0.4869 - 0.0159i 0.1764 - 0.2887i
0.8885 - 0.0726i 1.4473 + 0.4794i 0.5233 - 0.4959i
0.4685 - 0.6465i 0.6693 - 0.6748i 1.3379 + 1.0488i
e =
5.2710e-15
② 求根并验证得误差为e = 5.2710e-15,比较精确。事实上,矩阵的三次方根应该有三个结果,而上面只得出其中的一个。对该方根进行两次旋转,即计算 和
,则将得出另外两个根,经检验都是正确的。
>> a=exp(sqrt(-1)*2*pi/3); A1=C*a,A2=C*a^2
A1 =
-0.9521 + 0.3415i -0.2297 + 0.4296i 0.1618 + 0.2971i
-0.3814 + 0.8058i -1.1388 + 1.0137i 0.1678 + 0.7011i
0.3256 + 0.7289i 0.2497 + 0.9170i -1.5772 + 0.6342i
A2 =
0.1803 - 0.9953i -0.2572 - 0.4137i -0.3382 - 0.0084i
-0.5071 - 0.7332i -0.3085 - 1.4931i -0.6911 - 0.2052i
-0.7941 - 0.0825i -0.9190 - 0.2422i 0.2393 - 1.6831i
>> e1=norm(A-A1^3),e2=norm(A-A2^3)
e1 =
1.2004e-14
e2 =
1.6831e-14
7. 点运算
MATLAB 中定义了一种特殊的运算,即所谓的点运算。两个矩阵之间的点运算是它们对应元素的直接运算。
<