MATLAB 的基本算术运算符有:+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘 方)和’(转置),下面我们分别进行介绍。
矩阵的加法
首先是矩阵的加法。在线性代数中,只有两个大小完全相同的矩阵才可以进行相加运算, 而在 MATLAB 中,只要两个矩阵的大小兼容,就能够进行计算。
以矩阵的加法为例,下表我们给出了 MATLAB 支持的五种算术运算的兼容模式:
情形 | 示例:计算 A+B | ㅤ | 计算结果 | 解释 |
两个大小完全相同的输入 | A =
6 5 6
2 9 2 | B =
7 8 9
8 6 2 | ans =
13 13 15
10 15 4 | 将 A 和 B 对应位置 的元素相加 |
有一个输入是标量(常数) | A =
2 1 3
7 2 4 | B =
4 | ans =
6 5 7
11 6 8 | 矩阵的每个元素都 加上这个标量 |
一个输入是矩阵, 另一个输 入是具有相同行数的列向量 | A =
3 6 5
2 6 8 | B =
6
5 | ans =
9 12 11
7 11 13 | 把 B 堆叠成完全相 同的三列, 然后再和 A 相加
相当于 repmat(B,1,3) |
一个输入是矩阵, 另一个输 入是具有相同列数的行向量 | A =
3 5 6
6 9 4 | B =
3 9 6 | ans =
6 14 12
9 18 10 | 把 B 堆叠成完全相 同的两行, 然后再和 A 相加
相当于 repmat(B,2,1) |
一个输入是列向量,另一个 输入是行向量。 |
A =
2
5 |
B =
1 8 3 |
ans =
3 10 5
6 13 8 | 把 A 堆叠成完全相 同的三列, 把 B 堆叠 成完全相同的两行, 然后相加
相当于 repmat(A,1,3) repmat(B,2,1) |
事实上,执行加法运算时, MATLAB 会将大小兼容的矩阵隐式扩展为相同的大小,然后 再将对应位置的元素相加, 这种计算方式在 MATLAB 中称为“按对应位置的元素运算”。我们 在上一节介绍的 min 函数和 max 函数在计算两个矩阵对应位置元素的最小值和最大值时也支 持上表五种模式。
矩阵的减法
类似的,矩阵的减法也支持上表五种兼容模式,其计算方式也是“按对应位置的元素运算”, 我们看下面的例子:
矩阵的乘法
矩阵的乘法则有所不同,在 MATLAB 中, 矩阵的乘法分为两种:第一种是线性代数中定 义的矩阵的乘法, 使用的运算符号是乘号“*”,例如矩阵 A*B,矩阵的乘法必须要满足前面矩 阵 A 的列数和后面矩阵 B 的行数相等; 第二种是按对应位置的元素相乘,我们需要使用运算 符号点乘“.*”,例如 A.*B,此时 A 和 B 的大小只需要满足上方表格介绍的五种兼容模式。特 别地, 如果一个矩阵和标量(常数) 相乘, 那么使用乘号“* ”和点乘“.* ”得到的结果相同。
矩阵的除法
下面我们再来介绍矩阵的除法。事实上, 在我们学的线性代数中, 矩阵并不支持除法的运 算,但 MATLAB 中定义了矩阵除法的计算规则。
在 MATLAB 中,除号有两种,分别是 / (右除)和 \ (左除),命令“x = B/A”表示对 线性方程组 x*A = B 求解 x;命令“ x = A\B”则表示对线性方程组 A*x = B 求解 x。这 两个符号使用频率很低,大家不需要强记,需要用时查询即可。
我们平时使用更多的是对矩阵进行点除的操作,即将两个矩阵按对应位置的元素做除法。 其中命令“A./B”表示用 A 的每个元素除以 B 的对应元素,A 和 B 的大小必须兼容;命令 “A.\B”则表示用 B 的每个元素除以 A 的对应元素,这个用法不太符合我们的习惯。因此, 大家只需要掌握“A./B”的用法即可。
特别地,如果 B 是标量,那么 A./B 的结果和 A/B 的结果相同。
矩阵的乘方
矩阵的乘方也有两种用法,分别是“^ ”和“.^ ”。
其中,“^ ”表示矩阵的幂运算,例如 A 是一个方阵,那么 A ^ 3 等价于 A*A*A;“.^ ”表 示对矩阵中的每一个元素分别进行乘方计算, 例如 A .^ 0.5 表示对矩阵 A 中的每一个元素开根 号,等价于 sqrt(A)。
拓展:计算逆矩阵
特别地, 如果 A 是一个可逆的方阵, 那么 A^(-1)可用来计算 A 的逆矩阵(inverse matrix)。 另外, MATLAB 中的 inv 函数也可以计算逆矩阵,它们的计算结果相同。
根据线性代数中逆矩阵的定义, 互为逆矩阵的两个矩阵的乘积为单位矩阵(主对角线为 1, 其余位置为 0 的方阵),我们通过上表的第三行代码验证了这一点。注意:由于浮点数运算的 误差, 计算结果中的元素可能和 0 或 1 有微小的差异, 我们使用 format long g 命令显示更多的 小数点:
例如第一行第二个元素,理论上应为 0,但 MATLAB 计算结果约为 。
矩阵的转置运算
最后我们再来介绍矩阵的转置运算, 矩阵的转置符号为英文的单引号:“ ’ ”,它也可以在 前面加上点变成“. ’ ”,两者的区别在于对矩阵中复数的处理, 使用“ ’ ”会在转置的同时将复 数变为共轭复数(实部不变虚部反号),使用“ . ’ ”则会保持原来的复数。
当然,通常情况下我们的矩阵中全是实数,那么使用“ ’ ”和“. ’ ”的效果相同。
- (我个人觉得: 矩阵的转置应该属于线性代数中的知识点, 但是 MATLAB 官网将其视为 算术运算的一种。因此,本书也是参考官网的安排将其放在了这一小节)