我想在一个自定义MATLAB函数中调用一个匿名函数。从调用自定义函数的脚本中,我希望最小化定制的MATLAB函数。我有一个问题,匿名函数没有被正确地传递给函数。
作为一个MWE,我有一个脚本,在其中我定义了一个匿名函数afunction,
% directory for minimization algorithm
addpath '/somedirectory/FMINSEARCHBND'
% anonymous function
afunction = @(x) x.^2 + 2.*x - 71;
% 1D minimization guesses
xguess = 20;
xmin = -1000;
xmax = 1000;
% 1D minimization call
minx = fminsearchbnd(@(x) MWEtestfuntominimize(x), xguess, xmin, xmax);然后我在另一个文件MWEtestfuntominimize中编写了一个自定义函数,
function g = MWEtestfuntominimize(x)
g = abs(afunction(x));
end我希望我的主脚本能够最小化MWEtestfuntominimize,但似乎MWEtestfuntominimize不能调用afunction。错误信息是
Undefined function or variable 'afunction'我尝试将afunction作为一个论点传递给MWEtestfuntominimize,但没有成功。这是通过在最小化调用中修改minx来实现的
minx = fminsearchbnd(@(afunction,x) MWEtestfuntominimize(afunction,x), xguess, xmin, xmax);并将自定义函数修改为
function g = MWEtestfuntominimize(afunction,x)
g = abs(afunction(x));
end由此产生的错误是
"afunction" was previously used as a variable, conflicting with its use here as the name of a function or command.我知道一个解决方案是在MWEtestfuntominimize本身中定义匿名函数,但是对于我正在编写的特定程序,我不想这样做。
发布于 2019-08-26 11:06:05
你说通过afunction“不成功”,但没有说明为什么.我就是这样解决这个问题的
% anonymous function
afunction = @(x) x.^2 + 2.*x - 71;
% 1D minimization call
minx = fminsearchbnd(@(x) MWEtestfuntominimize(x, afunction), xguess, xmin, xmax);然后在你的最小化函数中..。
function g = MWEtestfuntominimize(x, fcn)
g = abs( fcn(x) );
end为了进一步了解这种方法的工作原理,fminsearchbnd需要一个只有一个输入的函数。这是一个只有一个输入的函数(x)
@(x) MWEtestfuntominimize( x, afunction )函数句柄(或其他变量) afunction存储在匿名函数中,此时工作区中的值相同。注意,如果afunction随后发生变化,它将在您的匿名函数中更改而不是。
一个简单的例子是
a = 2;
f = @(x) x + a;
f(5); % = 7
a = 4; % change 'a' after the definition of 'f'
f(5); % = 7, does not change as f = @(x) x + 2 stillhttps://stackoverflow.com/questions/57656617
复制相似问题