Операции отношения и логические операции над числами

В первой части настоящей главы были рассмотрены арифметические операции над операндами типа double. Вместе с тем, помимо арифметических операций для операндов данного типа определены логические операции и операции отношения.

Рис. 2.12.20. Изображение траектории движения точки на плоскости.

Рис. 2.12.21. Изображение траектории движения точки в пространстве.

Операции отношения.

Операции отношения сравнивают между собой два операнда по величине. Способы записи этих операций представлены в таблице 2.13.1.

В случае истинности операции отношения ее величина (т.е. результат вычисления соответствующего выражения) равна 1, а в противоположном случае – 0. Приведем ниже пример вычислений в командном окне:

>> x=2; y=4; z=8;

>> x<y

ans =

>> x>y

ans =

>> y~=z

ans =

>> y==z

ans =

>> (x<y)+(y<=z)

ans =

Значение выражения x<y здесь равно единице (истина) в силу того, что величина переменной x в самом деле меньше величины переменной y. По этой же причине значение противоположного по смыслу выражения (x>y) равно нулю (ложь). Выражение y~=z является истинным, так как значение переменной y равное 4, не равно значению переменной z, равному 8. Последующее выражение y==z не является истинным, вследствие чего его значение равно 0. Далее, в силу истинности выражений x<y и y<=z (т.е. равенства единице их значений), получаем, что сумма значений этих выражений оказывается равной двум.

Операции отношения имеют более низкий приоритет по сравнению с арифметическими операциями, поэтому при вычислении последнего выражения в приведенном выше примере возникла необходимость заключения в скобки операций отношения x<y и y<=z. Исключительно важно не забывать про данное правило, так как отсутствие круглых скобок может привести к изменению результата, например:

>> a=1; b=2; c=4;

>> (b>a)+c

ans =

>> b>a+c

ans =

Функции, соответствующие операциям отношения (функции отношения), приведены в таблице 2.13.2. Соответствие функций операторам и ко-

Таблица 2.13.1. Обозначение операций сравнения.

Операция Обозначение в системе MATLAB Справочно – обозначение в языке программирования FORTRAN (стандарт Fortran 90 и позднее).
Меньше < <
Меньше или равно <= <=
Больше > >
Больше или равно >= >=
Равно == ==
Не равно ~= /=

Таблица 2.13.2. Функции, соответствующие операциям отношения.

Операция Функция в системе MATLAB Пример
Меньше lt lt(x,y)
Меньше или равно le le(x,y)
Больше gt gt(x,y)
Больше или равно ge ge(x,y)
Равно eq eq(x,y)
Не равно ne ne(x,y)

мандам в системе MATLAB является одним из основных положений программирования, позволяющим одновременно использовать элементы как операторного, так и функционального программирования.

Логические операции.

Логические операции над вещественными числами (логические связки) обозначаются знаками, представленными в таблице 2.13.3.

Представленные в таблице 2.13.3 логические операторы предназначены для выполнения поэлементных логических операций над массивами одинаковых размеров. Заметим, что первые две операции, приведенные в таблице 2.13.2, являются двухоперандными (бинарными), а последняя операция является однооперандной (унарной). Соответственно знак ~ ставится перед операндом, а знаки & и | ставятся между операндами.

Логические операции трактуют свои операнды как «истинные» (не равные нулю) и «ложные» (равные нулю). Если оба операнда операции «Логическое И» истины (не равны нулю), то результат этой операции равен 1 («истина»), во всех же остальных случаях операция «Логическое И» возвращает значение 0 (ложь). Операция «Логическое ИЛИ» возвращает 0 (ложь) только лишь в случае, когда являются ложными (равными нулю) оба операнда). Операция «Логическое НЕ» инвертирует ложь на истину и наоборот, т.е. если ее операндом является ненулевое число, то эта операция возвращает 0, ну а если операнд нулевой, то тогда значением рассматриваемой операции будет единица.

