|
|
教学辅导
第2讲 关系和逻辑运算
传统的数学运算,MATLAB支持关系和逻辑运算。这些操作符和函数的目的是提供求解真假命题的答案。一个重要的应用是控制基于真假命题的一系列MATLAB命令(通常在M文件中)的流程,或执行次序。
作为所有关系和逻辑表达式的输入,MATLAB把任何非零数值当作真,把零当作假。所有关系和逻辑表达式的输出,对于真,输出为1;对于假,输出为零。
2.1 关系操作符
MATLAB关系操作符如下表:
关系操作符 说明 备 注
< 小于
< = 小于或等于 <键和=键的组合
> 大于
> = 大于或等于 >键和=键的组合
= = 等于 两个=键的组合
~ = 不等于 ~键和=键的组合
MATLAB关系操作符能用来比较两个同样大小的数组,或用来比较一个数组和一个标量。在后一种情况,标量和数组中的每一个元素相比较,结果与数组大小一样。
例:
"A=1:9, B=9-A
tf =0 0 0 0 1 1 1 1 1
找出A中大于4的元素。0出现在A<=4的地方,1出现在A>4的地方。
"tf=(A= =B)
tf =0 0 0 0 0 0 0 0 0
找出A中的元素等于B中的元素。注意,=和= =意味着两种不同的事:==比较两个变量,当它们相等时返回1,当它们不相等时返回0;在另一方面,=被用来将运算的结果赋给一个变量。
"tf=B-(A>2)
tf =8 7 5 4 3 2 1 0 -1
找出A>2,并从B中减去所求得的结果向量。这个例子说明,由于逻辑运算的输出是1和0的数组,它们也能用在数学运算中。
"B=B+(B==0)*eps
Columns 8 through 9
1.0000 0.0000
这表明如何用特殊的MATLAB数eps来代替在一个数组中的零元素,eps近似为2.2e-16。这种特殊的表达式在避免被0除时是很有用的。
"x=(-3:3)/3
x=-1.0000 -0.6667 -0.3333 0 0.3333 0.6667 1.0000
"sin(x)./x
Warning: Divide by zero
ans =0.8415 0.9276 0.9816 NaN 0.9816 0.9276 0.8415
由于第四个数是0 ,计算sin(x)/x时给了一个警告。因sin(0)/0没定义,在该处MATLAB结果返回NaN。用eps替代0以后再试,
"x=x+(x==0)*eps;
"sin(x)./x
ans=0.8415 0.9276 0.9816 1.0000 0.9816 0.9276 0.8415
现在sin(x)/x在x=0处给出了正确的极限。
2.2 逻辑操作符
逻辑操作符提供了一种组合或否定关系表达式。如下表:
逻辑操作符 说明
& 与
| 或
~ 非
例:
" A=1:9;B=9-A;
"tf=A>4
tf =0 0 0 0 1 1 1 1 1
找出A大于4。
"tf=~(A>4)
tf=1 1 1 1 0 0 0 0 0
对上面的结果取非,也就是1替换0,0替换1。
"tf=(A>2)&(A<6)
tf =0 0 1 1 1 0 0 0 0
在A大于2'与'A小于6处返回1。
2.3 关系与逻辑函数
除上面关系与逻辑操作符外,MATLAB还有如下的关系与逻辑函数:
其 他 关 系 与 逻 辑 函 数
xor(x,y) 异或运算。x或y非零(真)返回1,x和y都是零(假)或都是非零(真)返回0。
any(x) 如果在一个向量x中,任何元素是非零,返回1;矩阵x中的每一列有非零元素,返回1。
all(x) 如果在一个向量x中,所有元素非零,返回1;矩阵x中的每一列所有元素非零,返回1。
和如下的测试特殊值或条件存在的函数,返回逻辑值:
测 试 函 数
finite 元素有限,返回真值。
isempty 参量为空,返回真值。
isglobal 参量是一个全局变量,返回真值。
ishold 当前绘图保持状态是'ON',返回真值。
isieee 计算机执行IEEE算术运算,返回真值。
isinf 元素无穷大,返回真值。
isletter 元素为字母,返回真值。
isnan 元素为不定值,返回真值。
isreal 参量无虚部,返回真值。
isspace 元素为空格字符,返回真值。
isstr 参量为一个字符串,返回真值。
isstudent MATLAB为学生版,返回真值。
isunix 计算机为UNIX系统,返回真值。
isvms 计算机为VMS系统,返回真值。
2.4 NaNs和空矩阵
NaNs和空矩阵([ ])要求在MATLAB中作特殊处理,特别是用在逻辑或关系表达式里。根据IEEE数学标准,对NaNs的几乎所有运算都得出NaNs。
NaNs和空矩阵的特性概括如下表:
NaNs 和 空 矩 阵
数据 a=[1 2 nan inf nan]
表达式 结果
2*a [2 4 NaN NaN]
(a= =nan) [0 0 0 0 0]
(a~ =nan) [1 1 1 1 1]
isnan(a) [0 0 1 0 1]
y=find(a= =0) y=[ ]
isempty(y) 1
(y= =0) 0
find(y= =0) [ ]
(y~ =0) 1
j=find(y~ =0) j=1
y(j) Error! y(j) does not exist.
|