matlab中函式引數的問題,matlab非線性規劃fmincon函式中目標函式引數傳遞問題,怎麼解?

2021-05-02 11:24:25 字數 2053 閱讀 2928

1樓:春日野穹

使用匿名函式控制代碼就可以了

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和對應的優化結果

然後畫圖就可以了

打字不易,如滿意,望採納。

2樓:柘薰

function y=shorpath(a,s,t)if nargin<3

%t設定預設值

if nargin<2

%s設定初值

if nargin<1

%全部引數預設初值設定

%或者提示error

endend

end%函式體

%......

end函式一般都是這麼寫的,所以呼叫shorpath(a,s)一般而言t都是採取的程式設定好的預設值。

matlab非線性規劃fmincon函式中目標函式引數傳遞問題,怎麼解?

3樓:小青蛙跳著走

使用匿名函式控制代碼就可以了 fmincon 需要

的函式fun只有乙個輸入引數 fun(x) 而你的函式需要多乙個能改變的變數。

1、在到達迭代次數閾值或目標函式估值次數閾值時,求解器沒有最小化目標到要求的精度,此時求解器停止。接下來,可以嘗試以下方法:

(1)設定『display』為『iter』,檢視每步的迭代資訊,這些資訊包括:目標函式(fval or f(x) or resnorm)是否是下降的;檢查約束越界(max constraint)是否是遞減趨向於0;檢視一階優化是否是遞減趨向於0;檢視置信域半徑(trust-region radius)是否下降趨向於乙個小的值。若其中至少一種情況為是,就表示結果是不斷改善的。

如果結果是不斷改善的,可以採取下邊的措施:設定maxiter、maxfunevals比預設值大的值,預設值可以在優化工具箱或求解器的函式參考頁的優化表中檢視;從最後計算出的點開始重新求解。如果結果沒有改善,嘗試以下其他的方法。

(2)放鬆精度

如果tolx或tolfun太小,當求解器達到乙個最小值時可能也不會識別到,這就會導致無限次徒勞的迭代。diffmaxchange和diffminchange選項能影響求解器的改善,它們控制求導估計中有限差分的步長。

2、無可行點

在tolcon約束精度內,求解器不能找到乙個滿足所有約束條件的點,此時,可以嘗試以下方法:

(1)檢查線性約束

通過求解乙個線性規劃問題來找到乙個滿足界約束和線性約束的點。

i)定義乙個目標函式是常值0的線性規劃問題、

f = zeros(size(x0));   % assumes x0 is the initial point

ii)求解這個線性規劃問題看是否有乙個可行點。

xnew = linprog(f,a,b,aeq,beq,lb,ub);

iii)如果有可行點xnew,用xnew作為初始點去求解原始問題。

iv)如果沒有可行點,那說明原始模型建的不好,檢查界約束和線性約束。

matlab多引數函式,Matlab多引數函式

用函式lsqnonlin 你應該己知p,q,s,y,對吧?擬合只是找他們的關係而己,實際上就是 y f p,q,s 你需要先建乙個y fun.m的function,比如 function res y fun x global p q s y ymodel f p,q,s,x 你的p,q,s二次函式 ...

在MATLAB中建立函式M檔案,該函式的功能是 找出矩陣A A為100行,78列 中的最大值及其位置

function b question a a max max a c,d find a a b example a 1 6 4 6 7 6 3 8 3 3 3 8 8 2 8 5 8 6 3 5 1 5 8 5 3 b question a bans 8b ans 3 2 4 2 2 3 3 3 ...

matlab中函式式M檔案怎樣編寫

開啟matlab,然後點左上方的file 選擇new,裡面就有m檔案 這個類似函式的,不好說啊。你找本書看看吧 請教關於matlab中的m函式和m檔案的程式編寫,謝謝!函式檔案 function myfun a,b,c x b 2 a 5 0.1 b 2 a 5 y a x.2 b x c plot...