Skip to content

MATLAB - 运算符

运算符是一个符号,它指示编译器执行特定的数学或逻辑操作。MATLAB 的运算符设计旨在无缝地作用于标量(单个数字)和数组/矩阵,使其成为强大的数值计算工具。

MATLAB 的基本操作可分为以下几类:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算
  • 集合操作

MATLAB 中的一个关键概念是矩阵算术与数组算术之间的区别。数组操作通过前导点(.)表示,并逐元素执行。

运算符描述
+加法。A + B。逐元素运算。
-减法。A - B。逐元素运算。
*矩阵乘法。遵循线性代数规则。A 的列数必须等于 B 的行数。
.*数组(逐元素)乘法。A .* B。A 和 B 必须具有相同的维度,或者其中一个必须是标量。
/矩阵右除。A / B 大致等同于 A * inv(B)。
./数组(逐元素)右除。A ./ B。将 A 的每个元素除以 B 的对应元素。
\矩阵左除。A \ B 大致等同于 inv(A) * B。这是求解线性方程组 Ax = B 的推荐方法。
.\数组(逐元素)左除。A .\ B。将 B 的每个元素除以 A 的对应元素。
^矩阵幂。A^p 计算 A 的 p 次幂。
.^数组(逐元素)幂。A .^ B。将 A 的每个元素提升到 B 中的对应幂。
‘矩阵转置。A' 是线性代数转置。对于复数矩阵,它是复共轭转置。
.’数组转置。A.' 转置 A 而不进行复共轭。
A = [1, 2; 3, 4];
B = [5, 6; 7, 8];
% 矩阵乘法 (1*5 + 2*7 = 19)
C_matrix = A * B
% 数组(逐元素)乘法 (1*5=5, 2*6=12, ...)
C_array = A .* B

输出:

C_matrix =
19 22
43 50
C_array =
5 12
21 32

关系运算符逐元素比较数组,并返回一个相同大小的逻辑数组,其中每个元素为 1 (真) 或 0 (假)。

运算符描述
<小于
<=小于或等于
>大于
>=大于或等于
==等于
~=不等于
A = [1, 5, 6];
B = [2, 5, 3];
% 查找 A 大于 B 的元素
L1 = A > B
% 查找 A 等于 B 的元素
L2 = A == B

输出:

L1 = 1x3 logical array
0 0 1
L2 = 1x3 logical array
0 1 0

MATLAB 有两种类型的逻辑运算符:

  • 逐元素 (&, |, ~):对逻辑数组的每个元素进行操作。
  • 短路 (&&, ||):对标量逻辑表达式进行操作,并用于 if 和 while 等控制流语句中。它们仅在结果未完全由第一个操作数确定时才评估第二个操作数。
% 逐元素 AND
A = [1, 0, 1]; % 使用 1 和 0 表示真和假
B = [0, 0, 1];
C = A & B % 返回一个逻辑数组
% if 语句中的短路 AND
x = 5;
y = 10;
if (x > 0) && (y > 5)
disp('两个条件都为真。');
end

输出:

C = 1x3 logical array
0 0 1
Both conditions are true.

位运算符对整数类型执行逐位操作。

函数用途
bitand(a, b)整数 a 和 b 的按位 AND
bitor(a, b)整数 a 和 b 的按位 OR
bitxor(a, b)整数 a 和 b 的按位 XOR
bitcmp(a)a 的按位补码
bitshift(a, k)位移。正 k 表示左移,负 k 表示右移。
% A = 60 (二进制 00111100)
% B = 13 (二进制 00001101)
a = uint8(60);
b = uint8(13);
% 结果应为 12 (二进制 00001100)
result = bitand(a, b)

输出:

result = 12

MATLAB 提供了对向量执行集合操作的函数。

函数描述
union(A,B)集合并集;返回在 A 或 B 中的元素,已排序。
intersect(A,B)集合交集;返回 A 和 B 共有的元素。
setdiff(A,B)集合差集;返回在 A 中但不在 B 中的元素。
setxor(A,B)集合异或;返回不在 A 和 B 交集中的元素。
unique(A)返回 A 中的唯一元素。
ismember(A,B)返回一个逻辑数组,指示 A 中的哪些元素也在 B 中。
A = [1, 2, 3, 5];
B = [2, 4, 5, 6];
% A 和 B 的并集
C_union = union(A, B)
% A 和 B 的交集
C_intersect = intersect(A, B)

输出:

C_union =
1 2 3 4 5 6
C_intersect =
2 5