Раздел: Документация
0 ... 129 130 131 132 133 134 135 ... 365 они не проверяют значение второго операнда (операция ьб была использована нами в главе б при управлении процессом решения дифференциального уравнения для простой реализации алгоритма файл-функции solproc (см. листинг 6.19)). Проверка на наличие нулевых элементов в векторе осуществляется функцией all. которая возвращает единицу, если среди элементов вектора нет нулей, и ноль в противном случае: » v = [12 0] ,-» q = all(v) q = о Аргументом функции all может быть и матрица. В этом случае all проверяет каждый столбец матрицы на наличие нулей и записывает результат в вектор, каждый элемент которого соответствует столбцу исходной матрицы: » М = [9 3 -1; 0 2 2]; » р = all(M) Р = О11 Исследование на наличие ненулевых элементов производится функцией any, которая возвращает единицу, если во входном векторе есть хотя бы один ненулевой элемент. Функция any, так же как и all, работает с матрицами по столбцам. Некоторые индексные логические матрицы вычисляются по исходной матрице при помощи специальных функций MATLAB, перечисленных ниже. Каждая функция для входной матрицы находит индексную логическую матрицу из нулей и единиц, соответствующую проверяемому условию. П isfinite — единицы соответствуют числам, нули — Inf, NaN. О isinf — единицы соответствуют +inf, -inf, нули —• числам. П isnan — единицы соответствуют NaN, нули — числам. □isprime — единицы соответствуют простым числам, нули — остальным. □isreal— единицы соответствуют вещественным числам, нули-— комплексным. При обработке матричных данных так же оказывается полезной достаточно универсальная функция find и логическое индексирование (применение find и логического индексирования рассмотрено в разд. "Логическое индексирование" главы 2). В приведенных выше примерах программ условия операторов if-eiseif-eise и while содержали логические выражения со скалярными значениями — либо "истина", либо "ложь". Однако в эти конструкции языка программирования MATLAB могут входить выражения с массивами, причем как с числовыми, так и логическими. Формальное правило таково: условие считается выполненным, если результатом выражения является массив, состоящий только из логических единиц или ненулевых элементов. Пустой массив и "ложь" эквивалентны. Приоритет логических и арифметических операций Поскольку логические и арифметические операции могут входить в одно выражение, то возникает вопрос о том, в какой последовательности они выполняются. Например, в выражении а + в."2 > с сначала выполняется поэлементное возведение в степень, затем сложение и, наконец, сравнение значения суммы а + в. Л2 и с. Приоритет операций отражен в следующем списке (в порядке выполнения). 1.Логические операторы: and, or, not, хог (поскольку они являются функциями). 2.Отрицание ~. 3.Транспонирование, возведение в степень (в том числе поэлементное), знак плюс или минус перед числом. 4.Умножение и деление (в том числе поэлементное). 5.Сложение и вычитание. 6.Операции отношения: >, >=, <, <=, ==. 7.Логическое "и" s. 8.Логическое "или" . 9.Логическое "и" &s. 10.Логическое "или" i . Примечание Сначала выполняются операции над аргументами функций and, or, not и хог, например, два выражения: and(A,B)+c и А&в+с не эквивалентны! В более ранних версиях MATLAB операции & и имели одинаковый приоритет, что следует учитывать при переносе приложений, разработанных в старых версиях MATLAB, в новую версию пакета. Для изменения порядка операций следует применять круглые скобки. Они также полезны для придания достаточно длинному выражению легкочитаемого вида. Задания для самостоятельной работы Напишите файл-функцию для решения поставленной задачи. Там, где это возможно, предложите два решения: с использованием конструкций языка программирования и без них, применяя функцию find и др. 1.Вычислить произведение элементов вектора, не превосходящих среднее арифметическое значение его элементов. 2.Подсчитать число нулей и единиц в заданной матрице. 3.Определить количество положительных элементов вектора, расположенных между его максимальным и минимальным элементами. 4.Просуммировать отрицательные элементы матрицы, лежащие ниже хлавной диагонали. 5.Заменить положительные элементы вектора суммой всех его отрицательных элементов. 6.Заполнить квадратную матрицу А , каждый элемент которой определяется следующим образом: а9 = i-j, i>j\ i + j, i = j; i2+j2, <./• 7. Вычислить сумму: Кд)=ЕЕ- 8. Для матрицы А-(яу)размера л на ш найти значение выражения: n m 1=1 j=\ 0 ... 129 130 131 132 133 134 135 ... 365
|