![](/img/trans.png)
[英]In Matlab, for a multiple input function, how to use a single input as multiple inputs?
[英]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
使用的函數所需的功能比允許的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,該ODE是多個輸入的函數,可以將其傳遞給ode45
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.