选择结构的运算由一个表达式控制的,这个表达式的结果只有 true(1)和 false(0)。有两种形式的运算符可以在 MATLAB 中关系得到 true/false:关系运算符和逻辑运算符。跟 C 语言一样,MATLAB 没有布尔型和逻辑数据类型。MATLAB 把 0 值作为结果false,把所有的非 0 值作为结果 ture。
1 关系运算符
关系运算符是指两数值或字符操作数的运算符,这种运算将会根椐两操作数的关系产生结果 true 或 false。关系运算的基本形式如下
a1 op a2
其中 a1和 a2是算术表达式,变量或字符串,op 代表关系运算符中的一个,如表1所示。如果两者的关系为真(true)时,那么这个运算将会返回 1 值;否则将会返回 0 值。
表1 关系运算符
![e5843fb5ef5645368af53a0678964ebd.png](https://img-blog.csdnimg.cn/e5843fb5ef5645368af53a0678964ebd.png)
最后一个运算得到的结果为 1,是因为字符之间的求值要按照子母表的顺序。关系运算符也可用于标量与数组的比较。例如,如果a=[1 0;-2 1]和 b=0,那么表达式 a>b 将会产生结果[1 0; 1 0]例如a=[1 0;-2 1],b=[0 2;-2 -1],表达式 a>=b 将会产生结果[1 0;1 1].如果这个数组具有不同的大小,那么将会产生运行时错误。注意因为字符串实际上是字符的数组,关系运算符也比较两个相同长度的字符串。如果它们有不同的长度,比较运算将会产生一个错误。在第六章中我们将会学到一个更普遍的方法。等于关系运算符由两个等号组成,而赋值运算符只有一个等号。它们是完全不同 的两个符号,初学者极易混淆。符号==是一个比较运算符,返回一个逻辑数,而符号=是将等号右边的表达式的值赋给左边的变量。当进行比较运算的时候,初学者经常用误用符号=。
常见编程错误
小心谨慎不要混淆了等于关系运算符(==)和赋值运算符(=)。
在运算的层次中,关系运算在所有数学运算的之后进行。所以下面两个表达式是等价的,均产生结果 1。
7 + 3 < 2 + 11
(7 + 3)< (2 + 11)
等于运算符(==)如果两变量值相同将会返回变量值 1,如果不同将返回 0。
不等运算符(~=)如果两变量值不同则返回 1,相则返回 0。
用这两个运算符比较两个字符串他是安全的,不会出现错误。但对两个数字数据的比较,将可能产生异想不到的错误。两个理论上相等的数不能有一丝一毫的差别,而在计算机计算的过程中出现了近似的现象,从而可能在判断相等与不相等的过程中产生错误,这种错误叫做 round off 错误。例如,考虑下面的两个数,两者均应等于 0。
a = 0;
b = sin(pi);
因为这两个数在理论上相等的,所以关系式 a==b 应当返回值 1。但在事实上,MATLAB 计算所产生的结果的却是
ans = 0
MATLAB 报告了 a 和 b 不同因为他产生了一个 round off 错误,在计算中 sin(pi)产生了结果 1.2246×10^(-16) 而不是 0。两个理论上相等的值因为 round off 错误而失之发生了细微的差别。我们可以通过检测两数之间在一定的范围内是不是近似相等,在这个精确范围内可能会产生 round off 错误。例如测试
abs(a - b) < 1.0E-14
结果就是ans=1
将会产生正确的结果,不管在 a 与 b 的计算中产不产生的 round off 错误。
好的编程习惯
在我们检测两数值是否相等时一定要小心,因为 round off 错误可能会使两个本来应该相等的值不相等了。这时你可以在 round off 错误的范围内它是不是近似相等。
2 逻辑运算符
逻辑运算符是联系一个或二个逻辑操作数并能产生一个逻辑结果的运算符。有三个二元运算符:分别为 AND,OR 和异或运算符,还有一个一元运算符 NOT。二元逻辑运算的基本形式
a1 op a2
一元逻辑运算的基本形式为
op a1
a1 和 a2代表表达式或变量,op 代表逻辑运算符,如表2所示。如果 l 1 和 l 2 的逻辑运算关系为 true,那么运算将会返回值 1,否则将会产生 0。
表2 逻辑运算符
![080fd7a531f7484685e8026ea76a4e60.png](https://img-blog.csdnimg.cn/080fd7a531f7484685e8026ea76a4e60.png)
运算的结果总结在表3 中,它向我们展示每一种运算所有可能的结果。如果一个数的值不为 0,那么 MATLAB 将把看作 true,如果它为 0,则其为 false。所以~5 的结果为 0,~0 的结果为 1。
表3 逻辑真值表
![dcaaff9dee094bd49e477894941a024a.png](https://img-blog.csdnimg.cn/dcaaff9dee094bd49e477894941a024a.png)
在运算的顺序中,逻辑运算在所有的数学运算和关系运算之后进行。
表达式中的运算顺序如下:
1.所有的数学运算按照前面描述的顺序的进行。
2.从左向右依次进行关系运算
3.执行所有~运算
4.从左向右依次进行&运算
5.从左向右依次进行|运算和数学运算一样,括号能够改变括号的默认顺序。
下面是关于逻辑运算的一些例子。
例 1
假设下面有三个变量被初始和一些表达式及其运算结果。
value1 = 1value2 = 0value3 = -10
![9c02163eecbc478e8c1af7f3bf959544.png](https://img-blog.csdnimg.cn/9c02163eecbc478e8c1af7f3bf959544.png)
因为~运算在其它的逻辑运算之前进行,那么(f)中的括号是必须的。如果去掉括号的话,(f)表达式将等价于(~value1)&value3。
MATLAB 中有大量的逻辑函数,在条件满足时,函数返回 1。条件不满足时,返回0。这些函数和逻辑运算与关系联合在组成选择结构和循环结构。表 4列出了一系列的逻辑函数。
表 4 MATLAB 逻辑函数
![54261cd6dba940248f603475b674ece4.png](https://img-blog.csdnimg.cn/54261cd6dba940248f603475b674ece4.png)