2014-07-10 118 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

相關問題