|
Ряд других функций MATLAB-а выполняет логические операции. Например, функция isnan возвращает 1 для NaN; функция isinf возвращает 1 для Inf. Более подробный список можно найти в директории ops.
Логические выражения использующие функцию find
Функция find определяет индексы числового массива, удовлетворяющие заданному логичес-кому условию. Эта функция удобна для создания логических масок (шаблонов) и матриц ин-дексов. В наиболее общей форме, функция find возвращает единственный вектор индексов. Этот вектор может быть использован для индексации массивов любого размера или формы. Например, в приведенном ниже примере функция find позволяет легко заменить все элемен-ты матрицы А больше 8 на число 100:
A = magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
i = find (A > 8);
A(i) = 100
A =
100 2 3 100
5 100 100 8
100 7 6 100
4 100 100 1
Вы можете также использовать функцию find для получения обеих индексов строк и стол-бцов прямоугольных матриц, удовлетворяющих заданному логическому условию (более под-робно эта функция описана в справочниках).
Приоритеты операторов
Вы можете строить выражения, использующие любую комбинацию арифметических и логи-ческих операторов, а также операторов отношения. Уровни приоритетов этих операторов определяют порядок, в котором MATLAB обрабатывает выражение. В пределах каждого уровня приоритета, операторы имеют одинаковый приоритет и оцениваются (обрабатыва-ются) слева направо. Последовательность приоритетов для операторов MATLAB-а приве-дены ниже, упорядоченные в порядке убывания приоритетов, то есть от высшего приоритета к низшему.
- Обычные скобки ().
- Транспонирование (.'), степень (.^), комплексно-сопряженное транспонирование('), степень матрицы(^).
- Унарный плюс (+), унарный минус (-), логическое отрицание (~).
- Умножение (.*), правое деление (./), левое деление(.\), матричное умножение (*), матричное правое деление (/), матричное левое деление (\).
- Сложение (+), вычитание (-).
- Оператор двоеточия (:).
- Меньше чем (<), меньше чем или равно (<=), больше чем (>), больше чем или равно (>=), равно (==), не равно (~=).
- Логическое И (&).
- Логическое ИЛИ (|).
Изменение приоритетов операторов
Имеющаяся последовательность приоритетов может быть изменена путем использования обычных скобок, как это показано в следующем примере.
A = [3 9 5];
B = [2 1 5];
C = A ./ B.^2
C =
0.7500 9.0000 0.2000
C = (A. / B) .^2
C =
2.2500 81.0000 1.0000
Выражения могут также содержать переменные, заданные посредством индексов
b = sqrt (A(2)) + 2*B(1)
b =
7
Команды управления данными (Flow Control)
В MATLAB-е имеются 8 базовых команд для управления потоками данных:
• if, совместно с else и elseif, осуществляет обработку группы выражений, основываясь на
некотором логическом условии.
• switch, совместно с case и otherwise, обрабатывает различные группы выражений, основы-
ваясь на значении некоторого логического условия.
• while осуществляет обработки группы выражений неопределенное число раз, основываясь
на некотором логическом условии.
• for осуществляет обработку группы выражений определенное (заданное) число раз.
• continue передает управление к следующей итерации в циклах for или while , пропуская
все оставшиеся выражения в теле цикла.
• break прекращает обработку выражений и выходит из циклов, созданных командами for
или while.
• try...catch изменяет последовательность выполнения команд, если во время выполнения
программы получено сообщение об ошибке.
• return приводит к прекращению выполнения данной программы и к возврату в вызываю-
щую функцию.
Все конструкции программ, основанные на логических условиях, используют команду end для указания конца соответствующего блока.
Внимание! Во многих случаях вы можете ускорить выполнение программ MATLAB-а, путем замены циклов с командами for и while векторными выражениями (см. ниже).
Команды if, else, and elseif
Команда if оценивает логическое выражение и обрабатывает группу операторов, основыва-ясь на значении указанного выражения. В свое простейшей форме синтаксис команды имеет вид
if (логическое выражение)logical_expression
операторы
end
Если логическое выражение истинно, то есть равно 1, MATLAB выполняет все операторы между строками, содержащими команды if и end . После этого он продолжает выполнять ко-манды. находящиеся за строкой с end. Если логическое выражение ложно, то есть дает логи-ческий 0, MATLAB перескакивает через все выражения между строками с if и end , и про-должает свою работу со строки, следующей за командой end. Например,
if rem (a,2) == 0
disp('a is even')
b = a/2;
end
Данный блок проверяет, является ли входной аргумент четным числом и, если да, то выводит в комндную строку соответствующее сообщение и делить число а пополам. В противном случае, данный блок не выполняется. Между строками с if и end вы можете включить произ-вольное число операторов, содержащих, в свою очередь, любые команды и циклы. Если ло-гическое выражение приводит к нескалярной величине, то для выполнения блока все элемен-ты аргумента должны буть ненулевыми. Например, допустим X является матрицей. Тогда выражение
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35
При использовании материалов активная ссылка на источник обязательна.