假设我有一个带有输入v和config的匿名函数:
obj_fun = @(v, config) config.dt*(config.e_w*(v(1)^2 + v(2)^2 + config.e_s))*config.m + 2*sqrt((config.G(1)^2 - config.p(1) - config.dt*v(1))^2 + (config.G(2) - config.p(2) -config.dt*v(2))^2)*sqrt(config.e_w*config.e_s)*config.m;
现在,让我们说我希望我拥有配置的值,而我只是一个匿名函数。
所以,我会:
obj_fun_2 = @(v)...
我该怎么做?这背后的主要动机是我想使用函数fmincon,但似乎fmincon仅在你的匿名函数只有一个输入时才有效。我该如何解决这个问题?我记得以前见过这个。我该如何解决这个问题。
所以,我想要类似的东西,
fmincon(obj_fun(..., config),guess, A,B).
其中guess是算法最初开始的地方,A和B是约束的参数。我只想要一些变体。
答案 0 :(得分:1)
如果你有一个带有两个参数的匿名函数obj_fun = @(v, config)
和一个名为config_value
的匿名函数,你可以通过编写一个新的匿名函数,只有第一个值:
obj_fun2 = @(v) obj_fun(v, config_value);
答案 1 :(得分:0)
我不知道这是不是你想要的,但我的回答是:
用于定义为
的匿名函数test = @(a,v) 2*v
你可以不用a
这样打电话给它
test([],3)
但是,如果您有test = @(a,v) a*v
,则无效。
答案 2 :(得分:0)
过去,我已完成以下操作,以使用ode45
的功能,这些功能需要超过允许的x
和t
输入。我不知道相同的方法将适用于匿名函数,但我希望如果您将函数保存在新文件中它将起作用。我将根据你的例子调整方法。
首先,将您的功能保存在一个带有第一行的新文件myfunc.m
中:
function val = myfunc(v, config);
% your function here, returning "val"
接下来,在你的调用m文件中,将你的函数包装在一个基本上把它伪装成v
函数的句柄中:
h = @(v)myfunc(v, config); % you might need to put "guess" in place of "v" here
其中config
在您的调用m文件中定义。最后,将此句柄代替函数传递给fmincon
:
fmincon(h, guess, A, B);
我认为你没有提供我需要测试它的所有内容,但正如我所说的那样,我过去曾使用过这种方法来包装一个ODE,它是几个输入的函数,我可以将它传递给{ {1}}。