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*6
ans = 4 10 18

MATLAB运算符里,算术符号经常成对出现:不带点的按线性代数算,带点的按对应位置算。加减两边规则一样,所以不用加点。乘、除、乘方则一定要选对。

带点与不带点

  • 矩阵运算(不带点):按线性代数规则,例如矩阵乘法是行与列对应相乘再求和
  • 数组运算(带点 .):逐元素计算,两侧尺寸通常要一致
运算符含义
*矩阵乘法
.*数组乘法(逐元素)
^矩阵乘方
.^数组乘方(逐元素)
/ \矩阵右除 / 左除
./ .\数组右除 / 左除
'转置(复数时含共轭)
.'非共轭转置

矩阵乘法怎么算

矩阵乘法不是逐位置相乘,而是左矩阵的一行与右矩阵的一列对应相乘再加总。左矩阵的列数必须等于右矩阵的行数:

A = [1 2 3];   % 1×3
B = [4; 5; 6]; % 3×1
A * B          % 1*4 + 2*5 + 3*6 = 32
ans = 32

.* 则要求两侧同尺寸(或符合扩展规则),例如:

A = [1 2 3];
A .* A   % 1 4 9
ans = 1 4 9

维度报错时,先分清自己要的是矩阵积还是逐元素积,再看左右尺寸对不对。

关系运算

关系运算对数组逐元素比较,结果是 logical 数组:

v = [1 5 3 8];
v > 3
ans =
  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)去重(通常会排序)
MATLAB 集合并交运算示例运行
A = [1 2 3 4];
B = [3 4 5 6];
union(A, B)
intersect(A, B)
ismember(A, B)

常见误区

  • 两个同行向量要对应位置相乘,用 .*,不要用矩阵积 *
  • 维度报错时,先核对尺寸,并确认运算该不该带点。
  • 数组逻辑用 & / |。写 if 且两边是标量时,再用 && / ||