Лабораторная работа №3
Использование подпрограмм в системе MATLAB
Цель работы: Знакомство с организацией функций в MATLAB, особенностями их работы.
Согласно одному из принципов структурного программирования, повторяющиеся фрагменты программы, а также логически целостные ее фрагменты можно оформить в виде подпрограмм (процедур и функций). Подпрограммы представляют собой относительно самостоятельные фрагменты программы, для оформления и вызова которых используют специальные синтаксические средства. Подпрограмма может быть многократно вызвана из разных частей программы. В MATLAB подпрограммы реализованы в виде функций.
В отличие от программ-сценариев (скриптов) функция может иметь входные и выходные параметры, при вызове функция создает новую рабочую область. Напомним, что рабочей областью называют область памяти, в которой размещены переменные. Так как функция создает новую рабочую область, внутри функции не будут видны переменные, объявленные вне ее кода. Поэтому входные и выходные параметры используются для связи функции с внешним кодом.
Функции, так же как и скрипты, оформляются в отдельном m-файле. Файл, содержащий функцию и файл скрипта, вызывающего эту функцию, должны содержаться в одном каталоге.
В общем виде программа функции имеет следующую структуру:
function [y1,…,yN] = имя_функции(x1,…,xM)
оператор_1
оператор_2
…
оператор_n
end
Функция начинается с ключевого слова function, за которым следуют в квадратных скобках через запятую имена выходных переменных. Далее следует знак «=» и имя функции. Имя функции подчиняется тем же правилам, что и имена переменных. Имя функции обязательно должно совпадать с именем файла, в котором она определена. После имени функции в круглых скобках через запятую следуют имена входных параметров. Следующие строки содержат тело функции (любые допустимые выражения MATLAB). Конец функции определяет ключевое слово end, однако оно не является обязательным, и его можно опустить. Если функция возвращает только один параметр, то его не обязательно заключать в квадратные скобки, например:
function s = triaArea( a, b )
% вычисление площади прямоугольного треугольника
% a, b — катеты треугольника
s = a * b / 2;
end
Если функция не имеет возвращаемых параметров, то после ключевого слова function следует имя функции, например:
function hellowWorld
% пример функции без входных и выходных параметров
disp(‘Hello world!’);
end
Для вызова функции применяется следующий синтаксис:
[k1, …, kN] = имя_функции(z1,…,zM)
где k1, …, kN – переменны, куда будут записаны выходные значения функции, а z1,…,zM – аргументы функции.
В случае, если функция возвращает только один параметр, квадратные скобки можно опустить, например:
Area = triaArea(1,2)
Фактические и формальные параметры функции
При написании и использовании функций различают фактические и формальные параметры функции:
- фактический параметр – аргумент, передаваемый в функцию при ее вызове;
- формальный параметр – аргумент, указываемый при определении функции.
Поясним различие между фактическими и формальными параметрами функции на примере:
Рассмотрим функцию, вычисляющую площадь и периметр параллелограмма. Функция содержится в файле ParArea.m:
function [s, p] = ParArea( a, b, alfa )
% Функция для вычисления площади и периметра параллелограмма по
% двум сторонам и углу между ними
% a, b, alfa — входные параметры (две стороны и угол), скаляры
% s, p — площадь и периметр треугольника соответственно, скаляры
% a, b, alfa, s, p являются формальными параметрами, то есть
% объявленные в определении функции.
% С входными параметрами можно работать, как с обычными переменными.
% Выходным параметрам необходимо присвоить какое-либо значение
% Площадь параллелограмма
s = a*b*sin(alfa);
% Периметр параллелограмма
p = 2*(a+b);
end
Пример использования данной функции:
a = 2;
b = 3;
[area, perimetr] = ParArea(a, b, pi/3)
area =
5.1962
perimetr =
При вызове функции ParArea параметры a, b, pi/3, area, perimeter являются фактическими. При вызове функции фактические параметры подставляются в формальные, поэтому их имена могут быть различными.
Для корректной работы функции при ее вызове имеет значение порядок следования переменных. Так, если в предыдущем примере поменять местами переменные perimeter и area, результат, который вернет функция, по смыслу будет неверным:
a = 2;
b = 3;
[perimetr, area] = ParArea(a, b, pi/3)
perimetr =
5.1962
area =
Рабочая область функции
В MATLAB рабочие области бывают двух типов:
- base workspace – базовая рабочая область;
- function workspace – рабочая область функции.
Как было отмечено ранее, при вызове функции создается новая рабочая область, которая существуют до конца работы функции. Все переменные, которые создаются в данной рабочей области, называются локальными. Они отличны от переменных других функций и переменных базовой рабочей области, даже если имеют одинаковые имена. Например, создадим следующую функцию:
function [] = demoLocaLVar()
% пример локальной переменной
x = 2;
end
И введем следующие команды в командное окно MATLAB:
x = 0
x =
demoLocalVar()
x
x =
Как видно из примера, даже не смотря на то, что в функции была создана переменная x и ей было присвоено значение 2, это никак не повлияло на переменную x, созданную в базовой рабочей области.
После завершения выполнения функции рабочая область функции и содержащиеся в ней переменные удаляются. Выполнение функции завершается по выполнению последнего оператора, либо по команде return.
Статьи к прочтению:
Формальные и фактические параметры. Использование подпрограмм в Турбо Паскале. Урок 20
Похожие статьи:
-
Формальные и фактические параметры
Рассмотрим более подробно вопросы взаимодействия формальных и фактических параметров. Определения формальных и фактических параметров являются…
-
Глобальные и локальные параметры
Понятие глобальных и локальных переменных введено в языке Паскаль из-за наличия в нем понятия блочной структуры. Любая программа, процедура и функция…