6.3 矩阵元素运算
矩阵的四则运算、关系运算和逻辑运算等是MATLAB数值计算最基础的部分,本节将重点介绍这些运算。
6.3.1 矩阵四则运算
1.加减运算
矩阵的加减运算的前提是参与运算的两个矩阵或多个矩阵必须具有相同的行列数或者其中有一个或多个运算量为标量。加减运算定义为:同型矩阵使用对应位置元素运算;与标量运算时,每个元素都与标量进行运算。
例6-23,矩阵加减运算示例。
在命令行窗口输入:
A=magic(3) B=ones(3) C=ones(2) AplusB=A+B BplusA=B+A AminusB=A-B Aplus1=A+1 AminusC=A-C %矩阵大小不一致,将报错
输出结果如下:
A = 8 1 6 3 5 7 4 9 2 B = 1 1 1 1 1 1 1 1 1 C = 1 1 1 1 AplusB = 9 2 7 4 6 8 5 10 3 BplusA = 9 2 7 4 6 8 5 10 3 AminusB = 7 0 5 2 4 6 3 8 1 Aplus1 = 9 2 7 4 6 8 5 10 3 Error using - Matrix dimensions must agree.
2.乘法运算
MATLAB中矩阵的乘法运算包括数与矩阵的乘法和矩阵与矩阵的乘法两种。
(1)数与矩阵的乘法
数与矩阵的乘法也称为标量与矩阵的乘法,其运算原理为对矩阵中的每一个元素,都乘上待乘标量。
例6-24,数与矩阵的乘法示例。
在命令行窗口输入:
A=magic(2) C=2*A
输出结果如下:
A = 1 3 4 2 C = 2 6 8 4
(2)矩阵与矩阵的乘法
矩阵与矩阵的乘法必须满足被乘矩阵的列数与乘矩阵的行数相等。需要注意的是,矩阵与矩阵的乘法不遵循交换律。
例6-25,矩阵与矩阵的乘法示例。
在命令行窗口输入:
A=magic(3); A(1, :)=[] B=A' R1= A*B R2= B*A whos
输出结果如下:
A = 3 5 7 4 9 2 B = 3 4 5 9 7 2 R1 = 83 71 71 101 R2 = 25 51 29 51 106 53 29 53 53 Name Size Bytes Class Attributes A 2x3 48 double B 3x2 48 double R1 2x2 32 double R2 3x3 72 double
3.除法运算
矩阵的除法运算是乘法的逆运算,分为左除和右除两种,分别用运算符号“\”和“/”表示。
例6-26,矩阵除法示例。
在命令行窗口输入:
A=magic(2); B = [1 0;1 2]; R1=A\B R2=A/B
输出结果如下:
R1 = 0.1000 0.6000 0.3000 -0.2000 R2 = -0.5000 1.5000 3.0000 1.0000
6.3.2 矩阵元素幂运算
矩阵的幂运算针对方阵而言,在MATLAB中,使用运算符号“^”表示幂运算,实现的是同一方阵的累乘。
例6-27,方阵幂运算示例。
在命令行窗口输入:
A=m3
输出结果如下:
A = 1 3 4 2 R1 = 49 57 76 68 agic(2) R1=A^
6.3.3 矩阵元素查找与排序
查找与排序是计算机编程中经常要处理的问题,但在MATLAB中不用过多地考虑算法问题,只需要使用MATLAB提供的函数进行操作即可。
1.查找
MATLAB通过find函数进行矩阵元素的查找。函数find与关系运算和逻辑运算结合,能够实现对矩阵元素的查找。find函数的调用格式为:
ind = find(X) ind = find(X, k) [row, col] = find(X, ...)
其中,X为对象矩阵,k为返回的结果下标数量,ind为符合要求结果的数组存储下标构成的向量,row、col为符合要求结果的下标构成的向量。
例6-28,矩阵元素查找示例。
在命令行窗口输入:
A=magic(3) ind= find(A>5); ind=ind' [r, c]= find(A>5); pos=[r, c]
输出结果如下:
A = 8 1 6 3 5 7 4 9 2 ind = 1 6 7 8 pos = 1 1 3 2 1 3 2 3
2.排序
MATLAB通过函数sort来进行矩阵元素排序,并返回排序后的矩阵(该矩阵和原矩阵的维数相同)。sort函数的调用格式为:
B = sort(A) B = sort(A, dim) B = sort(..., mode)
其中,A为待排序矩阵;dim为排序的维数,当dim=1时,按列进行排序,当dim=2时,按行进行排序;mode可指定排序方式,'ascend’指定按升序排列(默认), 'descend’指定按降序排列。
例6-29,矩阵元素的排序示例。
在命令行窗口输入:
A=magic(4) B=sort(A) %矩阵中元素按列进行升序排序 C=sort(A,2) %矩阵中元素按行进行升序排序 D=sort(A, 'descend') %矩阵中元素按列进行降序排序 E=sort(A,2, 'descend') %矩阵中元素按行进行降序排序
输出结果如下:
A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 B = 4 2 3 1 5 7 6 8 9 11 10 12 16 14 15 13 C = 2 3 13 16 5 8 10 11 6 7 9 12 1 4 14 15 D = 16 14 15 13 9 11 10 12 5 7 6 8 4 2 3 1 E = 16 13 3 2 11 10 8 5 12 9 7 6 15 14 4 1
6.3.4 矩阵元素求和、求积与求差分
MATLAB提供了函数,使矩阵元素求和、求积与求差分的过程变得十分简单。
1.求和
MATLAB提供sum函数和cumsum函数用于对矩阵的元素求和。
sum函数的调用格式为:
B = sum(A) B = sum(A, dim)
该函数对矩阵A的元素求和,返回矩阵A格列元素的和组成的向量。当dim=1时,计算矩阵A格列元素的和;当dim=2时,计算矩阵A各行元素的和。
cumsum函数的调用格式为:
B = cumsum(A) B = cumsum(A, dim)
函数cumsum的参数与sum类似,不同的是其返回值为累加值矩阵。下面通过实例查看两个函数的不同之处。
例6-30,矩阵的求和示例。
在命令行窗口输入:
A = [1 2 3; 4 5 6; 7 8 9]; S1=sum(1:5) S2=sum(A,1) S3=sum(A,2) C1=cumsum(1:5) C2=cumsum(A,1) C3=cumsum(A,2)
输出结果如下:
S1 = 15 S2 = 12 15 18 S3 = 6 15 24 C1 = 1 3 6 10 15 C2 = 1 2 3 5 7 9 12 15 18 C3 = 1 3 6 4 9 15 7 15 24
提示
通过sum(sum(A))命令可求出矩阵A所有元素的和。
2.求积
MATLAB提供prod函数和cumprod函数用于对矩阵的元素求和。
prod函数的调用格式为:
B = prod(A) B =prod(A, dim)
该函数对矩阵A的元素求积,返回矩阵A格列元素的积组成的向量。当dim=1时,计算矩阵A格列元素的积;当dim=2时,计算矩阵A各行元素的积。
cumprod函数的调用格式为:
B = cumprod (A) B = cumprod (A, dim)
函数cumprod的参数与prod类似,不同的是其返回值为累乘值矩阵。下面通过实例查看两个函数的不同之处。
例6-31,矩阵元素求积示例。
在命令行窗口输入:
A = [1 2 3; 4 5 6; 7 8 9]; P1=prod (1:5) P2=prod (A,1) P3=prod (A,2) C1=cumprod (1:5) C2=cumprod (A,1) C3=cumprod (A,2)
输出结果如下:
P1 =120 P2 = 28 80 162 P3 =6 120 504 C1 =1 2 6 24 120 C2 =1 2 3 4 10 18 28 80 162 C3 =1 2 6 4 20 120 7 56 504
3.求差分
MATLAB提供diff函数用于计算矩阵的差分,该函数的调用格式为:
Y = diff(X) Y = diff(X, n) Y = diff(X, n, dim)
该函数计算矩阵元素的差分。当dim=1时,计算矩阵各列元素的差分;当dim=2时,计算矩阵A各行元素的差分积。n为求差分的阶次。
注意
当参数n大于等于相关维度的维度值时,函数的返回值是空矩阵。
例6-32,矩阵的差分计算示例。
在命令行窗口输入:
A = [1 2 3; 4 5 6; 7 8 9]; B=diff(A) %矩阵各列元素的差分 C=diff(A,2) %矩阵各列元素的2阶差分 D=diff(A,1,1) %矩阵各列元素的差分 E=diff(A,1,2) %矩阵各行元素的差分
输出结果如下:
B = 3 3 3 3 3 3 C = 0 0 0 D = 3 3 3 3 3 3 E = 1 1 1 1 1 1