MATLAB运算符写在表达式里,用来做算术、比较、逻辑等运算。算术符号里最容易混的是:不带点的按线性代数算,带点的按对应位置算。两个一样长的行向量想按位置相乘,若写成 A * B,会按矩阵乘法理解,这两个 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 18MATLAB运算符里,算术符号经常成对出现:不带点的按线性代数算,带点的按对应位置算。加减两边规则一样,所以不用加点。乘、除、乘方则一定要选对。
带点与不带点
- 矩阵运算(不带点):按线性代数规则,例如矩阵乘法是行与列对应相乘再求和
- 数组运算(带点
.):逐元素计算,两侧尺寸通常要一致
| 运算符 | 含义 |
|---|---|
* | 矩阵乘法 |
.* | 数组乘法(逐元素) |
^ | 矩阵乘方 |
.^ | 数组乘方(逐元素) |
/ \ | 矩阵右除 / 左除 |
./ .\ | 数组右除 / 左除 |
' | 转置(复数时含共轭) |
.' | 非共轭转置 |
矩阵乘法怎么算
矩阵乘法不是逐位置相乘,而是左矩阵的一行与右矩阵的一列对应相乘再加总。左矩阵的列数必须等于右矩阵的行数:
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且两边是标量时,再用&&/||。