Таблица 2.13.3. Обозначение логических операций (логических связок).

Операция Обозначение в системе MATLAB (логические операторы) Справочно – обозначение в языке программирования FORTRAN (стандарт Fortran 90 и позднее).
Логическое И & .and.
Логическое ИЛИ | .or.
Логическое НЕ ~ .not.

Таблица 2.13.4. Функции, соответствующие логическим операциям.

Операция Функция в системе MATLAB
Логическое И and
Логическое ИЛИ or
Логическое НЕ not
Исключающее ИЛИ xor

Таблица 2.13.5. Работа логических операторов и функций.

x y x&y and(x,y) x|y or(x,y) ~x (not x) xor(x,y)

Функции, соответствующие операциям сравнения и логическим операторам, приведены в таблице 2.13.4. Соответствие функций операторам и командам в системе MATLAB является одним из основных положений программирования, позволяющим одновременно использовать элементы как операторного, так и функционального программирования.

Более наглядное представление о работе логических операторов дает таблица 2.13.5, где в качестве операндов используются значения 0 и 1.

Помимо перечисленных в таблице 2.13.4, система MATLAB включает следующие функции:

any – возвращает 1, если в заданном векторе есть хотя бы один ненулевой элемент; если аргументом является матрица, результат выдается в виде вектора, элементы которого соответствуют столбцам заданной матрицы;

all – возвращает 1, если среди элементов исходного вектора нет нулевых; если аргументом является матрица, результат выдается в виде вектора, элементы которого соответствуют столбцам заданной матрицы.

Приведем пример:

>> A=[1 0 4; 5 0 0; 6 0 1]

A =

1 0 4

5 0 0

6 0 1

>> any(A)

ans =

1 0 1

>> all(A)

ans =

1 0 0

Приоритет операций.

Логические операции (кроме операции «Логическое НЕ», называемой также «операция отрицания») имеют самый низкий приоритет. Более подробные сведения о приоритете операций (в порядке убывания) в системе MATLAB приведена ниже:

1) Круглые скобки ( );

2) Транспонирование (.’), транспонирование с комплексным сопряжением (’), возведение в степень (^), поэлементное возведение в степень (.^);

3) Унарный плюс (+), унарный минус (-), логическое отрицание (~);

4) Умножение и деление (.*, ./, .\, *, /, \);

5) Сложение и вычитание (+, -);

6) Оператор сечения массива (:);

7) Операции отношения (<, <=, >, >=, ==, ~=);

8) Логическое И (&);

9) Логическое ИЛИ (|);

Отметим, что в одном выражении можно использовать все вышеперечисленные операции (арифметические, логические, операции сравнения), при этом последовательность выполнения операций определяется их расположением внутри выражения, их приоритетом и наличием круглых скобок (круглые скобки используются, в частности, для изменения приоритета операций в математических выражениях, причем степень вложения скобок не ограничивается).

Арифметические операции с комплексными числами реализуются в системе MATLAB точно также как и с вещественными числами (в соответствии с известными математическими правилами). Тоже самом относится и к операциям отношения «равно» и «не равно». Вместе с тем, как известно, операции сравнения комплексных чисел в математике не определены. Тем не менее, в системе MATLAB соответствующие операции с комплексными числами проводятся, но их значения определяются действительными частями рассматриваемых операндов:

>> x=1+2i; y=5i; z=7i;

>> x>y

ans =

>> y<=z

ans =

>> y>=z

ans =

Если один из операндов является скаляром, а другой – массивом, то происходит сравнение всех элементов второго операнда-массива со значением первого операнда-скаляра:

>> M=[-4 1; 0 2]

M =

-4 1

0 2

>> M>0

ans =

0 1

0 1

Таким образом, спектр применения операторов отношения в системе MATLAB шире, чем в традиционных языках программирования в силу того, что операндами являются не только числа (скаляры), но и векторы, матрицы, массивы. Операнды также могут быть символьными выражениями.