非线性规划
一、非线性规划的 Matlab 解法
X=FMINCON(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON,OPTIONS)
Matlab 中非线性规划的数学模型写成以下形式:
其中 f(x) 是标量函数,A,B,Beq Aeq 是相应维数的矩阵和向量,C(x),Ceq(x) 是非
线性向量函数。它的返回值是向量 x ,其中 FUN 是用 M 文件定义的函数 f(x),x0是 x 的
初始值;A,B,Aeq,Beq 定义了线性约束 A*XB,Aeq*X=Beq , 如果没有线性约束,则
A=[],B=[],Aeq=[],Beq=[];LB 和 UB 是变量 x 的下界和上界,如果上界和下界没有约束,则
LB=[],UB=[],如果 x 无下界,则 LB 的各分量都为-inf,如果 x 无上界,则 UB的各分量都
为 inf;NONLCON 是用 M 文件定义的非线性向量函数 C(x),Ceq(x) ;OPTIONS定义了
优化参数,可以使用 Matlab 缺省的参数设置。
%fun1.m 定义目标函数
function f=fun1(x);
f=sum(x.^2)+8;
%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]; %非线性等式约束
%主程序文件 example2.m 如下:
options=optimset('largescale','off');
[x,y]=fmincon('fun1',rand(3,1),[],[],[],[],zeros(3,1),[], ...
'fun2', options)
二、无约束极值问题的解法
1、最快下降法
- 选取初始数据。选取初始点 ,给定终止误差,令k:=0.
- 求梯度向量。计算,若 停止迭代,输出,否则进行第三步.
- 构造负梯度方向。取
- 进行一维搜索。求 ,使得
令 ,转第二步
eg.用最速下降法求解无约束非线性规划问题
,其中 ,要求选取初始点
%detaf.m定义函数f(x)及其梯度列向量
function [f,df]=detaf(x)
f=x(1)^2+25*x(2)^2;
df=[2*x(1)
50*x(2)];
%最速下降法主函数
clc,clear
x=[2,2];
[f0,g]=detaf(x);
while norm(g)>0.000001 %=norm(g,2)求g的2范数,类似求当前点距离最低点的长度
p=-g/norm(g);
t=1.0;
f=detaf(x+t*p);
while f>f0 %调整跨度t的大小
t=t/2;
f=detaf(x+t*p);
end
x=x+t*p; %跨步,更新x,f0
[f0,g]=detaf(x);
end
x,f0
2、Newton法
- 选取初始数据。选取初始点 ,给定终止误差,令k:=0.
- 求梯度向量。计算,若 停止迭代,输出,否则进行第三步.
- 构造Newton方向。计算 ,取
- 求下一迭代点。令 ,转第二步
2-eg. ,选取
解:
%nwfun.m 求f(x)的一阶和二阶偏导
function [f,df,d2f]=nwfun(x);
f=x(1)^4+25*x(2)^4+x(1)^2*x(2)^2;
df=[4*x(1)^3+2*x(1)*x(2)^2;100*x(2)^3+2*x(1)^2*x(2)];
d2f=[2*x(1)^2+2*x(2)^2,4*x(1)*x(2)
4*x(1)*x(2),300*x(2)^2+2*x(1)^2];
%newton.m 牛顿迭代法,优点是收敛速度快;缺点是有时不好用而需采取改进措施
clc,clear
x=[2;2];
[f0,g1,g2]=nwfun(x);
while norm(g1)>0.00001
p=-inv(g2)*g1;p=p/norm(p);
t=1.0;f=nwfun(x+t*p);
while f>f0
t=t/2;f=nwfun(x+t*p);
end
x=x+t*p;
[f0,g1,g2]=nwfun(x);
end
x,f0
三、Matlab 求无约束极值问题
- [X,FVAL]=FMINUNC(FUN,X0,OPTIONS,P1,P2, ...)
- [X,FVAL,EXITFLAG,OUTPUT]=FMINSEARCH(FUN,X0,OPTIONS,P1,P2,...)
其中的返回值 X 是所求得的极小点,FVAL 是函数的极小值
四、约束极值问题
带有约束条件的极值问题称为约束极值问题,也叫规划问题。
1、若某非线性规划的目标函数为自变量 x 的二次函数,约束条件又全是线性的,就称
这种规划为二次规划。
Matlab 中二次规划的数学模型可表述如下:
这里 H 是实对称矩阵, b f , 是列向量, A 是相应维数的矩阵。Matlab 中求解二次规划的命令是:
[X,FVAL]= QUADPROG(H,f,A,b,Aeq,beq,LB,UB,X0,OPTIONS)
%二次规划
h=[4,-4;-4,8];
f=[-6;-3];
a=[1,1;4,1];
b=[3;9];
[x,value]=quadprog(h,f,a,b,[],[],zeros(2,1))
2、fminimax 函数
X=FMINIMAX(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON)
求解
上一篇: Idea自动生成注释、创建javadoc