使用匿名函式控制代碼就可以了
fmincon 需要的函式fun只有一個輸入引數 fun(x)
而你的函式需要多一個能改變的變數 那麼形式變成 myfun(p,x)
p就是你要傳遞的引數,x還是原來的輸入
當然首先,你得寫個m檔案,假設為myfun.m,其內容大致如下
function [out]=myfun,(p,x)
...........
end
就是根據引數p和輸入x,求的輸出,當然名字可以自己取,然後就是主程式了
for p=p0:pn %引數p的取值
[x,fval]=fmincon(@(x) myfun(p,x),Bt0,[],[],[],[],lb,ub,@constr);
.......
其中關鍵就是@(x) myfun(p,x)
這會返回一個匿名的函式控制代碼,會使用當時的p值代入myfun
得到一個只有一個輸入x的函式,這樣就能把額外的引數傳遞給需要最佳化的函式
如果你的函式有等多的引數例如
myfun(a,b,c,x)
a=..
b=..
c=..
同樣用@(x) myfun(a,b,c,x)把a,b,c引數的值傳給要最佳化的函式
在以上的基礎上,加幾句,儲存每次的引數p和對應的最佳化結果
然後畫圖就可以了
使用匿名函式控制代碼就可以了
fmincon 需要的函式fun只有一個輸入引數 fun(x)
而你的函式需要多一個能改變的變數 那麼形式變成 myfun(p,x)
p就是你要傳遞的引數,x還是原來的輸入
當然首先,你得寫個m檔案,假設為myfun.m,其內容大致如下
function [out]=myfun,(p,x)
...........
end
就是根據引數p和輸入x,求的輸出,當然名字可以自己取,然後就是主程式了
for p=p0:pn %引數p的取值
[x,fval]=fmincon(@(x) myfun(p,x),Bt0,[],[],[],[],lb,ub,@constr);
.......
end
其中關鍵就是@(x) myfun(p,x)
這會返回一個匿名的函式控制代碼,會使用當時的p值代入myfun
得到一個只有一個輸入x的函式,這樣就能把額外的引數傳遞給需要最佳化的函式
如果你的函式有等多的引數例如
myfun(a,b,c,x)
a=..
b=..
c=..
同樣用@(x) myfun(a,b,c,x)把a,b,c引數的值傳給要最佳化的函式
在以上的基礎上,加幾句,儲存每次的引數p和對應的最佳化結果
然後畫圖就可以了