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 具體輸入命令跟上面的出不多,換成 ...