匿名函数

什么是匿名函数?

一个匿名函数是一个函数,存储在程序文件中,但与数据类型为的变量相关联function_handle。匿名函数可以接受多个输入并返回一个输出。它们只能包含一个可执行语句。

例如,创建一个匿名函数的句柄来查找一个数字的平方:

SQR = @(X)X ^ 2。

变量sqr是一个函数句柄。该@操作员制作手柄,和括号()后立即@运算符包括函数输入参数。这个匿名函数只接受一个输入X,并隐式地返回单个输出,即大小相同的数组X包含平方值。

查找特定值的平方()将值传递给函数句柄,就像将输入参数传递给标准函数一样。

一个= SQR(5)
A = 25

许多MATLAB®函数接受函数句柄作为输入,这样您就可以在一个值范围内对函数求值。您可以为匿名函数或程序文件中的函数创建句柄。使用匿名函数的好处是,对于只需要简单定义的函数,您不必编辑和维护文件。

比如说,求sqr从功能01由功能句柄传递到积分功能:

q =积分(sqr 0 1);

您不需要在工作区中创建变量来存储匿名函数。相反,您可以在表达式中创建临时函数句柄,例如对的调用积分功能:

Q =积分(@(X)的x ^ 2,0,1);

表达式中的变量

函数处理,不仅可以存储一个表情,又变量表达式需要进行评估。

例如,创建一个句柄需要有系数的匿名函数一种b,C

A = 1.3;B = 0.2;C = 30;抛物线= @(X)的a *的x ^ 2 + B * X + C。;

因为一种b,C可在创建时间抛物线中,函数手柄包括这些值。该值持续功能手柄内,即使你清除变量:

清晰的一种bCx = 1;y =抛物线(x)
Y = 31.5000

对该系数提供不同的值,你必须创建一个新的函数句柄:

A = -3.9;B = 52;C = 0;抛物线= @(X)的a *的x ^ 2 + B * X + C。;x = 1;Y =抛物线(1)
Y = 48.1000

您可以保存函数处理及其相关值MAT文件并使用加载它们在随后的MATLAB会话保存加载功能,如

保存myfile.mat抛物线

在构造匿名函数时,只使用显式变量。如果匿名函数访问参数列表或主体中没有显式引用的任何变量或嵌套函数,MATLAB会在调用该函数时抛出错误。隐式变量和函数调用经常在函数中遇到,比如EVALevalinassignin,加载。避免在匿名函数体中使用这些函数。

多个匿名函数

在匿名函数表达式可以包括另一匿名函数。这是通过不同参数的函数,你是在评估值的范围是有用的。例如,您可以解方程

对于不同的值C通过结合两个匿名函数:

g = @(c)(积分(@(x) (x))^2 + c*x + 1),0,1);

以下是如何得出这一说法:

  1. 把被积函数写成匿名函数,

    @(X)(X ^ 2 + C * X + 1)
  2. 通过将函数句柄传递给积分

    (@ (x) (x积分。^2 + c*x + 1),0,1)
  3. 供应价值C通过构造一个匿名函数为整个方程,

    g = @(c)(积分(@(x) (x))^2 + c*x + 1),0,1);

最后一个功能允许您解决方程的任意值C。例如:

克(2)
ANS = 2.3333

没有输入的功能

如果函数不需要任何输入,那么在定义和调用匿名函数时使用空括号。例如:

T = @()datestr(现在);d = T()
d = 1月26日-2012年15时11分47秒

省略赋值语句中的括号将创建另一个函数句柄,并且不执行该函数:

d =吨
d = @()datestr(现在)

多输入或输出功能

匿名函数需要显式指定的输入参数,你会为一个标准功能,用逗号分隔的多个输入。例如,该函数接受两个输入,Xÿ

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(π,2 *π);

您可以使用从输出mygrid创建一个目或表面积:

Z =的sin(x)+ COS(Y);目(X,Y,Z)

匿名函数的数组

虽然大多数MATLAB基本数据类型支持多维阵列,功能手柄必须是标量(单个元件)。金宝app但是,您可以使用存储单元阵列或结构数组多功能手柄。最常见的方法是使用一个单元阵列,如

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;{1}(x) f {2} {3} (y) f (x, y)
ans = 1 ans = 20 ans = 21

相关的话题