MATLAB的一般运算符及操作符
运算符
1.矩阵的加减运算
其基本形式为X±Y,X和Y必须为同维的矩阵,此时各对应元素相加减。如果X与Y的维数不相同,则MATLAB将给出错误信息,提示用户两个矩阵的维数不匹配。
例2.1 MATLAB中的矩阵加减运算。
X=
2 3
4 5
Y=
3 4
4 3
>>X+Y
ans =
5 7
8 8
>>X-Y=
ans =
-1 -1
0 2
2.矩阵的乘法运算
X*Y是两个矩阵X和Y的乘积,其中X和Y必须满足矩阵相乘的条件,即矩阵X的列数必须等于矩阵Y的行数。如果其中一个为1×1矩阵也合法,此时便是将每一个矩阵的元素都分别与这个数值相乘。
例2.2 MATLAB中的矩阵乘法运算。
>>X*Y
ans =
18 17
32 31
>>X*2
ans =
4 6
8 10
3.矩阵的数组乘法
X.*Y运算结果为两个矩阵的相应元素相乘,得到的结果与X和Y同维,此时X和Y也必须有相同的维数,除非其中一个为1×1矩阵,此时运算法则与X*Y相同。
例2.3 MATLAB中的数组乘法运算。
>> X.*Y
ans =
6 12
16 15
>> 2.*X
ans =
4 6
8 10
4.矩阵的乘方运算
(1)x^Y表示,如果x为数,而Y为方阵,结果由各特征值和特征向量计算得到。
(2)X^y表示,如果X是方阵、y是一个大于1的整数,所得结果由X重复相乘y次得到;如果y不是整数,则将计算各特征值和特征向量的乘方。
(3)如果X和Y都是矩阵,或X或Y不是方阵,则会显示错误信息。
例2.4 MATLAB中的矩阵乘方运算。
>> X^2
ans =
16 21
28 37
>> X^1.5
ans =
5.9125 - 0.1007i 7.7970 + 0.0573i
10.3960 + 0.0764i 13.7095 - 0.0434i
>> 2^Y
ans =
64.2500 63.7500
63.7500 64.2500
5.矩阵的数组乘方
X.^Y的计算结果为X中元素对Y中对应元素求幂,形成的矩阵与原矩阵维数相等,这里X和Y必须维数相等,或其中一个为数,此时运算法则等同于X^Y。
例2.5 MATLAB中的数组乘方运算。
>> X.^Y
ans =
8 81
256 125
6.矩阵的左除运算
A\B称作矩阵A左除矩阵B,其计算结果大致与INV(A)B相同,但其算法却是不相同的。如果A是N×N的方阵,而B是N维列向量,或是由若干N维列向量组成的矩阵,则X=A\B是方程AX=B的解,X与B的大小相同,对于X和B的每个列向量,都有AX(n)=B(n),此解是由高斯消元法得到的。很显然,A\EYE(SIZE(A))=INV(A)EYE(SIZE(A))=INV(A)。如果A是M×N的矩阵(M≠N),B是M维列向量或由若干M维列向量组成的矩阵,则X=A\B是欠定或超定方程AX=B的最小二乘解。A的有效秩L由旋转的QR分解得到,并至多在每列L个零元素上求解。
例2.6 MATLAB中的矩阵左除运算。
A =
1 2
3 4
B =
2 3
3 2
>> A\B
ans =
-1.0000 -4.0000
1.5000 3.5000
7.矩阵的右除运算
B/A称为矩阵A右除矩阵B,其计算结果基本与B*INV(A)相同,但其算法是不同的,可以由左除得到,即:B/A=(A'\B')'。它实际上是方程XA=B的解。
例2.7 MATLAB中的矩阵右除运算。
>> B/A
ans =
0.5000 0.5000
-3.0000 2.0000
>> (A'\B')'
ans =
0.5000 0.5000
-3.0000 2.0000
8.矩阵的点除运算
如果B和A都是矩阵,且维数相同,则B./A就是B中的元素除以A中的对应元素,所得结果矩阵的大小与B和A都相同;如果B和A中有一个为数,在结果为此数与相应的矩阵中的每个元素做运算,结果矩阵与参加运算的矩阵大小相同。
例2.8 MATLAB中的矩阵点除运算。
>> B./A
ans =
2.0000 1.5000
1.0000 0.5000
>> B./2
ans =
1.0000 1.5000
1.5000 1.0000
9.矩阵的kronecker张量积
K=KRON(A,B)返回A和B的张量积,它是一个大矩阵,取值为矩阵A和B的元素间所有的可能积。如果A是m×n矩阵,而B是p×q矩阵,则KRON(A,B)是mp×nq的矩阵。例如,A是2×2的矩阵,则有下式成立:
KRON(A,B)=[A(1,1)*B A(1,2)*B
A(2,1)*B A(2,2)*B]
如果A和B中有一个为稀疏矩阵,则只有非零元素会参与计算,所得的结果也是稀疏矩阵。
例2.9 MATLAB中的矩阵kronecker张量积运算。
>> kron(A,B)
ans =
2 3 4 6
3 2 6 4
6 9 8 12
9 6 12 8
操作符
1.冒号“:”
此符号在矩阵的构造和运算中非常有用,它可以用来产生向量,用作矩阵的下标,以及部分地选择矩阵的元素,进行行循环操作等,熟练掌握可以在矩阵的运算中受益匪浅。其基本用法如下。
j:k 等价于[j,j+1,…,k]
j:i:k 等价于[j,j+i,j+2i,…,k]
j:k中,如果j<k则返回空值;j:I:k中,如果j>k并且i>0,或j<k并且i<0都会返回空值。
A(:,i)取A矩阵的第i列。
A(i,:)取A矩阵的第i行。
A(:,:)以A的所有元素构造二维矩阵,如果A是二维矩阵,则结果就等于A。
A(j:k)等价于A(j),A(j+1),…,A(k)。
A(:,:,k)表示三维矩阵A的第3页。
A(:)将所有A的元素作为一个列向量,如果此操作符在赋值语句的左边,则用右边矩阵的元素来填充矩阵A,矩阵A的结构不变,但要求两边矩阵的元素个数相同,否则会出错。
例2.10 MATLAB中冒号的用法。
>> a=rand(3,4)
a =
0.8147 0.9134 0.2785 0.9649
0.9058 0.6324 0.5469 0.1576
0.1270 0.0975 0.9575 0.9706
>> b=rand(2,2,3)
b(:,:,1)=
0.9572 0.8003
0.4854 0.1419
b(:,:,2)=
0.4218 0.7922
0.9157 0.9595
b(:,:,3)=
0.6557 0.8491
0.0357 0.9340
>> b(:,:,3)
ans =
0.6557 0.8491
0.0357 0.9340
>> b(:,:)
ans =
0.9572 0.8003 0.4218 0.7922 0.6557 0.8491
0.4854 0.1419 0.9157 0.9595 0.0357 0.9340
>> a(:)=b
a =
0.9572 0.1419 0.7922 0.0357
0.4854 0.4218 0.9595 0.8491
0.8003 0.9157 0.6557 0.9340
2.百分号“%”
百分号在M文件和命令行中表示注释,即在一行中百分号后面的语句都被忽略而不被执行。在M文件中,百分号后面的语句可以用help命令打印出来。
3.连续号“…”
如果一条命令很长,一行容不下,可以用3个或更多的点加在一行的末尾,表示此行未完,而在下一行继续。
4.单引号“'”
表示矩阵的转置。
5.分号“;”
分号用在“[]”内,表示矩阵中行的结尾;也可以用在每行命令的结尾,在命令不会回显。可以用在M文件中控制命令的显示,并压缩输出篇幅。
例2.11 MATLAB中分号的用法。
>> c=[1 2;3 4]
c =
1 2
3 4