
- •Лабораторная работа №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
- •Задания на лабораторную работу
- •Варианты задания

Файл demoParam.m:
function [ v ] = demoParam( a, b, c )
%Вычисление объема прямоугольного параллелепипеда
%a, b, c - входные параметры (длины граней)
%v - выходной параметр (объем)
%a, b, c, v являются формальными параметрами, то есть объявленные
%в определении функции
%с входными параметрами можно работать как с обычными переменными
%выходным параметрам необходимо присвоить какое-либо значение
v = a * b * c; end
Файл testDemoParam.m
a = 1; x = 3;
v = demoParam(a, x, 2);
% a, x, 2 являются фактическими параметрами
Отметим что при вызове функции, фактические параметры подставляться в формальные, поэтому их имена могут быть различными.
Рабочая область функции
Как было отмечено ранее при вызове функции создается новая рабочая область, которая существуют до конца работы функции. Все переменны которые создаются в данной рабочей области называются локальными. Они отличны от переменных других функций и базовой рабочей области, даже если имеют одинаковые имена. Например, создадим следующую функцию:
function [] = demoLocaLVar() % пример локальной переменной x = 2;
end
Ивведем следующие команды в командное окно MATLAB:
>>x = 0
x =
0
>>demoLocalVar()
>>x
x =
19

0
Как видно из примера, даже не смотря на то что в функции была создана переменная x, и ей было присвоено значение 2, это никак не повлияло на переменную x, созданную в базовой рабочей области.
Так же необходимо отметит, что после того как функция заканчивает свою работу, все локальные переменные будут уничтожены. Выполнение функции завершается по выполнению последнего оператора, либо по команде return.
Скрипты и функции
Как было сказано скрипты в MATLAB используют рабочую область кода из которого они были вызваны, что можно использовать для передачи парамеров скриптам. Например напишем скрипт, вычисляющий гипотенузу прямоугольного треугольника:
%скрипт, вычисляющий гипотенузу прямоугольного треугольника
%a, b - катеты прямоугольного треугольника
%с - вычисляемая гипотенуза
%промежуточные расчеты
x = a^2 + b^2;
% вычисляем гипотенузу c = sqrt(x);
Пример использования данного скрипта:
>>a = 3;
>>b = 4;
>>hypScr
>>c
c =
5
>> x
x =
25
Как видно из примера у данного подхода сразу появляются следующие недостатки:
•необходимо заранее создать переменные с заранее заданными именами (a, b);
•после вычислений появится совершенно нам не нужная переменная x;
20

•все четыре переменные (a, b, c и x) могут использоваться в коде ранее и в них могут уже содержаться данные, которые нельзя терять, поэтому неосторожно использование скриптов может привести к большим проблемам.
Всех этих недостатков лишены функции:
function c = hypFun( a, b )
%функция, вычисляющая гипотенузу прямоугольного треугольника
%a, b - катеты прямоугольного треугольника
%с - вычисляемая гипотенуза
%промежуточные расчеты
x = a^2 + b^2;
% вычисляем гипотенузу c = sqrt(x);
end
Пример использования данной функции:
>>a = 2; % некие важные данные, которые нужно сохранить
>>x = 3; % некие важные данные, которые нужно сохранить, со скриптом это не получится
>>c = hypFun(3,4)
c =
5
>> a a =
2
>> x x =
3
Передача параметров по значению
В MATLAB параметры всегда передаются по значению (однако передача по ссылке существует, но в данном курсе не рассматривается). Передача по значению означает, что вызывающая функция копирует в память, доступную вызываемой, непосредственное значение параметра. Изменение копии переменной, соответственно, оригинал не затрагивает.
Приведем пример. Функция demoTrFun:
21

function [ ] = demoTrFun( x )
%демонстрация передачи по значению
%увеличим переменную x
x = x + 5;
end
Демонстрация использования данной функции:
>>x = 0; % создадим переменную x
>>demoTrFun(x); % вызовем тестовую функцию, чтобы показать передачу по значению
>>x % покажем, что действительно была передана копия переменной x (x не должна изменится)
x =
0
Анонимные функции
В MATLAB существует еще один вид функций, так называемые анонимные функции. Эти функции не имеют файла определения, а лишь ассоциированы с переменной имеющей тип function_handle. Обращение к анонимным функциям (АФ) производится с помощью данных переменных.
Создадим АФ, вычисляющую квадрат числа:
>> sqr = @(x) x.^2;
Теперь квадрат 5 можно вычислить следующим образом
>> sqr(5) ans =
25
Ограничением для функций является то, что при определении тела АФ может быть использовано только одно выражение. Внутри АФ могут вызываться другие функции, в том числе и другие анонимные. Нельзя использовать управляющие конструкции условия и цикла.
При написании тела функции могут использоваться переменные уже существующие в рабочем пространстве. Значения данных переменных будут сохранены в определении АФ и использоваться независимо от своих глобальных определений. Даже если вы удалите переменные после того, как определили АФ, значения данных переменных будут
22