Материал: MATLAB. Довідник для користувача

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

.

.

otherwise

операторы % Выполняются если выражение не соответствует не одному % значению, связанному с командами case

end

Данный блок состоит из:

Слова switch за которым следует выражение которое нужно оценить..

Любого числа блоков с командами case. Эти блоки состоят из слова case, за которым на той же строке следует возможное значение выражения за словомswitch. Последующие строки содержат операторы, которые необходимо выполнить при указанном значении выражения в первой строке за словом switch. Эти строки могут быть любыми допустимыми выражениями, включая другие циклы switch. Выполнение группы операторов, связанных с данной командой case прекращается, когда MATLAB встречает следующую команду case или слово otherwise. Отметим, что всегда выполняется только первый подходящий блок с case.

Не обязательной группы операторов, начинающихся словом otherwise; эта группа обрабатывается, если значение выражения не было перехвачено каким-либо предшествующим блоком с case. Обработка группы операторов за словом otherwise прекращается на команде end.

Заключительной команды end.

Блок с командой switch работает путем сравнения входного выражения, которе может быть численным скаляром или строкой символов, с каждым значением ключей case. В случае численных выражений выполняется какой-либо (первый) блок, если справедливо логическое равенство значение == выражение. При выражениях в виде строки символов, блок выполняется, если истинно выражение strcmp(значение,выражение) (команда strcmp осуществляет логическое сравнение строк символов) .

Приведенный ниже код дает простой пример использования командыswitch. Он проверяет переменную input_num и сравнивает ее с заданными числами. Если значения input_num равны –1, 0, или 1, команды case производят вывод значений на экран в виде текста. Если переменная input_num не равна не одному из указанных значений, выполнение переходит к строке otherwise и программа выводит на экран текст 'other value' другое значение»).

switch input_num case –1

disp('negative one'); case 0

disp('zero'); case 1

disp('positive one'); otherwise

disp('other value');

end

Внимание ! В отличие от соответствующих операторов языкаC, оператор switch в MATLAB-е «доходит» только до первого оператора case, который удовлетворяет заданному входному выражению; остальные операторы case при этом не проверяются.

Команда switch позволяет оперировать с несколькими условиями при одном операторе case, путем заключения данных условий в фигурные скобки, то есть при их записи в виде массива ячеек. Соответствующий пример приводится ниже

116

switch var case 1

disp('1') case {2,3,4}

disp('2 or 3 or 4') case 5

disp('5') otherwise

disp('something else')

end

Команда while

Циклы с командой while обрабатывают оператор или группу операторов, находящихся в теле цикла, до тех пор, пока истинно проверяемой логическое условие при данной команде. Иными словами, операторы внутри цикла могут выполнться любое неопределенное заранее число раз. Ее синтаксис в общем случае имеет вид

while expression statements

end

Если логическое выражение expression имеет матричный вид, то для продолжения выполнения цикла все его элементы должны быть истинными, то есть равны логической единице. Чтобы привести матричное условие к скалярному, следует воспользоваться функциями all и any. Например, следующий цикл находит первое целое числоn, для которого факториал n! является 100-значным числом

n = 1;

while prod(1:n) < 1e100 n = n + 1;

end

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

Команда while и пустые массивы

Если условие при while сводится к пустому массиву, то оно соответствует ложному выражению, то есть последовательность команд

while A S1;

end

никогда не выполнит оператор S1 если A есть пустой массив.

Команда for

Цикл с командой for обрабатывает оператор или группу опреаторов заранее заданное число раз. Ее синтаксис имеет вид

117

for index = start:increment:end statements

end

где index является изменяемым целочисленным индексом с начальным и конечным значениями start и end и приращением increment. По умолчанию, приращение равно 1, но вы можете задать любое приращение, включая и отрицательное. При положительных индексах, выполнение прекращается когда значение индекса превышает конечное значениеend; при отрицательных приращениях выполнение прекращается когда индекс становится меньше конечного значения.

Например, следующий цикл выполняется пять раз.

for i = 2:6

x(i) = 2*x (i–1); end

Вы можете использовать вложенные циклы с комндой for:

for i = 1:m for j = 1:n

A (i, j) = 1/(i + j – 1) ; end

end

Внимание ! Вы можете зачастую ускорить выполнение кодов вMATLAB-е путем замены циклов с for и while векторизованными кодами (см. ниже).

Использование в качестве индексов массивов

Индексы команды for могут быть массивом значений. Например, рассмотрим массив А размера m х n . Выражение

for i = A statements

end

приравнивает индекс I вектору A(: , k). При первой итерации значение k равно 1; при второй итерации k равно 2 , и так до тех пор, пока k не становится равным n. Иными словами, цикл повторяется n раз, где n есть число столбцов вA. При этом, при каждой итерации индекс i является вектром, содержащим один из столбцов матрицы A.

Команда continue

