2.1 一般运算符和操作符
一般运算符和操作符构成运算的基本的操作指令,如加、减、乘、除和乘方等运算,这些操作指令几乎在所有计算机语言中都有,且大同小异。在MATLAB中,几乎所有的操作都是以矩阵为基本运算单元的,这与其他计算机语言有很大不同,也是MATLAB的重要特点,读者在以后的学习中应该充分理解和注意。
2.1.1 运算符
针对矩阵运算,本节主要介绍加法、减法、乘法、数组乘法、乘方、数组乘方、左除、右除、点除及克罗内克(Kronecker)张量积运算。
1.矩阵的加、减运算
其基本形式为X
±
Y
,X
和Y
必须为同维的矩阵,此时各对应元素相加减。如果X
与Y
的维数不相同,则MATLAB将给出错误信息,提示用户两个矩阵的维数不匹配。
例2.1 MATLAB中的矩阵加、减运算。
X=
2 3
4 5
Y=
3 4
4 3
X+Y=
5 7
8 8
X-Y=
-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
2.1.2 操作符
MATLAB中的操作符主要包含冒号、百分号、续行符、单引号及分号,下面分别进行介绍。
1.冒号“:”
此符号在矩阵的构造和运算中非常有用,它可以用来产生向量,用作矩阵的下标(也称索引),以及部分地选择矩阵的元素,进行行循环操作等,熟练掌握可以在矩阵的运算中受益匪浅。其基本用法如下。
j
:k
等价于[j
,j
+1,…,k
]。
j
:i
:k
等价于[j
,j
+i
,j
+2
*i
,…,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
)表示三维矩阵,k
为第三维度。
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