Программы-сценарии (скрипты) и функции

      Комментарии к записи Программы-сценарии (скрипты) и функции отключены

Программы-сценарии (скрипты) в MATLAB используют рабочую область программы, из которой они были вызваны, что можно использовать для передачи параметров скриптам. Например напишем скрипт, вычисляющий гипотенузу прямоугольного треугольника:

% скрипт, вычисляющий гипотенузу прямоугольного треугольника

% a, b — катеты прямоугольного треугольника

% с — вычисляемая гипотенуза

% промежуточные расчеты

x = a^2 + b^2;

% вычисляем гипотенузу

c = sqrt(x);

Пример использования данного скрипта:

a = 3;

b = 4;

hypScr

c

c =

x

x =

То есть, вызванные из консоли переменные a и b были созданы в базовой рабочей области. Далее из консоли вызывается программа-сценарий (скрипт) hypScr, которая в базовой рабочей области создаст переменные с и х, используя ранее созданные переменные а и b.

У данного подхода имеются следующие недостатки:

  • необходимо заранее создать переменные с заранее заданными именами (a, b);
  • после вычислений появится ненужная переменная x;
  • все четыре переменные (a, b, c и x) могут использоваться в коде ранее и в них могут уже содержаться данные, которые нельзя терять, поэтому неосторожное использование скриптов может привести к возникновению ошибок.

<p>Этих недостатков лишены функции:

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 =

a

a =

x

x =

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

Передача параметров по значению

В MATLAB параметры всегда передаются по значению. Передача по значению означает, что вызывающая функция копирует в рабочую область функции непосредственное значение параметра. Изменение копии переменной, соответственно, оригинал не затрагивает.

Приведем пример. Функция demoTrFun:

function [ ] = demoTrFun( x )

% демонстрация передачи параметров по значению

% увеличим переменную x

x = x + 5;

end

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

x = 0; % создадим переменную x

demoTrFun(x); % вызовем тестовую функцию, чтобы показать передачу по значению

x % покажем, что действительно была передана копия переменной x (x не должна изменится)

x =

Проверка корректности входных переменных

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

function [ res ] = myGCD( a, b )

% вычисление наибольшего общего делителя чисел a и b

% проверка, что числа a и b не имеют дробных частей

if a ~= round(a) || b ~= round(b)

error(‘Входные аргументы должны быть целыми’);

end

while a ~= b

if ab

a = a — b;

else

b = b — a;

end

end

% сохранить результат в выходную переменную

res = a;

end

Пример использования этой функции:

myGCD(78, 66)

ans =

myGCD(32, 48.5)

Error using myGCD (line 6)

Входные аргументы должны быть целыми

Анонимные функции

В MATLAB существует еще один вид функций, так называемые анонимные функции. Эти функции не имеют файла определения, а лишь ассоциированы с переменной, имеющей тип function_handle. Обращение к анонимным функциям (АФ) производится с помощью данных переменных.

Создадим АФ, вычисляющую квадрат числа:

sqr = @(x) x.^2;

Теперь квадрат 5 можно вычислить следующим образом

sqr(5)

ans =

Ограничением для функций является то, что при определении тела АФ может быть использовано только одно выражение. Внутри АФ могут вызываться другие функции, в том числе и другие анонимные. Нельзя использовать управляющие конструкции условия и цикла.

При написании тела функции могут использоваться переменные, уже существующие в рабочем пространстве. Значения данных переменных будут сохранены в определении АФ и использоваться независимо от своих глобальных определений. Даже если вы удалите переменные после того, как определили АФ, значения данных переменных будут использованы при выполнении функции.

a = -1.3; b = .2; c = 30;

parabola = @(x) a*x.^2 + b*x + c;

clear a b c

x = 1;

y = parabola(1)

y =

31.5000

Если есть необходимость изменить значения используемых переменных, то придется создать АФ заново.

a = -1.3; b = .2; c = 30;

parabola = @(x) a*x.^2 + b*x + c;

a = -3.9; b = 52; c = 0;

parabola = @(x) a*x.^2 + b*x + c; % Создание АФ с новыми значениями a, b, c

x = 1;

y = parabola(1)

y =

48.1000

Сравнения таких объектов MATLAB, как скрипт, функция и анонимная функция, приведено в таблице 3.1.

Таблица 3.1. Сравнение программ-сценариев, функций и анонимных функций

Объявление Вызов Рабочая область Где хранится
Программа-сценарий (скрипт) Построчное написание name base Файл с расширением .m
Функция function []=name() end []=name() function Файл с расширением .m
Анонимная функция name=@(x)f(x) a=name() function Переменная типаfunction_handle

Статьи к прочтению:

03 Написание программы MATLAB


Похожие статьи: