资源描述:
《非线性规划及matlab实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、非线性规划非现性规划的基本概念定义如果目标函数或约束条件中至少有一个是非线性函数时的最优化问题就叫做非线性规划问题.一般形式:(1)其中,是定义在En上的实值函数,简记:其它情况:求目标函数的最大值或约束条件为小于等于零的情况,都可通过取其相反数化为上述一般形式.用MATLAB软件求解,其输入格式如下:1.x=quadprog(H,C,A,b);2.x=quadprog(H,C,A,b,Aeq,beq);3.x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB);4.x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB,X0);5.
2、x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB,X0,options);6.[x,fval]=quadprog(...);7.[x,fval,exitflag]=quaprog(...);8.[x,fval,exitflag,output]=quaprog(...);1、二次规划例1minf(x1,x2)=-2x1-6x2+x12-2x1x2+2x22s.t.x1+x2≤2-x1+2x2≤2x1≥0,x2≥01、写成标准形式:2、输入命令:H=[1-1;-12];c=[-2;-6];A=[11;-12];b=[2;2];Aeq=[];beq=
3、[];VLB=[0;0];VUB=[];[x,z]=quadprog(H,c,A,b,Aeq,beq,VLB,VUB)3、运算结果为:x=0.66671.3333z=-8.2222s.t.1.首先建立M文件fun.m,定义目标函数F(X):functionf=fun(X);f=F(X);2、一般非线性规划其中X为n维变元向量,G(X)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划、二次规划中相同.用Matlab求解上述问题,基本步骤分三步:3.建立主程序.非线性规划求解的函数是fmincon,命令的基本格式如下:(1)x=fmincon(‘fun
4、’,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(‘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]=fmi
5、ncon(...)输出极值点M文件迭代的初值参数说明变量上下限注意:[1]fmincon函数提供了大型优化算法和中型优化算法。默认时,若在fun函数中提供了梯度(options参数的GradObj设置为’on’),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。[2]fmincon函数的中型算法使用的是序列二次规划法。在每一步迭代中求解二次规划子问题,并用BFGS法更新拉格朗日Hessian矩阵。[3]fmincon函数可能会给出局部最优解,这与初值X0的选取有关。1、写成标准形式:s.t.2x1+3
6、x26s.tx1+4x25x1,x20例22、先建立M-文件fun3.m:functionf=fun3(x);f=-x(1)-2*x(2)+(1/2)*x(1)^2+(1/2)*x(2)^23、再建立主程序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、运算结果为:x=0.76471.0588fval=-2.02941.先建立M文件fun4.m,定义目标函数:functionf=fun
7、4(x);f=exp(x(1))*(4*x(1)^2+2*x(2)^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=[x(1)+x(2);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
8、,A,b,