Анонимная функция является функцией, которая не хранится в программном файле, но связана с переменной, тип данных которой
. Анонимные функции могут принимать несколько входов и возвращать один выход. Они могут содержать только один исполняемый оператор.function_handle
Например, создайте указатель на анонимную функцию, которая находит квадрат числа:
sqr = @(x) x.^2;
Переменные sqr
является указателем на функцию. The @
оператор создает указатель и круглые скобки ()
сразу после @
оператор включает входные аргументы функции. Эта анонимная функция принимает один вход 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