MATLAB完全自学教程
上QQ阅读APP看书,第一时间看更新

2.1 一般运算符和操作符

一般运算符和操作符构成运算的基本的操作指令,如加、减、乘、除和乘方等运算,这些操作指令几乎在所有计算机语言中都有,且大同小异。在MATLAB中,几乎所有的操作都是以矩阵为基本运算单元的,这与其他计算机语言有很大不同,也是MATLAB的重要特点,读者在以后的学习中应该充分理解和注意。

2.1.1 运算符

针对矩阵运算,本节主要介绍加法、减法、乘法、数组乘法、乘方、数组乘方、左除、右除、点除及克罗内克(Kronecker)张量积运算。

1.矩阵的加、减运算

其基本形式为X±YXY必须为同维的矩阵,此时各对应元素相加减。如果XY的维数不相同,则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是两个矩阵XY的乘积,其中XY必须满足矩阵相乘的条件,即矩阵X的列数必须等于矩阵Y的行数。如果其中一个为1×1矩阵也合法,此时便是将每一个矩阵的元素都分别与这个数值相乘。

2.2 MATLAB中的矩阵乘法运算。

>>X*Y
ans =
18    17
32    31
X*2
ans =
4     6
8    10

3.矩阵的数组乘法运算

X.*Y的运算结果为两个矩阵的相应元素相乘,得到的结果与XY同维,此时XY也必须有相同的维数,除非其中一个为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)如果XY都是矩阵,或者XY不是方阵,则会显示错误信息。

例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中对应元素求幂,形成的矩阵与原矩阵维数相等,这里XY必须维数相等,或其中一个为数,此时运算法则等同于X^Y

2.5 MATLAB中的数组乘方运算。

>> X.^Y
ans =
8    81
256   125

6.矩阵的左除运算

A\B称作矩阵A左除矩阵B,其运算结果基本与INV(A)B相同,但其算法却是不相同的。如果AN×N的方阵,而BN维列向量,或是由若干N维列向量组成的矩阵,则X=A\B是方程AX=B的解,XB的大小相同,对于XB的每个列向量,都有AX(n)=B(n),此解是由高斯消元法得到的。很显然,A\EYE(SIZE(A))=INV(A)EYE(SIZE(A)) =INV(A)。如果AM×N的矩阵(MN),BM维列向量或由若干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.矩阵的点除运算

如果BA都是矩阵,且维数相同,则B./A就是B中的元素除以A中的对应元素,所得结果矩阵的大小与BA都相同;如果BA中有一个为数,则使此数与相应的矩阵中的每个元素进行运算,结果矩阵与参加运算的矩阵大小相同。

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)返回AB的张量积,取值为矩阵AB的元素间所有的可能积。如果Am×n矩阵,而Bp×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]

如果AB中有一个为稀疏矩阵,则只有非零元素会参与运算,所得的结果亦是稀疏矩阵。

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