3.3.1. Применение операций отношения и логических операций к массивам.
Подчеркнем, что рассмотренные ранее для скаляров операции отношения и логические операции применительно к массивам выполняются поэлементно, в связи с чем размеры обоих операндов должны быть одинаковы. Так, например, будем иметь (в режиме командной строки):
Одномерные массивы
>> t=~[-2]
t =
0
>> if (-2), u=cos(pi/4), end
u =
0.7071
>> if (0), u=cos(pi/4), end
>> a=[0 5 9 -1]
a =
0 5 9 -1
>> b=[4 -2 5 10]
b =
4 -2 5 10
>> t=~a
t =
1 0 0 0
>> t=~b
t =
0 0 0 0
>> t=a>=b
t =
0 1 1 0
>> t=any(a)
t =
1
>> t=all(a)
t =
0
>> t=any(b)
t =
1
>> t=all(b)
t =
1
>>
Двумерные массивы
>> A=[1 1 1; 2 2 2; 4 4 4] A = 1 1 1 2 2 2 4 4 4 >> B=[0 0 0; 9 9 9; 2 3 4] B = 0 0 0 9 9 9 2 3 4 >> A<=B ans = 0 0 0 1 1 1 0 0 1 |
Анализ результата операции показывает, что каждый нуль означает «ложь» для данной позиции внутри матриц, а единица – «истину». Эта матрица показывает (своими единичными элементами), на каких позициях элементы матрицы A не превосходят соответствующие элементы матрицы B.
Следует отметить еще пару логических функций – all и any. Функция all в случае векторов возвращает единицу («истину»), если все элементы вектора не равны нулю («истинны») и возвращает нуль, если хотя бы один элемент вектора нулевой. Функция any действует противоположным образом. В случае же матриц обе эти функции работают с их столбцами, возвращая для каждого столбца результат по описанной схеме, например:
>> A=[1 1 1; 2 2 2; 4 4 4] A = 1 1 1 2 2 2 4 4 4 >> B=[0 0 0; 9 9 9; 2 3 4] B = 0 0 0 9 9 9 2 3 4
>> all(A) ans = 1 1 1 >> all(B) ans = 0 0 0 >> any(A) ans = 1 1 1 >> any(B) ans = 1 1 1 |
В том особом случае, когда один из операндов скаляр, производится его предварительно расширение до массива того же размера, смысл которого уже пояснялся в таблице 3.1 (иными словами, скаляр сравнивается с каждым из элементов массива-операнда, а результатом является массив из нулей и единиц того же размера, что и массив-операнд; принцип заполнения массива-результата следующий: если результат сравнения скалярного операнда и элемента массива-операнда истинен, в соответствующем месте массива-результата стоит единица, а в противном случае – нуль). Так, например, будем иметь (в режиме командной строки):
>> A=[1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> x=5 x = 5 >> A<=x ans = 1 1 1 1 1 0 0 0 0 |
Работа логической функции «Исключающее «или» в случае, если операндами являются вещественные скаляры. Функция xor работает также и с массивами одинаковых размеров, поэлементно реализуя операцию «Исключающее ИЛИ». Напомним, что каждый элемент трактуется как истинный, если он не равен нулю и как ложный в случае его равенства нулю. Продемонстрируем результат работы функции xor над некоторыми заданными матрицами A и B, рассмотренными в предпоследнем примере:
>> A=[1 1 1; 2 2 2; 4 4 4] A = 1 1 1 2 2 2 4 4 4 >> B=[0 0 0; 9 9 9; 2 3 4] B = 0 0 0 9 9 9 2 3 4
>> xor(A,B) ans = 1 1 1 0 0 0 0 0 0 |
