上QQ阅读APP看书,第一时间看更新
2.4.4 数组的关系与逻辑运算
在2.1.5节介绍MATLAB的运算符时已经指出,关系与逻辑运算尽管可以将其视为矩阵的运算,但认真分析关系与逻辑运算的规则,不难发现,它们更多地体现了数组运算的特征,譬如,两个矩阵的关系逻辑运算是元素一对一的关系比较或逻辑运算,这一点与数组的各种代数运算法则是一脉相承的。又如,参与关系与逻辑运算的两矩阵必须同阶(行、列数分别相同)。所以本书将关系与逻辑运算放到数组运算中,但也不排斥将其视为矩阵的运算。并且不论是视为数组运算,还是矩阵运算,它们的运算结果将根据应用场合的不同,既可视为数组,也可视为矩阵。
1.数组的关系运算
数组的关系运算主要是由表2-4所列关系运算符来实现。表中一共列出了6种关系运算并且说明了相关的运算法则。现仅举一例加以说明。
【例2.44】 找出6阶魔方矩阵中所有能被3整除的元素,并在其位置上标1。
>> A=magic(6) A = 35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 34 12 14 16 4 36 29 13 18 11 >> P=mod(A,3)==0 P = 0 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 0 0 1 0
本例中,mod(A, B)是一个求余函数,用于求A除以B的余数。若整除,其余数为0,那么,mod(A, B)==0的结果就为1,否则为0。矩阵P正反映了这一结果。
2.数组的逻辑运算
数组的逻辑运算一共有6种,但表2-5中只给出了5个运算符,因异或运算没有运算符只有运算函数xor( )。另外,与、或、非3种运算符也有各自对应的函数,它们分别是and( )、or( )、not( )。
【例2.45】 数组的逻辑运算示例。
>> A=pascal(3), B=eye(3) A = 1 1 1 1 2 3 1 3 6 B = 1 0 0 0 1 0 0 0 1 >> A&B ans = 1 0 0 0 1 0 0 0 1 >> A|B ans = 1 1 1 1 1 1 1 1 1 >> ~B ans = 0 1 1 1 0 1 1 1 0 >> xor(A, B) ans = 0 1 1 1 0 1 1 1 0 >> a=0; b=1; >> a&&b ans = 0 >> a=1; b=0; >> a||b ans = 1
尽管通过例题看不到先决与和先决或的执行过程,但从执行结果中至少看出这两种运算符在MATLAB中是有定义的。
3.与逻辑运算相关的函数
MATLAB除定义了自己的关系和逻辑运算之外,还设计了一组相关的函数。出于判断的目的,这些函数可能经常会被采用,所以,表2-12列出了这些函数。
表2-12 常用的逻辑运算函数
【例2.46】 常用逻辑运算函数举例。
>> A=[1 2 3;0 4 5;8 9 0] A = 1 2 3 0 4 5 8 9 0 >> all(A,1) ans = 0 1 0 >> all(A,2) ans = 1 0 0 >> B=1:4 B = 1 2 3 4 >> any(B) ans = 1 >> any(B,1) ans = 1 1 1 1 >> any(B,2) ans = 1 >> isnan(A) ans = 0 0 0 0 0 0 0 0 0 >> isnumeric(A) ans = 1