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

Файл 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