Анонимная функция является функцией, которая не хранится в программном файле, но сопоставлена с переменной, тип данных которой
. Анонимные функции могут принять несколько входных параметров и возвратить один выходной параметр. Они могут содержать только один исполняемый оператор.function_handle
Например, создайте указатель на анонимную функцию, которая находит квадрат номера:
sqr = @(x) x.^2;
Переменный sqr
указатель на функцию. @
оператор создает указатель и круглые скобки ()
сразу после @
оператор включает входные аргументы функции. Эта анонимная функция принимает один вход x
, и неявно возвращает один выходной параметр, массив тот же размер как x
это содержит значения в квадрате.
Найдите квадрат особого значения (5
) путем передачи значения указателю на функцию, так же, как вы передали бы входной параметр стандартной функции.
a = sqr(5)
a = 25
Многие MATLAB® функции принимают указатели на функцию как входные параметры так, чтобы можно было выполнить функции в области значений значений. Можно создать указатели или для анонимных функций или для функций в программных файлах. Преимущество использования анонимных функций - то, что вы не должны отредактировать и обеспечить файл для функции, которая требует только краткого определения.
Например, найдите интеграл sqr
функция от 0
к 1
путем передачи указателя на функцию integral
функция:
q = integral(sqr,0,1);
Вы не должны создавать переменную в рабочей области, чтобы сохранить анонимную функцию. Вместо этого можно создать временный указатель на функцию в рамках выражения, такого как этот вызов integral
функция:
q = integral(@(x) x.^2,0,1);
Указатели на функцию могут сохранить не только выражение, но также и переменные, которых выражение требует для оценки.
Например, создайте указатель на анонимную функцию, которая требует коэффициентов a
B
, и c
.
a = 1.3; b = .2; c = 30; parabola = @(x) a*x.^2 + b*x + c;
Поскольку a
B
, и c
доступны в то время, когда вы создаете parabola
, указатель на функцию включает те значения. Значения сохраняются в указателе на функцию, даже если вы очищаете переменные:
clear a b c x = 1; y = parabola(x)
y = 31.5000
Чтобы предоставить различные значения для коэффициентов, необходимо создать новый указатель на функцию:
a = -3.9; b = 52; c = 0; parabola = @(x) a*x.^2 + b*x + c; x = 1; y = parabola(1)
y = 48.1000
Можно сохранить указатели на функцию и их присваиваемые значения в MAT-файле и загрузить их в последующем сеансе работы с MATLAB с помощью save
и load
функции, такой как
save myfile.mat parabola
Используйте только явные переменные при построении анонимных функций. Если анонимная функция получает доступ к какой-либо переменной или вложенной функции, на которую явным образом не ссылаются в списке аргументов или теле, MATLAB выдает ошибку, когда вы вызываете функцию. С неявными переменными и вызовами функции часто сталкиваются в функциях такой как eval
, evalin
, assignin
, и load
. Избегайте использования этих функций в теле анонимных функций.
Выражение в анонимной функции может включать другую анонимную функцию. Это полезно для передачи различных параметров к функции, которую вы выполняете в области значений значений. Например, можно решить уравнение
для различных значений c
путем объединения двух анонимных функций:
g = @(c) (integral(@(x) (x.^2 + c*x + 1),0,1));
Вот то, как вывести этот оператор:
Запишите подынтегральное выражение как анонимную функцию,
@(x) (x.^2 + c*x + 1)
Выполните функцию от нуля до одного путем передачи указателя на функцию integral
,
integral(@(x) (x.^2 + c*x + 1),0,1)
Предоставьте значение для c
путем построения анонимной функции для целого уравнения,
g = @(c) (integral(@(x) (x.^2 + c*x + 1),0,1));
Итоговая функция позволяет вам решать уравнение для любого значения c
. Например:
g(2)
ans = 2.3333
Если ваша функция не требует никаких входных параметров, используйте пустые круглые скобки, когда вы задаете и вызываете анонимную функцию. Например:
t = @() datestr(now); d = t()
d = 26-Jan-2012 15:11:47
Исключение круглых скобок в операторе присваивания создает другой указатель на функцию и не выполняет функцию:
d = t
d = @() datestr(now)
Анонимные функции требуют, чтобы вы явным образом задали входные параметры, как вы были бы для стандартной функции, разделяя несколько входных параметров запятыми. Например, эта функция принимает два входных параметров, x
и y
:
myfunction = @(x,y) (x^2 + y^2 + x*y); x = 1; y = 10; z = myfunction(x,y)
z = 111
Однако анонимная функция возвращает только один выходной параметр. Если выражение в функции возвращает несколько выходных параметров, то можно запросить их, когда вы вызываете указатель на функцию.
Например, ndgrid
функция может возвратить столько же выходных параметров сколько количество входных векторов. Эта анонимная функция, которая вызывает ndgrid
возвращает только один выходной параметр (mygrid
). Вызовите mygrid
получить доступ к выходным параметрам, возвращенным ndgrid
функция.
c = 10; mygrid = @(x,y) ndgrid((-x:x/c:x),(-y:y/c:y)); [x,y] = mygrid(pi,2*pi);
Можно использовать выход от mygrid
создать сетчатый график или объемную поверхностную диаграмму:
z = sin(x) + cos(y); mesh(x,y,z)
Несмотря на то, что большинство основополагающих типов данных MATLAB поддерживает многомерные массивы, указатели на функцию должны быть скалярами (один элементы). Однако можно сохранить несколько указателей на функцию с помощью массива ячеек или массива структур. Наиболее распространенный подход должен использовать массив ячеек, такой как
f = {@(x)x.^2; @(y)y+10; @(x,y)x.^2+y+10};
Когда вы создаете массив ячеек, имеете в виду, что MATLAB интерпретирует пробелы как разделители столбцов. Или не используйте пробелы от выражений, как показано в предыдущем коде, или заключите выражения в круглые скобки, такой как
f = {@(x) (x.^2); @(y) (y + 10); @(x,y) (x.^2 + y + 10)};
Доступ к содержимому ячейки с помощью фигурных скобок. Например, f{1}
возвращает первый указатель на функцию. Чтобы выполнить функцию, передайте входные значения в круглых скобках после фигурных скобок:
x = 1; y = 10; f{1}(x) f{2}(y) f{3}(x,y)
ans = 1 ans = 20 ans = 21