
- •Лабораторная работа №1. Введение в MATLAB
- •Краткая характеристика MATLAB
- •Описание интерфейса MATLAB
- •Работа с MATLAB в режиме командной строки
- •Объявление переменных
- •Удаление созданных переменных
- •Создание матриц и векторов
- •Поэлементные операции над матрицами
- •Основы построения графиков
- •Задания на лабораторную работу
- •Примечание к заданию
- •Варианты задания
- •Лабораторная работа №2. Программы в MATLAB
- •Скрипты
- •Рабочая область в MATLAB
- •Комментарии
- •Функции
- •Фактические и формальные параметры функции
- •Рабочая область функции
- •Скрипты и функции
- •Передача параметров по значению
- •Анонимные функции
- •Документирование функций
- •Отладка
- •Задание на лабораторную работу
- •Варианты заданий
- •Лабораторная работа №3. Условные выражения и циклы
- •Управление потоками в MATLAB
- •Оператор ветвления if/elseif/else
- •Оператор цикла for
- •Оператор цикла while
- •Проверка корректности входных переменных
- •Задания на лабораторную работу
- •Варианты задания
- •Лабораторная работа №4. Вектора и матрицы
- •Создание векторов и матриц в MATLAB.
- •Обращение к элементам матриц.
- •Заполнение матриц
- •Операции деления, умножения и возведения в степень.
- •Создание матриц специального вида
- •Объединение матриц
- •Удаление строк и столбцов
- •Задания на лабораторную работу
- •Лабораторная работа №5. Ввод-вывод
- •Организация ввод-вывод в MATLAB
- •Строки
- •Функция disp
- •Функция input
- •Функция fprintf
- •Организация диалога с пользователем и вывод таблицы с использованием форматированного вывод
- •Задания на лабораторную работу
- •Варианты задания
- •Лабораторная работа №6. Графические возможности в MATLAB
- •Основы графики в MATALB
- •Оформление графиков
- •Вывод нескольких графиков в текущее окно
- •Функция eval
- •Задания на лабораторную работу
- •Варианты задания

Лабораторная работа №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