Некоторые специфика выполнения арифметических и логических операций.
При составлении арифметических выражений система MATLAB допускает использование традиционных знаков арифметических операций и символов специальных операций, представленных в таблице 3.1. Таблица 3.1. Знаки арифметических операций и символы специальных операций в системе MATLAB.
Вместе с тем, арифметические операции реализованы в MATLAB с некоторыми характерными особенностями. Наиболее привычным с этих позиций является сложение скалярных величин (т.е. массивов размерности 1х1), аналогичное соответствующему действию в большинстве языков программирования. Если обоими операндами являются массивы одинаковой размерности, то осуществляется покомпонентное сложение элементов с одинаковыми индексами. Если же к массиву любой размерности добавляется скалярная величина, то она добавляется к каждому элементу массива (т.е. добавляемая скалярная величина, по сути, преобразуется в массив той же размерности, что и первое слагаемое (это своего рода аналог приведения типов в выражениях с «разнокалиберными» операндами) и каждый элемент такого сформированного массива равен исходной скалярной величине). Тем не менее, всякая попытка сложить массивы разной размерности (за исключением случая, когда один из операндов – массив размерности 1х1) приводит к соответствующему сообщению об ошибке. Аналогичное приведение типов выполняется для большинства операций, когда одним из операндов является массив, а вторым – скаляр.
Применение операций отношения и логических операций к массивам. Подчеркнем, что рассмотренные ранее для скаляров операции отношения и логические операции применительно к массивам выполняются поэлементно, в связи с чем размеры обоих операндов должны быть одинаковы. Так, например, будем иметь (в режиме командной строки): Одномерные массивы
>> t=~[-2] t = >> 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 = >> t=all(a) t = >> t=any(b) t = >> t=all(b) t = >>
Двумерные массивы
Анализ результата операции показывает, что каждый нуль означает «ложь» для данной позиции внутри матриц, а единица – «истину». Эта матрица показывает (своими единичными элементами), на каких позициях элементы матрицы A не превосходят соответствующие элементы матрицы B. Следует отметить еще пару логических функций – all и any. Функция all в случае векторов возвращает единицу («истину»), если все элементы вектора не равны нулю («истинны») и возвращает нуль, если хотя бы один элемент вектора нулевой. Функция any действует противоположным образом. В случае же матриц обе эти функции работают с их столбцами, возвращая для каждого столбца результат по описанной схеме, например:
В том особом случае, когда один из операндов скаляр, производится его предварительно расширение до массива того же размера, смысл которого уже пояснялся в таблице 3.1 (иными словами, скаляр сравнивается с каждым из элементов массива-операнда, а результатом является массив из нулей и единиц того же размера, что и массив-операнд; принцип заполнения массива-результата следующий: если результат сравнения скалярного операнда и элемента массива-операнда истинен, в соответствующем месте массива-результата стоит единица, а в противном случае – нуль). Так, например, будем иметь (в режиме командной строки):
Работа логической функции «Исключающее «или» в случае, если операндами являются вещественные скаляры. Функция xor работает также и с массивами одинаковых размеров, поэлементно реализуя операцию «Исключающее ИЛИ». Напомним, что каждый элемент трактуется как истинный, если он не равен нулю и как ложный в случае его равенства нулю. Продемонстрируем результат работы функции xor над некоторыми заданными матрицами A и B, рассмотренными в предпоследнем примере:
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|