matlab非線性規劃fmincon函式中目標函式引數傳遞問

2021-03-22 04:26:06 字數 4512 閱讀 2632

1樓:小青蛙跳著走

使用匿名函式控制代碼就可以了 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中fmincon函式求解全域性最優問題,目標函式涉及引數傳遞,約束條件中含有微分條件

2樓:西湖釣秋水

un為目標函式,它可用前面的方法定義;

x0為初始值;

a、b滿足線性不等式約束 ,若沒有不等式約束,則取a=[ ],b=[ ];

aeq、beq滿足等式約束 ,若沒有,則取aeq=[ ],beq=[ ];

lb、ub滿足 ,若沒有界,可設lb=[ ],ub=[ ];

nonlcon的作用是通過接受的向量x來計算非線性不等約束 和等式約束 分別在x處的估計c和ceq,通過指定函式柄來使用,如:>>x = fmincon(@myfun,x0,a,b,aeq,beq,lb,ub,@mycon),先建立非線性約束函式,並儲存為mycon.m:

function [c,ceq] = mycon(x)

c = …

% 計算x處的非線性不等約束 的函式值。

ceq = …

% 計算x處的非線性等式約束 的函式值。

lambda是lagrange乘子,它體現哪一個約束有效。

output輸出優化資訊;

grad表示目標函式在x處的梯度;

hessian表示目標函式在x處的hessiab值。

matlab非線性規劃用fmincon,目標函式引數較多,其中級數求和中又含引數,該怎麼處理?跪求,附目標函式 15

3樓:不好好改就革

你這是擺在這裡看什麼呢?

註解都沒有,主函式也不知道到**去找,還有很多符號變數,一看就是沒有程式設計經驗的。(⊙﹏⊙),給個錯誤情況啊,然後就一個一個debug不就完了嘛!

matlab 向凸優化非線性約束函式傳遞引數 fmincon 20

4樓:山水阿銳

您好,un為目標函式,它可用前面的方法定義;

x0為初始值;

a、b滿足線性不等式約束 ,若沒有不等式約束,則取a=[ ],b=[ ];

aeq、beq滿足等式約束 ,若沒有,則取aeq=[ ],beq=[ ];

lb、ub滿足 ,若沒有界,可設lb=[ ],ub=[ ];

nonlcon的作用是通過接受的向量x來計算非線性不等約束 和等式約束 分別在x處的估計c和ceq,通過指定函式柄來使用,如:>>x = fmincon(@myfun,x0,a,b,aeq,beq,lb,ub,@mycon),先建立非線性約束函式,並儲存為mycon.m:

function [c,ceq] = mycon(x)

c = …

% 計算x處的非線性不等約束 的函式值。

ceq = …

% 計算x處的非線性等式約束 的函式值。

lambda是lagrange乘子,它體現哪一個約束有效。

output輸出優化資訊;

grad表示目標函式在x處的梯度;

hessian表示目標函式在x處的hessiab值。

注意:1. fmincon 函式提供了大型優化演算法和中型優化演算法。

預設時,若在 fun 函式中提供了梯度(options 引數的 geadobj 設定為 'on'),並且只有上下界存在或只有等式約束,fmincon 函式將選擇大型演算法。 當既有等式約束又有梯度約束時,使用中型演算法。

2. fmincon 函式的中型演算法一般是使用序列二次規劃。在每一步迭代中求解二次規劃子問題,並用 bfgs 法更新 lagrangian 乘子和 hessian 矩陣。

3. fmincon 函式的大型演算法採用了subspace trust region 優化演算法。這種演算法是把目標函式在點x的鄰域泰勒(x可以認為是人為提供的初始猜測),這個的鄰域就是所謂的trust region,泰勒進行到二階項為止。

4. fmincon 函式可能會給出區域性最優解,這與初始值的選取有關。

關於matlab中ga函式和fmincon函式等在求解非線性規劃問題中的異同

5樓:

ga是智慧優化演算法,求解出的結果不能保證是問題的最優解。

fmincon是嵌入最優化演算法的nlp求解模組,如果問題是凸的,能夠保證求出問題的最優解。

如果問題的規模較小(變數數和約束數目),ga顯示不出求解速度,反倒是fmincon求解更快;大規模問題,ga在求解速度方面應該有優勢。

「但是按照遺傳演算法來說,得到的應該是更優化一些的解呀」這是錯誤的理解,在不計較計算時間的情況下,ga的結果應該不如fmincon,原因前面解釋了。

適用情況:ga適合求解問題複雜,希望計算時間少,且對解的精度要求不高情況;fmincon適合問題相對簡單些,不計較計算時間,要求最優解情況。

希望對你有幫助。

matlab中fmincon函式出現問題,求大神幫助

6樓:匿名使用者

1、首先,你的引數寫錯位了——a後面應該有b吧?缺少一個引數,是造成目前報錯的直接原因。

2、沒有非線性約束,則該位置的引數也寫成空矩陣 。

匿名函式:

amr=...;

bmr=...;

fmincon(@(x)ee(x,amr,bmr),....)巢狀函式:

function main

amr=...;

bmr=...;

fmincon(@ee,....)

function y=ee(x)

....  % 此處可使用amr、bmr等諸函式中定義的變數endend

我利用matlab中的fmincon函式求非線性規劃求電機轉矩的最大值 10

7樓:king手舞足蹈我

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

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

然後畫圖就可以了

matlab約束非線性規劃問題

function main 輸入 clc clear all x0 zeros 27,1 lb zeros 27,1 x,fval fmincon myfun,x0,lb,mycon myfun.m function f myfun x f x 1 x 13 x 2 x 14 x 3 x 15 x ...

引數線性規劃和含引數線性規劃的區別

引數線性規劃 parametric linear programm ing 數學規劃的一個分支.它研究係數不是常數,而專是在某範圍內變化屬的引數的線性規劃問題。含引數線性規劃是指在條件中 確定可行域上的邊界點或邊界線 由線性約束條件所含有的引數值,然後畫出可行域。前者是廣度上的概念,或者則是實際意義...

不等式線性規劃應用問題, 不等式線性規劃問題

設生產a產品數量為x1,b產品數量為x2。x1,x2 0,且x1,x2為整數 則由題意此線性規劃問題可化為 max z 300x1 400x2 s.t3x1 x2 11 x1 3x2 9 x1 0 x2 0 x1為整數,x2為整數 解的方法有兩種,1 用lingo 具體輸入命令跟上面的出不多,換成 ...