Функция 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 =
Команды управления данными (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 является матрицей. Тогда выражение
If X
Операторы
End
эквивалентно следующему
If all(X(:))
Операторы
End
При использовании с if , команды elseиelseifдают следующие дополнительные возможно-сти создания программ:
• Команда elseне имеет логического условия. Операторы, связанные с данной командой вы-
полняются, если предшествующее условие команды if (и, возможно, elseif) является лож-
ным.
•Командаelseif имеет логическое условие, которое оценивается, если предшествующее ус-
ловие команды if (и, возможно, elseif), является ложным. Если логическое условие данной
команды elseifявляется истинным, то выполняются соответствующие операторы, следую-
щие за данной командой. Вы можете иметь произвольное число команд elseifв пределах
одного блока с if.
if n < 0 %Если nотрицательно, дать сообщение об ошибке
disp('Input must be positive');
elseif rem (n, 2) == 0 %Еслиnположительно и четно, разделить на 2.
A = n/2;
Else
A = (n+1) /2; %Если nположительнои нечетно, прибавить 1 и