資源描述:
《matlab非線性規(guī)劃教程》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、非線性規(guī)劃實驗目的實驗內(nèi)容2、掌握用數(shù)學軟件求解優(yōu)化問題。1、直觀了解非線性規(guī)劃的基本內(nèi)容。1、非線性規(guī)劃的基本理論。4、實驗作業(yè)。2、用數(shù)學軟件求解非線性規(guī)劃。3、鋼管訂購及運輸優(yōu)化模型*非線性規(guī)劃的基本解法非線性規(guī)劃的基本概念非線性規(guī)劃返回定義如果目標函數(shù)或約束條件中至少有一個是非線性函數(shù)時的最優(yōu)化問題就叫做非線性規(guī)劃問題.非線性規(guī)劃的基本概念一般形式:(1)其中,是定義在En上的實值函數(shù),簡記:其它情況:求目標函數(shù)的最大值或約束條件為小于等于零的情況,都可通過取其相反數(shù)化為上述一般形式.計算機求解方法1.首先建立M文件fun
2、.m,定義目標函數(shù)F(X):functionf=fun(X);f=F(X);其中X為n維變元向量,G(X)與Ceq(X)均為非線性函數(shù)組成的向量,其它變量的含義與線性規(guī)劃、二次規(guī)劃中相同.用Matlab求解上述問題,基本步驟分三步:3.建立主程序.非線性規(guī)劃求解的函數(shù)是fmincon,命令的基本格式如下:(1)x=fmincon(‘fun’,X0,A,b)(2)x=fmincon(‘fun’,X0,A,b,Aeq,beq)(3)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB)(4)x=fmincon(
3、‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’)(5)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options)(6)[x,fval]=fmincon(...)(7)[x,fval,exitflag]=fmincon(...)(8)[x,fval,exitflag,output]=fmincon(...)輸出極值點M文件迭代的初值參數(shù)說明變量上下限注意:[1]fmincon函數(shù)提供了大型優(yōu)化算法和中型優(yōu)化算法。默認時,若在fun函數(shù)中提供了梯度(
4、options參數(shù)的GradObj設置為’on’),并且只有上下界存在或只有等式約束,fmincon函數(shù)將選擇大型算法。當既有等式約束又有梯度約束時,使用中型算法。[2]fmincon函數(shù)的中型算法使用的是序列二次規(guī)劃法。在每一步迭代中求解二次規(guī)劃子問題,并用BFGS法更新拉格朗日Hessian矩陣。[3]fmincon函數(shù)可能會給出局部最優(yōu)解,這與初值X0的選取有關(guān)。1、寫成標準形式:s.t.2x1+3x26s.tx1+4x25x1,x20例22、先建立M-文件fun3.m:functionf=fun3(x);f=-x(1)-2
5、*x(2)+(1/2)*x(1)^2+(1/2)*x(2)^2MATLAB(youh2)3、再建立主程序youh2.m:x0=[1;1];A=[23;14];b=[6;5];Aeq=[];beq=[];VLB=[0;0];VUB=[];[x,fval]=fmincon('fun3',x0,A,b,Aeq,beq,VLB,VUB)4、運算結(jié)果為:x=0.76471.0588fval=-2.02941.先建立M文件fun4.m,定義目標函數(shù):functionf=fun4(x);f=exp(x(1))*(4*x(1)^2+2*x(2)^
6、2+4*x(1)*x(2)+2*x(2)+1);x1+x2=0s.t.1.5+x1x2-x1-x20-x1x2–100例32.再建立M文件mycon.m定義非線性約束:function[g,ceq]=mycon(x)g=[1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10];3.主程序youh3.m為:x0=[-1;1];A=[];b=[];Aeq=[11];beq=[0];vlb=[];vub=[];[x,fval]=fmincon('fun4',x0,A,b,Aeq,beq,vlb,vub,'mycon
7、')MATLAB(youh3)3.運算結(jié)果為:x=-1.22501.2250fval=1.8951例41.先建立M-文件fun.m定義目標函數(shù):functionf=fun(x);f=-2*x(1)-x(2);2.再建立M文件mycon2.m定義非線性約束:function[g,ceq]=mycon2(x)g=[x(1)^2+x(2)^2-25;x(1)^2-x(2)^2-7];3.主程序fxx.m為:x0=[3;2.5];VLB=[00];VUB=[510];[x,fval,exitflag,output]=fmincon('fu
8、n',x0,[],[],[],[],VLB,VUB,'mycon2')MATLAB(fxx(fun))4.運算結(jié)果為:x=4.00003.0000fval=-11.0000exitflag=1output=iterations:4funcCount