这个matlab语句做了什么

时间:2015-12-14 13:57:30

标签: matlab function handle

我在MATLAB程序中有一个声明:

f = @(A)DistanceGauss(A,x_axis,Y_target,Y_initial,numOf,modus);

我理解f被定义为函数distancegauss的函数句柄,它包含括号内的参数/ arg列表。

A中的变量@(A)有什么作用?它有什么重要性吗?在浏览时我发现@之后括号内的变量将是匿名函数的输入参数。

有谁可以解释A做了什么?即使没有A符号之后的@,此处理也能正常工作吗?因为它已作为要在函数名称之后传递的参数出现。

3 个答案:

答案 0 :(得分:0)

应定义匿名函数,例如:

sqr = @(x) x.^2;

其中x显示函数的变量,并且没有名称(它被称为匿名!)。

虽然你可以这样做:

c = 10;
mygrid = @(x,y) ndgrid((-x:x/c:x),(-y:y/c:y));
[x,y] = mygrid(pi,2*pi);

您要修改现有函数ndgrid以创建新的匿名函数。

在你的情况下:

f = @(A)DistanceGauss(A,x_axis,Y_target,Y_initial,numOf,modus);

这是一个新的匿名函数,通过修改您可能希望拥有单个变量DistanceGauss的函数A

如果您从代码中删除(A),则f将成为现有函数DistanceGauss的句柄:

f = @DistanceGauss;

现在您只需使用句柄即可评估该功能:

f(A,x_axis,...)

答案 1 :(得分:0)

您的代码将创建一个匿名函数f,该函数接受一个输入A。特别是f将调用函数DistanceGauss(A,x_axis,Y_target,Y_initial,numOf,modus);,其中A的值是您使用f(A)输入的内容,其他输入必须已存在于您的工作区中并将传递给功能。注意:如果其他变量不存在,则在调用f时会出错。

现在一个合理的问题是你为什么要这样做,你只需要用你想要的任何值直接调用DistanceGauss(A,x_axis,Y_target,Y_initial,numOf,modus);,而不必担心是否存在其中的一些。

我可以想到为什么你会这样做有两个主要原因(我确定还有其他人)。首先是为了简单起见,您的其他输入不会发生变化,并且您不想继续重新输入或让用户意外更改它们。

您希望这样做的另一个原因是优化/最小化某个功能,例如使用fminsearch。 matlab优化功能将改变所有输入。如果只想改变其中一些,可以使用这种语法来减少输入变量的数量。

至于A实际上是什么,这将取决于它在DistanceGauss中的作用,这不是标准的MATLAB函数,所以我建议你查看代码。

答案 2 :(得分:0)

" F(的 A )"或者" f A "或" A "的功能这里有句柄" f "
DistanceGauss()这是另一个在代码中其他地方定义的函数。

在创建 f 功能之前,您需要设置x_axis, Y_target, Y_initial, numOf, & modus。对于函数 f ,这些参数将保持不变,即使您稍后尝试再次设置它们也是如此。 '的 A '虽然,是不同的。在进行此功能之前,您不需要设置它。您可以稍后对 A 的所有值进行操作,例如绘制函数或获取函数的积分。在这种情况下,它将对' A '的每个值执行DistanceGauss函数(尽管我们在这里看不到DistanceGauss函数的作用。)