Matlab自学一本通之运算符
2021年7月10日
运算符
MATLAB 中的运算符分为算术运算符、关系运算符和逻辑运算符。这三种运算符可以分别使用,也可以在同一运算式中出现。当在同一运算式中同时出现两种或两种以上运算符时,
运算的优先级排列如下:算术运算符优先级最高,其次是关系运算符,最低级别是逻辑运算符。
算术运算符
MATLAB中的算术运算符有加、减、乘、除、点乘、点除等,其运算法则如下表所示:
算术运算符 | 运算法则 | 算术运算符 | 运算法则 |
---|---|---|---|
A+B | A 与 B 相加 (A、B 为数值或矩阵) | A-B | A 与 B 相减 (A、B 为数值或矩阵) |
A*B | A 与 B 相乘 (A、B 为数值或矩阵) | A.*B | A 与 B 相应元素相乘 (A、B 为相同维度的矩阵) |
A/B | A 与 B 相除 (A、B 为数值或矩阵) | A./B | A 与 B 相应元素相除 (A、B 为相同维度的矩阵) |
A^B | A 的 B 次幂 (A、B 为数值或矩阵) | A.^B | A 的每个元素的 B 次幂 (A 为矩阵,B 为数值) |
% 数值与矩阵的算术运算示例。
A = eye( 2 ), B = ones( 2 ), C = A * B, D = A .* B
输出结果:
A =
1 0
0 1
B =
1 1
1 1
C = %A 与 B 两个矩阵相乘
1 1
1 1
D = %A 与 B 两个矩阵的每个元素分别相乘
1 0
0 1
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 矩阵的秩 |
关系运算符
MATLAB中的关系运算符有6个,其运算法则如下表所示:
关系运算符 | 关系说明 | 关系运算符 | 关系说明 |
---|---|---|---|
< | 小于 | <= | 小于等于 |
> | 大于 | >= | 大于等于 |
== | 等于 | ~= | 不等于 |
“=”和“= =”的区别:“= =”的运算法则是比较两个变量,当它们相等时返回 1,当它们不相等时返回 0;
而“=”则是被用来将运算的结果赋给一个变量。
关系运算符可以用来对两个数值、两个数组、两个矩阵或两个字符串等数据类型进行比 较,同样也可以进行不同类型两个数据之间的比较。比较的方式根据所比较的两个数据类型 的不同而不同。例如对矩阵和一个标量进行比较时,需将矩阵中的每个元素与标量进行比较。
关系运算符通过比较对应的元素,产生一个仅包含1 和 0 的数值或矩阵。其元素代表的意义如下:
返回值为 1,比较结果是真。
返回值为 0,比较结果是假。
% 关系运算符的运用。
A=1:9, B=10-A
TrueorFalse = ( A>4 )
% 输出结果:
TrueorFalse = 0 0 0 0 1 1 1 1 1
% 在命令行窗口中输入:
TrueorFalse = ( A==B )
% 输出结果:
TrueorFalse = 0 0 0 0 1 0 0 0 0
% 关系运算符的运算。
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作为分母时是很有用的。
逻辑运算符
逻辑运算符提供了一种组合或否定关系表达式,MATLAB逻辑运算符如下表所示:
逻辑运算符 | 说明 |
---|---|
& | 与 |
| | 或 |
~ | 非 |
% 逻辑运算符的运用。
A=1:9
TrueorFalse = ~( A>4 )
% 输出结果:
TrueorFalse = 1 1 1 1 0 0 0 0 0
% 在命令行窗口中输入:
TrueorFalse =(A>2)&(A<6)
% 输出结果:
TrueorFalse = 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 还提供了各种逻辑函数,基本的逻辑函数如下表所示:
函数 | 运算法则 |
---|---|
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 |
运算优先级
在一个表达式中,算术运算符优先级最高,其次是关系运算符,最后是逻辑运算符。
需要时,可以通过加括号来改变运算顺序。MATLAB 中具体的运算优先级排列如下表所示:
优先级 | 运算法则 |
---|---|
1 | 括号:() |
2 | 转置和乘幂:‘ , ^ , .^ |
3 | 一元加减运算和逻辑非: +, -, ~ |
4 | 乘除,点乘,点除:* , / , .* , ./ |
5 | 冒号运算: : |
6 | 关系运算:>, >=, <, <=, ==, ~= |
7 | 逐个元素的逻辑与:& |
8 | 逐个元素的逻辑或: | |
9 | 捷径逻辑与:&& |
10 | 捷径逻辑或: || |
在表达式的书写中,建议采用括号分级的方式明确运算的先后顺序,避免优先级混乱而产生运算错误