主要内容

匿名函数

什么是匿名函数?

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

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

@(x) x.^2;

变量sqr是函数句柄。的操作符创建句柄和括号()后立即操作符包含函数的输入参数。这个匿名函数接受单个输入x,并隐式返回单个输出,一个大小相同的数组x它包含了平方值。

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

一个= sqr (5)
= 25

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

例如,求积分sqr函数01将函数句柄传递给积分功能:

q =积分(sqr 0 1);

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

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

表达式中的变量

函数句柄不仅可以存储表达式,还可以存储表达式求值所需的变量。

例如,为需要系数的匿名函数创建句柄一个b,c

一个= 1.3;b = 2;c = 30;抛物线= @(x) a*x。^2 + b*x + c;

因为一个b,c在创建时可用吗抛物线,则函数句柄包含这些值。即使你清除了变量,这些值也会保存在函数句柄中:

清晰的一个bcx = 1;y =抛物线(x)
y = 31.5000

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

一个= -3.9;b = 52个;c = 0;抛物线= @(x) a*x。^2 + b*x + c;x = 1;y =抛物线(1)
y = 48.1000

可以将函数句柄及其关联值保存在mat文件中,并使用保存负载功能,比如

保存myfile.mat抛物线

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

多个匿名函数

匿名函数中的表达式可以包含另一个匿名函数。这对于将不同的参数传递给正在对一段值进行求值的函数非常有用。例如,你可以解这个方程

的变化值c通过组合两个匿名函数:

G = @(c)(积分(@(x) (x.²+ c*x + 1),0,1))

下面是如何推导这种说法:

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

    @(x) (x.^2 + c*x + 1)
  2. 将函数句柄传递给,求函数从0到1的值积分

    积分(@(x) (x.^2 + c*x + 1),0,1)
  3. 提供值c通过构造整个方程的匿名函数,

    G = @(c)(积分(@(x) (x.²+ 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)

具有多个输入或输出的函数

匿名函数要求您像使用标准函数一样显式指定输入参数,多个输入用逗号分隔。例如,这个函数接受两个输入,xy

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 = sinx + cosy;网格(x, y, z)

图中包含一个轴对象。axis对象包含一个类型为surface的对象。

匿名函数数组

尽管大多数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} f f (x) {2} {3} (y) f (x, y)
Ans = 1 Ans = 20 Ans = 21

相关的话题