最优化之
DFP
算法考试题
代码:
Dfp.m
文件
function [x,val,k]=dfp(fun,gfun,x0)
%
功能
:
用
DFP
算法求解无约束问题
:
min f(x)
%
输入
:
x0
是初始点
,
fun, gfun
分别是目标函数及其梯度
%
输出
:
x, val
分别是近似最优点和最优值
,
k
是迭代次数
maxk=1e5; %
给出最大迭代次数
rho=0.55;sigma=0.4; epsilon=1e-5;
k=0;
n=length(x0);
Hk=inv(feval('He',x0)); %Hk=eye(n);
while(k
gk=feval(gfun,x0); %
计算梯度
if(norm(gk)
检验终止准则
dk=-Hk*gk; %
解方程组
,
计算搜索方向
m=0; mk=0;
while(m<20) %
用
Armijo
搜索求步长
if(feval(fun,x0+rho^m*dk)
mk=m; break;
end
m=m+1;
end
%
DFP
校正
x=x0+rho^mk*dk;
sk=x-x0; yk=feval(gfun,x)-gk;
if(sk'*yk>0)
Hk=Hk-(Hk*yk*yk'*Hk)/(yk'*Hk*yk)+(sk*sk')/(sk'*yk);
end
k=k+1; x0=x;
end
val=feval(fun,x0);
fun.m
文件
(
此处为目标函数,因题而异
)
function f=fun(x)
f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;
gfun.m
文件(目标函数的梯度)
function gf=gfun(x)
gf=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1), -200*(x(1)^2-x(2))]';
He.m
文件(
Hesse
阵)
function He=He(x)
He=[1200*x(1)^2-400*x(2)+2, -400*x(1); -400*x(1), 200];