Команда continue передает управление следующей итерации в циклахfor или while, что приводит к перескакиванию через все оставшиеся операторы в теле цикла. В случае вложенных циклов, команда continue передает управление к следующей итерации внешних по отношению к данному циклу команд for или while , то есть пропускаются только оставшиеся операторы данного внутреннего цикла. Для применения данной команды нужно сформировать соответствующее логическое условие.

118

Команда break

Команда break прекращает выполнение циклов, образованных командами for или while. Когда в теле цикла встречается данная команда, дальнейшее выполнение происходит начиная со следующей строки вне данного цикла. Во вложенных циклах, команда break приводит к выходу только из внутреннего цикла.

Команды try ... catch

Общая форма последовательности команд try ... catch имеет вид

try statement,

..., statement,

catch, statement,

..., statement,

end

В данной последовательности выполняются операторы между командамиtry и catch до тех пор, пока не происходи какая-либо ошибка вычислений. Тогда управление передается («перехватывается») последовательносью операторов между командамиcatch и end. Для того чтобы узнать причину, приведшую к ошибке, можно воспользоваться комндой lasterr (последняя ошибка). Если ошибка случается между командами catch и end, то MATLAB прекращает вычисления, если только между предыдущими командами catch и end не установлена другая последовательность команд try ... catch.

Команда return

Команда return прекращает выполнение текущей последвательности команд и возвращает управление в вызывающую функцию(то есть «родительскую» функцию, из которой была вызвана текущая функция) или же возвращает управление к клавиатуре. Команда return также приводит к окончанию режимаkeyboard (последняя команда, когда встречается в теле программы, передает управление клавиатуре; она часто используется при отладке программы). При обычных условиях работы вызванная функция передает управление в вызывающую функцию когда первая выполнена полностью, то есть до конца. Команда return может быть включена в тело вызываемой функции для того чтобы прекратить ее исполнение при выполнении определенных условий.

Подфункции

М-функции могут содержать коды более чем одной функции. Первая функция в файле является главной функцией (primary function), которая имеет имя самого М-файла. Дополнительные функции в пределах данного файла являются подфункциями (subfunctions), которые «видны» (то есть могут быть вызваны) только для главной функции или других подфункций того же файла. Каждая подфункция начинается со своей линии определения. Все подфункции следуют непосредственно друг за другом. Порядок следования различных подфункций не имеет никакого значения, при этом главная функция должна быть обязательно записана первой. Например,

119

function [avg,med] = newstats(u) % Главная функция

%NEWSTATS Находит среднее значение и медиану при помощи внутренних

%подфункций.

n = length(u); avg = mean(u,n);

med = median(u,n);

function a = mean(v,n) % Подфункция

% Находит среднее значение. a = sum(v)/n;

function m = median(v,n) % Подфункция

% Находит медиану. w = sort(v);

if rem(n,2) == 1

m = w((n+1)/2); else

m = (w(n/2)+w(n/2+1))/2; end

Подфункции mean и median вычисляют среднее значение и медиану входных данных. Главная функция newstats находит длину входного вектора данных и вызывает подфункции, передавая им данные длины n. Функции в пределах одного и того же файла не имеют общего доступа к каким-либо переменным, если только вы не объявите эти переменные глобальными или же не передадите их в виде аргументов в соответствующие подфункции, как это реализовано в приведенном выше примере. Кроме того, все средства помощи («help») имеют доступ только к главной функции в М-файле. Когда вы вызываете какую-либо функцию из М-файла, MATLAB прежде всего проверяет, не является ли данная функция подфункцией. Затем проверяется, не является ли данная функция частной функцией (private function), описанной в следующем разделе, и далее ищутся стандартные М-файлы на путях доступа MATLAB . Поскольку подфункции проверяются первыми, вы можете «подавить» вызов любого существующего М-файла путем применения подфункций с тем же именем, как, например, мы имели в примере с функциейmean. Вместе с тем, в пределах одного М-файла все подфункции должны иметь разные индивидуальные имена.

Частные функции

Частные функции являются функциями, которые находятся в подкаталоге со специальным именем private (частный). Они видны, то есть могут быть вызваны, только из функций в пределах родительского каталога. Например, допустим, что каталог newmath находится на путях доступа MATLAB-а. Подкаталог в данной директорииnewmath, названный private, содержит только функции, которые могут быть вызваны из каталога newmath. Поскольку частные функции являются невидимыми вне пределов родительского каталога, они могут использовать имена, совпадающие с именами функций в других каталогах. Это свойство бывает полезным, если вы хотите создать свою версию какой-либо конкретной функции, сохраняя в то же время оригинальную функцию в другом каталоге. Так как MATLAB ищет среди частных функций прежде чем перейти к поиску в остальных каталогах, он всегда найдет частную функцию, например с именем test.m, раньше чем любую другую М-функцию, названную тем же именем test.m, но расположенную в других каталогах. Вы можете создавать свои частные директории просто путем создания стандартных подкаталогов, названных private. При этом не следует помещать директории private на ваших путях доступа.

120