非线性规划的 Matlab 解法

Matlab 中非线性规划的数学模型写成以下形式



Matlab 中的命令是

x = fmincon(fun,x0,A,b)

x = fmincon(fun,x0,A,b,Aeq,beq)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

[x,fval] = fmincon(…)

[x,fval,exitflag] = fmincon(…)

[x,fval,exitflag,output] = fmincon(…)

[x,fval,exitflag,output,lambda] = fmincon(…)

[x,fval,exitflag,output,lambda,grad] = fmincon(…)

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(…)

   它的返回值是向量x ,其中 FUN 是 用M文件定义的函数f(s);X0 是x 的初始值;A,B,Aeq,Beq 定义了线性约束 ,如果没有线性约束,则A=[],B=[],Aeq=[],Beq=[];LB 和 UB 是变量 x 的下界和上界,如果上界和下界没有约束,则 LB=[],UB=[],如果x 无下界,则 LB 的各分量都为-inf,如果x 无上界,则 UB的各分量都为 inf;NONLCON 是用 M 文件定义的非线性向量函数 C(x),Ceq(x);OPTIONS定义了优化参数,可以使用 Matlab 缺省的参数设置。

   

   fval是目标函数值。lambda是Lagrange乘子,它体现哪一个约束有效。output输出优化信息;grad表示目标函数在x处的梯度;hessian表示目标函数在x处的Hessiab值。


例   求下列非线性规划



                           


解   (i)编写 M 文件 fun1.m 定义目标函数

function f=fun1(x);

f=sum(x.^2)+8;

 (ii )编写M文件fun2.m定义非线性约束条件

function [g,h]=fun2(x);

g=[-x(1)^2+x(2)-x(3)^2

x(1)+x(2)^2+x(3)^3-20];   %非线性不等式约束

h=[-x(1)-x(2)^2+2

x(2)+2*x(3)^2-3]; %非线性等式约束

(iii )编写主程序文件 如下:

options=optimset('largescale','off');

[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'fun2', options)



注:初值x0可任取,但必须在lb和ub的区间内。