数组与矩阵运算
简介
MATLAB® 具有两种不同类型的算术运算:数组运算和矩阵运算。您可以使用这些算术运算来执行数值计算,例如两数相加、计算数组元素的给定次幂或两个矩阵相乘。
矩阵运算遵循线性代数的法则。与之不同,数组运算则是执行逐元素运算并支持多维数组。句点字符 (.
) 将数组运算与矩阵运算区别开来。但是,由于矩阵运算和数组运算在加法和减法的运算上相同,因此没有必要使用字符组合 .+
和 .-
。
数组运算
数组运算可针对向量、矩阵和多维数组的对应元素执行逐元素运算。如果操作数的大小相同,则第一个操作数中的每个元素都会与第二个操作数中同一位置的元素匹配。如果操作数的大小兼容,则每个输入都会根据需要进行隐式扩展以匹配另一个输入的大小。
举一个简单的示例,您可以添加两个大小相同的向量。
A = [1 1 1]
A = 1 1 1
B = [1 2 3]
B = 1 2 3
A+B
ans = 2 3 4
如果一个操作数是标量,而另一个操作数不是标量,则 MATLAB 会将该标量隐式扩展为与另一个操作数具有相同的大小。例如,您可以计算一个标量和一个矩阵的按元素乘积。
A = [1 2 3; 1 2 3]
A = 1 2 3 1 2 3
3.*A
ans = 3 6 9 3 6 9
如果从一个 3×3 矩阵中减去一个 1×3 向量,隐式扩展仍然会起作用,因为它们的大小是兼容的。当您执行减法运算时,该向量将隐式扩展为一个 3×3 矩阵。
A = [1 1 1; 2 2 2; 3 3 3]
A = 1 1 1 2 2 2 3 3 3
m = [2 4 6]
m = 2 4 6
A - m
ans = -1 -3 -5 0 -2 -4 1 -1 -3
行向量和列向量的大小兼容。如果您将一个 1×3 向量与一个 2×1 向量相加,则每个向量都会在 MATLAB 执行按元素加法之前隐式扩展为一个 2×3 矩阵。
x = [1 2 3]
x = 1 2 3
y = [10; 15]
y = 10 15
x + y
ans = 11 12 13 16 17 18
如果两个操作数的大小不兼容,则您将会收到错误消息。
A = [8 1 6; 3 5 7; 4 9 2]
A = 8 1 6 3 5 7 4 9 2
m = [2 4]
m = 2 4
A - m
Arrays have incompatible sizes for this operation.
有关详细信息,请参阅基本运算的兼容数组大小。
下表概述了 MATLAB 中的数组算术运算符。有关函数特定的信息,请点击最后一列中的函数参考页的链接。
运算符 | 用途 | 描述 | 参考页 |
---|---|---|---|
| 加法 |
| plus |
| 一元加法 |
| uplus |
| 减法 |
| minus |
| 一元减法 |
| uminus |
| 按元素乘法 |
| times |
| 按元素求幂 |
| power |
./ | 数组右除 |
| rdivide |
| 数组左除 |
| ldivide |
| 数组转置 |
| transpose |
矩阵运算
矩阵运算遵循线性代数的法则,与多维数组不兼容。运算双方所需输入的大小和形状取决于所执行的运算。对于非标量输入,矩阵运算符与对应的数组运算符计算出的答案通常不同。
例如,如果您使用矩阵右除运算符 /
来除两个矩阵,这两个矩阵必须具有相同的列数。但是,如果您使用矩阵乘法运算符 *
来乘两个矩阵,则这两个矩阵必须具有共同的内部维度。也即,第一个输入的列数必须等于第二个输入的行数。矩阵乘法运算符使用以下公式计算两个矩阵的乘积:
要了解这一点,您可以计算两个矩阵的乘积。
A = [1 3;2 4]
A = 1 3 2 4
B = [3 0;1 5]
B = 3 0 1 5
A*B
ans = 6 15 10 20
前一个矩阵乘积与下面的按元素乘积不相等。
A.*B
ans = 3 0 2 20
下表概述了 MATLAB 中的矩阵算术运算符。有关函数特定的信息,请点击最后一列中的函数参考页的链接。
运算符 | 用途 | 描述 | 参考页 |
---|---|---|---|
| 矩阵乘法 |
| mtimes |
| 矩阵左除 |
| mldivide |
| 矩阵右除 |
| mrdivide |
| 矩阵幂 |
| mpower |
| 复共轭转置 |
| ctranspose |