我在MATLAB程序中有一个声明:
f = @(A)DistanceGauss(A,x_axis,Y_target,Y_initial,numOf,modus);
我理解f
被定义为函数distancegauss
的函数句柄,它包含括号内的参数/ arg列表。
A
中的变量@(A)
有什么作用?它有什么重要性吗?在浏览时我发现@
之后括号内的变量将是匿名函数的输入参数。
有谁可以解释A
做了什么?即使没有A
符号之后的@
,此处理也能正常工作吗?因为它已作为要在函数名称之后传递的参数出现。
答案 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
函数的作用。)