主要内容

匿名函数

匿名函数是什么?

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

例如,创建一个处理一个匿名函数,发现一个数的平方:

sqr = @ (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 (x)。* x ^ 2 + b + c;

因为一个,b,c在您创建的时间是可用的吗抛物线包括这些值,函数处理。的值保存在函数处理即使你明确的变量:

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

提供不同的系数值,您必须创建一个新的函数处理:

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

您可以保存在MAT-file函数处理及其相关值和负载在后续会话使用MATLAB保存负载功能,比如

保存myfile.mat抛物线

当创建匿名函数仅使用显式变量。如果一个匿名函数访问任何变量或嵌套函数参数列表中没有显式地引用或身体,MATLAB调用函数时抛出一个错误。隐式变量和函数调用中经常遇到等功能eval,evalin,assignin,负载。避免使用这些函数体内的匿名函数。

多个匿名函数

一个匿名函数的表达式可以包含另一个匿名函数。这是用于不同的参数传递给函数时,你正在评估值的范围。例如,您可以解决方程

为不同的值c通过结合两个匿名函数:

g = @ (c)(积分(@ (x (x)。^ 2 + 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)。^ 2 + c * x + 1), 0, 1));

最后一个函数允许您解决任何值的方程c。例如:

g (2)
ans = 2.3333

没有输入功能

如果你不需要任何的输入函数,当你使用圆括号来定义和调用匿名函数。例如:

t = @ () datestr(现在);d = t ()
d = 26 - 1月- 2012 15:11:47

省略括号的赋值语句创建另一个函数处理,并且不执行功能:

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

与多个输入或输出功能

匿名函数要求您显式地指定输入参数作为标准功能,你可以将多个输入用逗号分开。例如,该函数接受两个输入,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 / 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 (x, y)。y ^ 2 + + 10)};

使用花括号访问单元的内容。例如,f {1}返回第一个函数处理。执行功能,通过输入值在花括号后括号:

x = 1;y = 10;{1}(x) f {2} {3} (y) f (x, y)
ans = 1 = 20岁= 21

相关的话题