MATLAB运算符大全(含优先级)
MATLAB 运算符可分为三大类,即算术运算符、关系运算符和逻辑运算符。
矩阵算术运算符如下表所示:
数组算术运算符如下表所示:
说明:
MATLAB关系运算符如下表所示:
关系运算定义在数组基础之上更合适。因为从运算法则不难发现,关系运算是元素一对一的运算。
当操作数是数组时,关系运算符总是对被比较的两个数组的各个对应元素进行比较,因此要求被比较的数组必须具有相同的尺寸。
【实例】 MATLAB 中的关系运算。在命令行窗口中输入以下语句,并查看输出结果。
逻辑运算符如下表所示:
MATLAB 的逻辑运算定义在数组的基础之上,向下可兼容一般高级语言中所定义的标量逻辑运算。为提高运算速度,MATLAB 还定义了针对标量的先决与和先决或运算。
先决与运算在该运算符的左边为 1(真)时,才继续与该符号右边的量做逻辑运算。先决或运算在运算符的左边为 1(真)时,就不需要继续与该符号右边的量做逻辑运算,而立即得出该逻辑运算结果为1(真);否则,就要继续与该符号右边的量做逻辑运算。
提示,这里逻辑与和逻辑非运算,都是逐元素进行双目运算的,因此如果参与运算的是数组,就要求两个数组具有相同的尺寸。
【实例】逐元素逻辑运算应用示例。在命令行窗口中输入以下语句,并查看输出结果。
表中同一行的各运算符具有相同的优先级,而在同一优先级别中又遵循有括号先括号运算的原则。
在实际的表达式书写中,建议采用括号分隔的方式明确各步运算的次序,以减少优先级的混乱。比如,x./y.^a 最好写成 x./(y.^a)。
MATLAB算术运算符
算术运算按所处理的对象不同,分为矩阵算术运算和数组算术运算两类。矩阵算术运算符如下表所示:
运算符 | 名称 | 示例 | 使用说明(法则) | 对应函数 |
---|---|---|---|---|
+ | 加 | C = A + B | 矩阵加法法则,即 C(i,j) = A(i,j) + B(i,j) | plus |
- | 减 | C = A - B | 矩阵减法法则,即 C(i,j) = A(i,j) - B(i,j) | minus |
* | 乘 | C = A * B | 矩阵乘法法则 | mtimes |
/ | 右除 | C = A / B | 定义为矩阵右乘 B\*A 的解,即 C = A * B^-1 | mrdivide |
\ | 左除 | C = A \ B | 定义为矩阵左乘 A\*B 的解,即 C = A^-1 * B | mldivide |
.^ | 元素乘方 | C = A .^ B | 每个元素做幂运算 | power |
' | 共轭转置 | B = A' | A 的共轭转置矩阵 | ctranspose |
数组算术运算符如下表所示:
运算符 | 名称 | 示例 | 使用说明(法则) | 对应函数 |
---|---|---|---|---|
.* | 数组乘法 | C = A .* B | 逐元素乘法 | times |
./ | 数组右除 | C = A ./ B | 逐元素右除 | rdivide |
.\ | 数组左除 | C = A .\ B | 逐元素左除 | ldivide |
.^ | 数组乘方 | C = A .^ B | 逐元素幂运算 | power |
' | 数组转置 | C = A' | 逐元素的转置 | transpose |
说明:
- 矩阵的加、减、乘法运算是严格按矩阵运算法则定义的,而矩阵的除法虽和矩阵求逆有关系,但分为左、右除,因此不是完全等价的。乘幂运算更是将标量的幂运算扩展到矩阵,并且支持将矩阵作为幂指数进行运算。
- 表 2 中并未定义数组的加减法,因为数组的加减法与矩阵的加减法相同。
- 不论是加减乘除,还是乘幂,数组的运算都是元素间的运算,即对应下标元素一对一的运算。
- 多维数组的运算,即元素按下标一一对应参与运算。
MATLAB关系运算符
在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。MATLAB关系运算符如下表所示:
运算符 | 名称 | 示例 | 使用说明(法则) |
---|---|---|---|
< | 小于 | A<B |
1. A、B 都是标量,结果是或为 1(真)或为 0(假)的标量 2. A、B 中若一个为标量,另一个为数组,则标量将与数组各元素逐一比较,结果为与运算数维行、列数相同的数组,其中各元素取值或为 1 或为 0 3. A、B 均为数组时,行、列数必须分别相同。A 与 B 各对应元素相比较,结果为与 A 或 B 行、列数相同的数组,其中各元素取值或为 1 或为 0 4. == 和 ~= 运算对参与比较的量同时比较实部和虚部,其他运算只比较实部 |
<= | 小于或等于 | A<=B | |
> | 大于 | A>B | |
>= | 大于或等于 | A>=B | |
== | 恒等于 | A==B | |
~= | 不等于 | A~=B |
关系运算定义在数组基础之上更合适。因为从运算法则不难发现,关系运算是元素一对一的运算。
当操作数是数组时,关系运算符总是对被比较的两个数组的各个对应元素进行比较,因此要求被比较的数组必须具有相同的尺寸。
【实例】 MATLAB 中的关系运算。在命令行窗口中输入以下语句,并查看输出结果。
>> 5>=4 ans = logical 1 >> x = rand(1,4) % 生成一个 1×4 的随机数向量 x x = 0.0975 0.2785 0.5469 0.9575 >> y = rand(1,4) % 生成另一个 1×4 的随机数向量 y y = 0.9649 0.1576 0.9706 0.9572 >> x > y % 比较 x 和 y 中对应元素的大小 ans = 1x4 logical array 0 1 0 1提示:
- 比较两个数是否相等的关系运算符是两个等号“==”,而单个等号“=”在 MATLAB 中是给变量赋值的符号。
- 比较两个浮点数是否相等时需要注意,由于浮点数的存储形式决定了相对误差是否存在,在程序设计中最好不要直接比较两个浮点数是否相等,而是应采用大于、小于的比较运算将待确定值限制在一个满足需要的区间之内。
MATLAB逻辑运算符
关系运算返回的结果是逻辑类型数据(逻辑真或逻辑假),这些简单的逻辑类型数据可以通过逻辑运算符组成复杂的逻辑表达式,这在程序设计中经常用于进行分支选择或者确定循环终止条件。逻辑运算符如下表所示:
运算符 | 名称 | 示例 | 使用说明(法则) |
---|---|---|---|
& | 与 | A&B |
1. A、B 都是标量,结果是或为 1(真)或为 0(假)的标量 2. A、B 中若一个为标量,另一个为数组,则标量将与数组各元素逐一做逻辑运算,结果为与运算数组行、列数相同的数组,其中各元素取值为 1 或为 0 3. A、B 均为数组时,行、列数必须分别相同,A 与 B 各对应元素做逻辑运算,结果为与 A 或 B 行、列数相同的数组,其中各元素取值为 1 或为 0 4. 先决与、先决或是仅针对标量的运算 |
| | 或 | A|B | |
~ | 非 | ~A | |
&& | 先决与 | A&&B | |
|| | 先决或 | A||B |
MATLAB 的逻辑运算定义在数组的基础之上,向下可兼容一般高级语言中所定义的标量逻辑运算。为提高运算速度,MATLAB 还定义了针对标量的先决与和先决或运算。
先决与运算在该运算符的左边为 1(真)时,才继续与该符号右边的量做逻辑运算。先决或运算在运算符的左边为 1(真)时,就不需要继续与该符号右边的量做逻辑运算,而立即得出该逻辑运算结果为1(真);否则,就要继续与该符号右边的量做逻辑运算。
提示,这里逻辑与和逻辑非运算,都是逐元素进行双目运算的,因此如果参与运算的是数组,就要求两个数组具有相同的尺寸。
【实例】逐元素逻辑运算应用示例。在命令行窗口中输入以下语句,并查看输出结果。
>> x = rand(1,3) % 生成一个 1×3 的随机数向量 x x = 0.4854 0.8003 0.1419 >> y = x > 0.5 % 判断 x 中哪些元素大于 0.5 y = 1x3 logical array 0 1 0 >> m = x < 0.96 % 判断 x 中哪些元素小于 0.96 m = 1x3 logical array 1 1 1 >> y & m % 逻辑与操作,返回 y 和 m 的对应元素都为 1 的元素 ans = 1x3 logical array 0 1 0 >> y | m % 逻辑或操作,返回 y 或 m 的对应元素中至少一个为 1 的元素 ans = 1x3 logical array 1 1 1 >> ~y % 逻辑非操作,返回 y 的反值 ans = 1x3 logical array 1 0 1
MATLAB运算符优先级
当用多个运算符和运算量写出一个 MATLAB 表达式时,运算符的优先次序必须明确。下表列出了 MATLAB 运算符的优先次序。优先顺序 | 运算符 |
---|---|
最高 | ' (转置共轭)、^ (矩阵乘方)、~ (逻辑非)、' (转置)、.^ (数组乘方) |
↓ | .* (数组乘)、 ./ (数组右除)、 .\(数组左除) |
↓ | +、-、: (冒号运算) |
↓ | <、<=、>、>=、== (恒等于)、~= (不等于) |
↓ | & (逻辑与) |
↓ | | (逻辑或) |
↓ | && (先决与) |
最低 | || (先决或) |
表中同一行的各运算符具有相同的优先级,而在同一优先级别中又遵循有括号先括号运算的原则。
在实际的表达式书写中,建议采用括号分隔的方式明确各步运算的次序,以减少优先级的混乱。比如,x./y.^a 最好写成 x./(y.^a)。