2.3 运算符
MATLAB中的运算符分为算术运算符、关系运算符和逻辑运算符。这3种运算符可以分别使用,也可以在同一运算式中出现。当在同一运算式中同时出现两种或两种以上运算符时,运算的优先级排列如下:算术运算符优先级最高,其次是关系运算符,最低级别是逻辑运算符。
2.3.1 算术运算符
MATLAB中的算术运算符有加、减、乘、除、点乘、点除等,其运算法则如表2-19所示。
表2-19 MATLAB中的算术运算符及其运算法则
例2-51:数值与矩阵的算术运算示例。
在命令行窗口中输入:
A = eye(2),B = ones(2),C = A * B,D = A .* B
输出结果:
A = 1 0 0 1 B = 1 1 1 1 C = 1 1 1 1 D = 1 0 0 1
MATLAB平台上还提供了大量的运算函数,其中常用的运算函数如表2-20所示。
表2-20 MATLAB中常用的运算函数
函数 |
运算法则 |
exp(x) |
求以e为底数的x次幂 |
log(x) |
以e为底数对x取对数 |
log10(x) |
以10为底数对x取对数 |
sqrt(x) |
x的平方根 |
sin(x) |
x的正弦函数 |
cos(x) |
x的余弦函数 |
tan(x) |
x的正切函数 |
asin(x) |
x的反正弦函数 |
acos(x) |
x的反余弦函数 |
atan(x) |
x的反正切函数 |
mod(a,b) |
a与b相除取余数 |
min(a,b) |
返回a与b中较小的数值 |
max(a,b) |
返回a与b中较大的数值 |
mean(x) |
找出x阵列的平均值 |
median(x) |
找出x阵列的中位数 |
sum(x) |
计算x阵列的总和值 |
prod(x) |
计算x阵列的连乘值 |
cumsum(x) |
计算x阵列的累积总和值 |
cumprod(x) |
计算x阵列的累积连乘值 |
sign(x) |
x < 0时返回值为-1 x = 0时返回值为0 x > 0时返回值为1 |
rem(x,y) |
返回x / y的余数 |
diff(x) |
x向量的差分 |
sort(x) |
对x向量进行排序 |
fft(x) |
x向量的离散傅里叶变换 |
rank(x) |
x矩阵的秩 |
2.3.2 关系运算符
MATLAB中的关系运算符有6个,具体如表2-21所示。
表2-21 MATLAB中的关系运算符
关系运算符 |
关系说明 |
< |
小于 |
<= |
小于或等于 |
> |
大于 |
>= |
大于或等于 |
== |
等于 |
~= |
不等于 |
注意:“=”和“==”的区别:“==”的运算法则是比较两个变量,当它们相等时返回1,当它们不相等时返回0;而“=”则被用来将运算结果赋给一个变量。
关系运算符可以用来对两个数值、两个数组、两个矩阵或两个字符串等数据类型进行比较,同样也可以进行不同数据类型的两个数据之间的比较。比较的方式根据所比较的两个数据类型的不同而不同。例如在对矩阵和一个标量进行比较时,需将矩阵中的每个元素与标量进行比较。
关系运算符通过比较对应的元素,产生一个仅包含1和0的数值或矩阵。其元素代表的意义如下:
● 返回值为1,比较结果是真。
● 返回值为0,比较结果是假。
例2-52:关系运算符的运用。在命令行窗口中输入:
A = 1:9,B = 10 - A
输出结果:
A = 1 2 3 4 5 6 7 8 9 B = 9 8 7 6 5 4 3 2 1
在命令行窗口中输入:
TrueorFalse = (A > 4)
输出结果:
TrueorFalse = 1×9 logical 数组 0 0 0 0 1 1 1 1 1
在命令行窗口中输入:
TrueorFalse = (A == B)
输出结果:
TrueorFalse = 1×9 logical 数组 0 0 0 0 1 0 0 0 0
例2-53:关系运算符的运算。
在命令行窗口中输入:
C = 5:-1:0; C = C + (C == 0) * eps
输出结果:
C = 5.0000 4.0000 3.0000 2.0000 1.0000 0.0000
提示:上例中利用特殊的MATLAB数eps代替一个数组中的零元素,eps近似为2.2e-16。这种特殊的表达式在避免0作为分母时是很有用的。
2.3.3 逻辑运算符
逻辑运算符提供了一种组合或否定关系表达式。MATLAB中的逻辑运算符如表2-22所示。
表2-22 MATLAB中的逻辑运算符
逻辑运算符 |
说明 |
& |
与 |
| |
或 |
~ |
非 |
例2-54:逻辑运算符的运用。
在命令行窗口中输入:
A = 1:9 TrueorFalse = ~ (A > 4)
输出结果:
A = 1 2 3 4 5 6 7 8 9 TrueorFalse = 1×9 logical 数组 1 1 1 1 0 0 0 0 0
在命令行窗口中输入:
TrueorFalse = (A > 2) & (A < 6)
输出结果:
TrueorFalse = 1×9 logical 数组 0 0 1 1 1 0 0 0 0
与关系运算符一样,逻辑运算符也可以进行矩阵与数值之间的比较,比较的方式为将矩阵的每一个元素都与数值进行比较,比较结果为一个相同维数的矩阵,新生成矩阵中的每一个元素都代表着原来矩阵中相同位置上的元素与该数值的逻辑运算结果。
在使用逻辑运算符比较两个相同维数的矩阵时,是按元素来进行比较的,其比较结果是一个包含1和0的矩阵。元素0表示逻辑为假,元素1表示逻辑为真。
A&B返回一个与A和B相同维数的矩阵。在这个矩阵中,当A和B对应元素都为非零时,对应项为1;当有一个为零时,对应项为0。
A|B返回一个与A和B相同维数的矩阵。在这个矩阵中,A和B对应元素只要有一个为非零,则对应项为1;当两个矩阵均为零时,对应项为0。
~A返回一个与A相同维数的矩阵。在这个矩阵中,当A中对应项是零时,对应项为1;当A中对应项是非零时,对应项为0。
除了上面的逻辑运算符,MATLAB中还提供了各种逻辑函数,基本的逻辑函数如表2-23所示。
表2-23 MATLAB中基本的逻辑函数
函数 |
运算法则 |
xor(x,y) |
异或运算。当x与y不同时,返回1;当x与y相同时,返回0 |
any(x) |
如果在一个向量x中,有任何元素是非零,则返回1;否则返回0 如果矩阵x中的每一列有非零元素,则返回1;否则返回0 |
all(x) |
如果在一个向量x中,所有元素非零,则返回1;否则返回0 如果矩阵x中的每一列所有元素非零,则返回1;否则返回0 |
2.3.4 运算优先级
在一个表达式中,算术运算符优先级最高,其次是关系运算符,最后是逻辑运算符。需要时,可以通过加括号来改变运算顺序。MATLAB中具体的运算优先级排列如表2-24所示。
表2-24 MATLAB中具体的运算优先级排列
优先级 |
运算法则 |
1 |
括号:() |
2 |
转置和乘幂:’ ^ .^ |
3 |
一元加减运算和逻辑非:+ - ~ |
4 |
乘除、点乘、点除:* / .* ./ |
5 |
冒号运算:: |
6 |
关系运算:> >= < <= == ~= |
7 |
逐个元素的逻辑与:& |
8 |
逐个元素的逻辑或:| |
9 |
捷径逻辑与:&& |
10 |
捷径逻辑或:|| |
提示:在表达式的书写中,建议采用括号分级的方式明确运算的先后顺序,避免优先级混乱而产生运算错误。
