Matlab笔记12:运算符的优先级、不同数组大小的运算兼容性

供稿:hz-xin.com     日期:2025-01-18
在Matlab中,运算符的优先级与运算符的优先级高低决定了运算的顺序。优先级高的运算符会先于优先级低的运算符执行。如果多个运算符具有相同的优先级,Matlab会遵循从左到右的顺序进行运算。下面列出Matlab运算符的优先级规则,从高到低排序如下:

1) 括号 ()

2) 转置 (.'), 幂(.^), 复共轭转置 ('), 矩阵的幂(^)

3) 一元减的幂(.^-),一元加的幂(.^+),逻辑非的幂(.^~) 一元减的矩阵的幂(^-), 一元加的矩阵的幂(^+),逻辑非的矩阵的幂 (^~).

4) 一元加(+),一元减(-),逻辑非(~)

5) 乘法(.*),右除(./),左除(.\),矩阵的乘法(*),矩阵的右除(/),矩阵的左除 (\)

6) 加法 (+), 减法(-)

7) 冒号(:)

8) 关系运算符(<),(<=),(>), (>=), (==), (~=)

9) 逻辑与(&)

10) 逻辑或(|)

11) 短路逻辑与(&&)

12) 短路逻辑或 (||)

理解运算符的优先级对于正确编写Matlab代码至关重要。以下是一些程序示例,展示了如何正确使用运算符。

示例1:`1>=1+1`,优先执行加法运算,结果为`0`。

示例2:`(1>=1)+1`,先进行关系比较,再进行加法运算,结果为`2`。

示例3:`1:2+3`,先生成序列,再进行加法运算,结果为`[4 5]`。

示例4:`1|1&0`,逻辑与运算优先于逻辑或运算,结果为`0`。

在进行基本运算时,需要注意数组大小的兼容性问题。以下是一些兼容性规则:

1) 两个完全相同大小的数组可以进行运算。

2) 若运算数之一为标量,两个不同大小的数组可以进行运算。

3) 若一个为行向量,一个为列向量,可以进行运算。

4) 若一个为矩阵,另一个为具有相同行数或列数的向量,可以进行运算。

5) 若一个为矩阵,另一个为具有相同行数、列数的三维数组,可以进行运算。

这些规则适用于Matlab的2016版及更高版本。以下是一些程序示例,展示了如何处理不同大小的数组:

a=[1 2;3 4],b=[1 2],c=[3;4]。

示例1:`a+a`,矩阵与矩阵运算,结果为`[2 4;6 8]`。

示例2:`a+2`,矩阵与标量运算,结果为`[3 4;5 6]`。

示例3:`a.*2`,矩阵与标量的点乘运算,结果为`[2 4;6 8]`。

示例4:`a*2`,矩阵与标量的乘法运算,结果为`[2 4;6 8]`。

示例5:`b+c`,先将b复制行,c复制列,结果为`[4 5;5 6]`。

示例6:`a+b`,矩阵与矩阵的加法运算,结果为`[2 4;5 6]`。

示例7:`a+c`,矩阵与矩阵的加法运算,结果为`[4 6;7 8]`。

示例8:`a.*b`,矩阵与矩阵的点乘运算,结果为`[1 4;3 8]`。

示例9:`a.*c`,矩阵与矩阵的点乘运算,结果为`[3 8;12 16]`。

以上程序示例展示了在Matlab中处理不同大小数组运算的方法。注意,`a*b`无法进行兼容性运算,而`a*c`实际上是矩阵与向量的点乘运算,当`a`的行数等于`c`的列数时,结果为`[11;14]`。

在Matlab编程中,理解运算符的优先级与数组的兼容性规则是编写有效代码的关键。遵循这些规则可以避免常见的错误,提高代码的可读性和执行效率。