Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zadania_na_2_semestr / Методическое пособие.pdf
Скачиваний:
377
Добавлен:
02.04.2015
Размер:
1.62 Mб
Скачать

Лабораторная работа №3. Условные выражения и циклы

Управление потоками в MATLAB

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

if/elseif/else — оператор ветвления;

for — цикл со счетчиком;

parfor — цикл с параллельным выполнением итераций;

switch/case/otherwise — оператор ветвления;

try/catch — конструкции для обработки исключения;

while — цикл с предусловием;

break — оператор прерывания цикла while;

continue — оператор перехода к следующей итерации цикла while;

end — конец блока кода, или конец массива;

pause — приостановить текущий поток (пауза);

return — возврат из функции.

Далее рассмотрим наиболее важные из этих конструкций.

Оператор ветвления if/elseif/else

Данный оператор имеет следующий синтаксис:

if условие_1 выражение_1

elseif условие_2 выражение_2 elseif условие_3 выражение_3

else

выражение

end

29

При этом из обязательными являются частями являются только первый if и end в конце условной конструкции. Данный оператор работает следующим образом:

если условие_1 истинно, то будет выполнено выражение выражение_1, содержащее один или несколько операторов, после чего начнутся выполняться операторы расположенные после end;

если условие_1 ложно, то будет осуществлена проверка условие_2 на истинность, и если оно истинно, то будет выполнено выражение_2, после чего начнутся выполняться операторы расположенные после end;

таким образом последовательно будет произведен поиск первого истинного условия. Если все условие ложны, то будет выполнено выражение следующее после else.

Так отметим, что наиболее часто условия представляют собой некоторое логическое выражение, содержащее операторы сравнения и логические операторы.

Далее рассмотрим несколько примеров использования оператора ветвления if/elseif/else:

%Пример 1. Использование оператора if/elseif/else

%Сравнение двух чисел

a = 1; b = 3;

if a > b

disp('a больше b');

end

if a < b

disp('a меньше b');

end

if a == b

disp('a равно b');

end

Вывод данной программы будет следующим:

a меньше b

В данном случае используется простейшая форма оператора if/elseif/else. Так же отметим, что для вывода в консоль использовалась функция disp, а для сравнения двух чисел используется оператор «==».

Теперь приведем пример той же программы, но записанной в более компактной форме с использованием elseif и else.

30

%Пример 2. Использование оператора if/elseif/else

%Сравнение двух чисел

a = 1; b = 3;

if a > b

disp('a больше b'); elseif a < b

disp('a меньше b');

else

disp('a равно b');

end

Вывод данной программы идентичен предыдущему.

Оператор цикла for

Данный оператор имеет следующий синтаксис:

for индекс = значения операторы_тела_цикла;

end

где значение может иметь следующий вид:

начальное_значение : конечное_значение

или

начальное_значение : шаг : конечное_значение

В первом случае на каждой итерации переменная индекс будет последовательно принимать значения от начальное_значение до конечное_значение с шагом 1, во втором случае шаг указывается явно. Чтобы показать работу for цикла, приведем несколько примеров.

function [ res ] = fact( n )

%Вычисление факториала

%входные переменные:

%n - целое положительное число

%выходные переменны:

%res - факториал n

res = 1;

for i = 1 : n

res = res * i;

end

end

31

Для примера работы данной функции вызовем ее из консоли MATLAB:

>>fact(5) ans =

120

>>fact(10) ans =

3628800

Рассмотрим еще один пример использования цикла for.

function [ res ] = normalCdF( x )

%Расчет значений функции распределения вероятностей нормального закона

%математическое ожидание принимается равным 0, а дисперсия 1

%расчет будем производить путем численного интегрирования

%методом прямоугольников

%шаг интегрирования

dx = 0.0001;

%минимальное значение x при котором значение функции считаем,

%приблизительно равным 0

xMin = -5;

% расчет функции res = 0;

for xCurrent = xMin : dx : x

res = res + dx * exp( - (xCurrent ^ 2) / 2);

end

res = (1 / sqrt(2*pi)) * res;

end

Для примера работы данной функции вызовем ее из консоли MATLAB:

>>normalCdF(0) ans =

0.5000

>>normalCdF(10) ans =

1.0000

32