2014-07-10 56 views
0

说,我已经与输入v和配置的匿名函数:Matlab的:打开多输入匿名函数到一个单一的输入

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). 

这里猜测是其中算法最初开始,A和B都为约束的参数。我只想要这个的一些变体。

回答

0

我不知道这是不是你想要的,但在这里,我的回答:

的定义为

test = @(a,v) 2*v 

你可以把它叫做匿名函数没有a这样

test([],3) 

但是,如果您有test = @(a,v) a*v,它将不起作用。

0

过去,我使用ode45的功能做了以下操作,这些功能要求的输入数量多于允许的xt输入。我不知道同样的方法可以与匿名函数一起工作,但我希望如果将函数保存在新文件中,它将起作用。我将把这里的方法适应你的例子。

首先,保存你的函数在一个新的文件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那是几个输入的函数,我可以将它传递给ode45

1

如果你有一个匿名函数obj_fun = @(v, config)有两个参数,一个已知值叫config_value您可以通过书面形式作出新的匿名函数只有第一个值:

obj_fun2 = @(v) obj_fun(v, config_value); 
+0

我想我试着这样做,但会导致一些错误。我的匿名函数不会读取config_value的某个字段。我确实设法解决了这个问题,我会尽快给你看。 – mtber75

相关问题