Операторы ветвления.
Условный оператор if и оператор переключения switch позволяют создать гибкий разветвляющийся алгоритм, в котором при выполнении определенных условий выполняется соответствующий блок операторов или команд MATLAB. Практически во всех языках программирования имеются аналогичные операторы.
Условный оператор if.
Условный оператор if в общем виде записывается следующим образом:
If Условие
Инструкции_1 elseif Условие
Инструкции_2 else
Инструкции_3
end
Эта конструкция допускает несколько частных вариантов. В простейшем случае
If Условие
Инструкции
end
Лекция 3
пока Условие возвращает логическое значение 1 (то есть «истина»), выполняются Инструкции, составляющие тело структуры if...end. При этом оператор end указывает на конец перечня инструкций. Инструкции в списке разделяются оператором, (запятая) или; (точка с запятой). Если Условие не выполняется (дает логическое значение 0, «ложь»), то Инструкции также не выполняются.
Еще одна конструкция
If Условие
Инструкции_1 else
Инструкции_2
end
выполняет Инструкции_1, если выполняется Условие, или Инструкции_2 в противном случае.
В общем случае применение этих структур достаточно очевидное. Приведем только один общий пример:
function | ifdem(a) | |
% пример | использования структуры if-elseif-else | |
if (a == | 0) | - ноль') |
disp('a | ||
elseif a | == | |
disp('a | - единица') | |
elseif a | >= | |
disp('a | - двойка или больше') | |
else | меньше двух, но не ноль и не единица') | |
disp('a | ||
end |
Следует обратить внимание, что в данном примере мы использовали специальную функцию disp, которая позволяет выводить текстовую информацию.
Оператор switch.
Для осуществления множественного выбора (или ветвления) используется конструкция с переключателем типа switch:
switch Выражение case Значение
Список инструкций
case {Значение1, Значение2, ЗначениеЗ,...} Список инструкций
otherwise,
Список инструкций
end
Каждая ветвь определяется оператором case, переход в нее выполняется тогда, когда ’Выражение’ оператора switch принимает значение, указанное после case, или одно из значений списка case. После выполнения какой-либо из ветвей происходит выход из switch, при этом значения, заданные в других ветвях case, уже не проверяются. Если подходящих значений не нашлось, то выполняется ветвь оператора переключения, соответствующая otherwise.
Лекция 3
Приведем пример:
function switchdem(a)
% пример использования оператора switch switch a
case 3 disp('Март')
case 4 disp('Апрель')
case 5 disp('Май')
case {1, 2, 6, 7, 8, 9, 10, 11, 12} disp('Не весенние месяцы')
otherwise
disp('Ошибка задания')
end
Операторы break, continue и return.
В управляющих структурах, в частности в циклах for и while, часто используются операторы, влияющие на их выполнение. Так, оператор break может использоваться для досрочного прерывания выполнения цикла. Как только он встречается в программе, цикл прерывается.
Оператор continue передает управление в следующую итерацию цикла, пропуская операторы, которые записаны за ним, причем во вложенном цикле он передает управление на следующую итерацию основного цикла.
Оператор return обеспечивает нормальный возврат в вызывающую функцию или в режим работы с клавиатурой.
О рациональной техники программирования в MATLAB.
MATLAB интерпретирует команды, записанные в М-файлах, в машинный код и последовательно выполняет их. Процесс интерпретации занимает много времени в том случае, когда алгоритм обработки большого объема данных содержит циклы, поскольку каждая строка цикла интерпретируется столько раз, сколько выполняется цикл. Следовательно, при разработке приложений MATLAB необходимо свести использование циклов к минимуму. Эффективность приложений также определяется распределением памяти под создаваемые большие массивы.
clear all tic
x=0:2*pi/10000:2*pi; y=exp(-x.^2).*cos(x); toc
clear all tic
for i=1:10001 x(i)=2*pi/10000*(i-1); y(i)=exp(-x(i)^2)*cos(x(i)); end
toc
Работа этой файл-программы состоит из двух частей. Первая часть начинается с вызова функции tic - таймера, затем вычисляются значения двух массивов x и y, и вызывается функция toc – вывести на экран время в секундах, прошедшее с момента включения таймера.
Лекция 3
Вторая часть файл-программы выполняет такие же действия начинается вновь с включения таймера. Затем в цикле for вычисляются значения массивов x и y. Обе части файл-программы делают практически одно и тоже, но используя разные операторы. После запуска файл-программы на моем компьютере я получил, что время выполнения первой части 0.016 секунды, а второй - 1.36 секунды. Хорошо известный в среде программистов на Matlab результат - использование циклов снижает быстродействие программы более чем на два порядка.
Старайтесь свести использование циклов в программах к минимуму. Иногда бывает полезно делать вставки на С, С++ или Fortran в тех местах программы, где циклы существенно снижают быстродействие.