逻辑类型
Matlab中存储逻辑变量的类型有两种,为true和false,分别由1和0来表示。
函数logical() 可以将任何非零的数值转化为true,将数值0转化为false.
a=3;b=0;
c=logical(a)
d=logical(b)
也就是说只有数值为0时的逻辑值是false,为0
只要数值不为0时的逻辑值就是true,为1
如:
3<=5为true
3=3为true
3不等于3为false
符号运算符和逻辑运算符
常见符号运算符:
a+b %加
a-b %减
a*b %乘
a\b或a/b %除
a^b %幂
abs() %绝对值
= %等于
e、E、D %表示1*10^的几次方
exp %表示以e为底的指数函数
常见逻辑运算符:
== %等于
< %小于
> %大于
>= %大于等于
<= %小于等于
~= %不等于
&& %与
|| %或
~ %非
nand %与非
nor %或非
xor %异或
xnor %同或
注:a/b表示a ÷ b ,a\b 表示b÷ a
=是用来赋值的 如:a=b指的是把b的值赋给a
是用来对比的 如:a==b指的是判断a和b的值是否相等
如下a和b均为char变量,那么进行运算时,会自动转化为实数
输出的logical为0,这是因为将char变量的a和b转化为实数时分别为97和98
因而他们的逻辑关系应为小于,如下:
短路运算
特别的,在执行或运算时,只需要有一个满足条件,后面的就不会再继续执行,其逻辑值就为1.
比如:在未定义a的情况下,执行逻辑上1=1或a小于3时,以下为两种情况:
1、 1==1 || a<3
由于 1= =1是成立的,因而或指令就不再执行后面的a<3,所以输出逻辑值为1
2、a<3 || 1==1
按照顺序依次执行,首先执行a<3,由于a未定义,所以输出结果便如上。
运算符的优先级
无论是符号运算符还是逻辑运算符都是有优先级的
优先级如下表:
此外逻辑运算输出的值只有两个,一个是1,一个是0。这就一些手写的数学运算无法正常使用。比如要表示:10>5>2时:
显示的是逻辑0,也就是false。这个式子为啥是false呢,原因就是逻辑运算输出的值只有两个,一个是1,一个是0。按照顺序首先执行10>5,为true,因而输出值为1,之后再执行第二段的逻辑运算便是1>2了。所以输出值变成了false为0.
因而要想表达10>5>2,应该为10>5 && 5>2.
如下:
舍入误差
浮点数的运算经常设计到舍入误差如:
对于1*10几次方的运算有四种运算形式: E或e或D或^
如:
1E-10+1E0-1E0==1E-10
1e-10+1e0-1e0==1e-10
1D-10+1D0-1D0==1D-10
1*10^(-10)+1*10^(0)-1*10^(0)==1*10^(-10)
1E-10就是110^(-10)
e、E、D都代表110的几次方
同时运算该对比逻辑后,会发现其逻辑值为false为0.这是由于发生了舍入误差。如下:其逻辑为0
将他们分开来一步步计算的话便可以发现端倪,其中有微小的误差:
这些误差导致了其对比逻辑为0.因而一般不会用“==”来对比两个浮点数的大小。
经常用的是差的绝对值,再设一个阈值: