本节说明 MATLAB 表达式中的算术、关系与逻辑运算符,并重点区分矩阵运算与数组(逐元素)运算。加减法对矩阵与数组规则相同;乘、除与乘方则须根据是否带点号选择线性代数语义或逐元素语义。若两个等长的行向量需要对应位置相乘,应使用 .*;若误写为矩阵乘法 *,两个 1×3 向量因内维不匹配将无法相乘并报错:
A = [1 2 3];
B = [4 5 6];
A * B % 报错:矩阵乘法维度不匹配使用 .* 时,按对应位置相乘,得到 4、10、18:
A = [1 2 3];
B = [4 5 6];
A .* B % 1*4, 2*5, 3*6ans = 4 10 18下文分别说明带点与不带点运算符的含义、矩阵乘法的维度要求,以及关系、逻辑与集合相关函数。
带点与不带点
- 矩阵运算(不带点):按线性代数规则,例如矩阵乘法是行与列对应相乘再求和
- 数组运算(带点
.):逐元素计算,两侧尺寸通常要一致
| 运算符 | 含义 |
|---|---|
* | 矩阵乘法 |
.* | 数组乘法(逐元素) |
^ | 矩阵乘方 |
.^ | 数组乘方(逐元素) |
/ \ | 矩阵右除 / 左除 |
./ .\ | 数组右除 / 左除 |
' | 转置(复数时含共轭) |
.' | 非共轭转置 |
矩阵乘法怎么算
矩阵乘法不是逐位置相乘,而是左矩阵的一行与右矩阵的一列对应相乘再加总。左矩阵的列数必须等于右矩阵的行数:
A = [1 2 3]; % 1×3
B = [4; 5; 6]; % 3×1
A * B % 1*4 + 2*5 + 3*6 = 32ans = 32.* 则要求两侧同尺寸(或符合扩展规则),例如:
A = [1 2 3];
A .* A % 1 4 9ans = 1 4 9出现维度相关报错时,应先确认需要的是矩阵积还是逐元素积,再核对左右数组的尺寸。
关系运算
关系运算对数组逐元素比较,结果是 logical 数组:
v = [1 5 3 8];
v > 3ans =
1×4 logical 数组
0 1 0 1| 运算符 | 含义 |
|---|---|
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
== | 等于 |
~= | 不等于 |
逻辑运算
- 逐元素:
&(与)、|(或)、~(非),作用在数组每个位置 - 短路:
&&、||,用于标量条件。左边已经能判定时,右边不再计算
a = [true false true];
b = [true true false];
a & b
true && (1 < 10)集合相关函数
| 函数 | 作用 |
|---|---|
union(A,B) | 并集 |
intersect(A,B) | 交集 |
setdiff(A,B) | 差集(在 A 不在 B) |
ismember(A,B) | 判断 A 的元素是否在 B 中 |
unique(A) | 去重(通常会排序) |
A = [1 2 3 4];
B = [3 4 5 6];
union(A, B)
intersect(A, B)
ismember(A, B)常见误区
- 两个同行向量要对应位置相乘,用
.*,不要用矩阵积*。 - 维度报错时,先核对尺寸,并确认运算该不该带点。
- 数组逻辑用
&/|。写if且两边是标量时,再用&&/||。
本节说明了矩阵运算与数组运算的差异、矩阵乘法的维度条件、关系与逻辑运算符,以及并集、交集等集合函数。下一节介绍向量:向量的创建、索引与常用操作。