运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。MATLAB设计为主要在整个矩阵和数组上运行。因此,MATLAB中的运算符既可以处理标量数据,也可以处理非标量数据。MATLAB允许以下类型的基本运算-
算术运算符
关系运算符
逻辑运算符
按位运算符
集合运算符
MATLAB允许两种不同类型的算术运算-
矩阵算术运算
数组算术运算
矩阵算术运算与线性代数中定义的相同。数组操作是在一维和多维数组上逐个元素执行的。
矩阵运算符和数组运算符之间用句点(。)符号进行区分。但是,由于矩阵和数组的加法和减法运算相同,因此两种情况下的运算符均相同。下表简要介绍了运算符-
序号 | 运算符和说明 |
---|---|
1 | + 加法或一元加号。A+B将存储在变量A和B中的值相加。A和B必须具有相同的大小,除非其中一个是标量。标量可以添加到任何大小的矩阵中。 |
2 | - 减法或一元减法。A-B从A中减去B的值。A和B必须具有相同的大小,除非其中一个是标量。标量可以从任何大小的矩阵中减去。 |
3 | * 矩阵乘法。C=A*B是矩阵A和B的线性代数积。更准确地说, 对于非标量A和B,A的列数必须等于B的行数。标量可以与任意大小的矩阵相乘。 |
4 | .* 数组乘法。A.*B是数组A和B的逐元素乘积。A和B必须具有相同的大小,除非其中一个是标量。 |
5 | / 斜杠或矩阵右除法。B/A与B*inv(A)大致相同。更准确地说, B/A = (A'\B')'. |
6 | ./ 数组右除法。A./B是元素A(i,j)/B(i,j)的矩阵。A和B必须具有相同的大小,除非其中一个是标量。 |
7 | \ 反斜杠或矩阵左除法。如果A是方阵,则A\B与inv(A)*B大致相同,只是计算方式不同。如果A是一个n乘n的矩阵,而B是一个包含n个分量的列向量,或者是一个包含多个这样的列的矩阵,那么X=A\B是方程AX=B的解。如果A的比例严重或几乎是单数,则会显示一条警告消息。 |
8 | .\ 数组左除法。A.\B是元素B(i,j)/A(i,j)的矩阵。A和B必须具有相同的大小,除非其中一个是标量。 |
9 | ^ 矩阵幂。如果p是标量,那么X^p是p的幂。如果p是整数,则通过重复平方计算幂。如果整数是负数,则X先倒数。对于p的其他值,计算涉及特征值和特征向量,因此如果[V,D]=eig(X),那么X^p=V*D.^p/V。 |
10 | .^ 数组幂。A.^B是元素A(i,j)为B(i,j)次方的矩阵。A和B必须具有相同的大小,除非其中一个是标量。 |
11 | ' 矩阵转置。A'是A的线性代数转置。对于复矩阵,这是复共轭转置。 |
12 | .' 数组转置 a’是 a 的数组转置。对于复杂的矩阵,这不涉及共轭。 |
关系运算符还可以处理标量和非标量数据。数组的关系运算符执行两个数组之间的逐元素比较,并返回相同大小的逻辑数组,其中元素设置为逻辑1(true),关系为true,元素设置为逻辑0(false)。不是。
下表显示了MATLAB中可用的关系运算符-
序号 | 运算符和说明 |
---|---|
1 | < 小于 |
2 | <= 小于或等于 |
3 | > 大于 |
4 | >= 大于或等于 |
5 | == 等于 |
6 | ~= 不等于 |
MATLAB提供两种类型的逻辑运算符和函数-
元素级-这些运算符对逻辑数组的相应元素进行操作。
短路-这些运算符对标量和逻辑表达式进行运算。
逐个元素的逻辑运算符在逻辑数组上逐个元素地进行操作。符号&,|和〜是逻辑数组运算符AND,OR和NOT。
短路逻辑运算符允许逻辑运算短路。符号&&和|| 是逻辑短路运算符AND和OR。
按位运算符对位进行运算并执行逐位运算。&,|和^的真值表如下-
p | q | p&q | p | q | p ^ Q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
假设A = 60; 和B = 13; 现在以二进制格式,它们将如下所示-
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
〜A = 1100 0011
MATLAB为按位运算提供了各种功能,例如``按位与'',``按位或''和``按位非''运算,移位运算等。
下表显示了常用的按位运算-
函数 | 作用 |
---|---|
bitand(a, b) | 整数 a 和 b 的位与 |
bitcmp(a) | a的逐位补码 |
bitget(a,pos) | 在整数数组a的指定位置获取位 |
bitor(a, b) | 整数a和b的位或 |
bitset(a, pos) | 将bit设置为a的特定位置pos |
bitshift(a, k) | 返回一个由向左移动ķ比特,相当于乘以2 ķ。k的负值对应于右移位或除以2 | k | 并朝负无穷大四舍五入到最接近的整数。任何溢出位都将被截断。 |
bitxor(a, b) | 整数 a 和 b 的位异或 |
swapbytes | 整数 a 和 b 的位异或 |
MATLAB提供了用于集合操作的各种功能,例如联合,交集和集合成员资格的测试等。
下表显示了一些常用的设置操作-
序号 | 功能说明 |
---|---|
1 | intersect(A,B) 设置两个数组的交集;返回A和B的公共值。返回的值按顺序排列。 |
2 | intersect(A,B,'rows') 将A的每一行和B的每一行视为单个实体,并返回A和B共用的行。返回矩阵的行按排序顺序排列。 |
3 | ismember(A,B) 返回一个与A大小相同的数组,其中包含1(true),其中A的元素位于B中。在其他位置,它返回0(false)。 |
4 | ismember(A,B,'rows') 将A的每一行和B的每一行视为单个实体,并返回一个包含1的向量(true),其中矩阵A的行也是B的行。在其他地方,它返回0(false)。 |
5 | issorted(A) 如果元素按排序顺序排列,则返回逻辑1(true),否则返回逻辑0(false)。输入A可以是向量,也可以是N×1或1×N的字符串单元格数组。如果A和sort(A)的输出相等,则认为A被排序。 |
6 | issorted(A, 'rows') 如果二维矩阵A的行按排序顺序排列,则返回逻辑1(true),否则返回逻辑0(false)。如果A和sortrows(A)的输出相等,则认为矩阵A是排序的。 |
7 | setdiff(A,B) 设置两个数组的差值;返回A中不在B中的值。返回数组中的值按排序顺序排列。 |
8 | setdiff(A,B,'rows') 将A的每一行和B的每一行视为单个实体,并返回A中不在B中的行。返回矩阵的行按排序顺序排列。 “rows”选项不支持单元格数组。 |
9 | setxor 两个数组的异或 |
10 | union 两个数组的并集 |
11 | unique 数组中的唯一值 |