簡體   English   中英

Matlab:將多輸入匿名函數轉換為單輸入

[英]Matlab: Turning a multiple input anonymous function into a single input

假設我具有輸入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;

現在,讓我說我想擁有config的值,而我只是一個關於v的匿名函數。

因此,我將擁有:

obj_fun_2 = @(v)...

我怎樣才能做到這一點。 其背后的主要動機是我想使用函數fmincon,但似乎fmincon僅在您的匿名函數只有一個輸入的情況下才起作用。 我該如何解決這個問題? 我記得以前見過。 我怎么解決這個問題。

所以,我想要類似的東西,

fmincon(obj_fun(..., config),guess, A,B).

其中的猜測是算法最初開始的位置,而A和B是約束的參數。 我只想要一些這種形式。

如果您有一個帶有兩個參數的匿名函數obj_fun = @(v, config) ,並且已知一個名為config_value值,則可以通過編寫以下命令使用僅第一個值創建一個新的匿名函數:

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

我不知道這是不是您想要的,但是在這里我的回答是:

對於定義為的匿名函數

test = @(a,v) 2*v

你可以把它叫做沒有a像這樣

test([],3)

但是,如果您有test = @(a,v) a*v ,它將無法正常工作。

過去,我已經做過以下工作,以將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,該ODE是多個輸入的函數,可以將其傳遞給ode45

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM