题目:分别用最速下降法、DFP法求解问题:

1、

2、

1取初始点,通过Matlab编程实现求解过程。

1公用函数如下:

1、functionf= fun( X )

%所求问题目标函数

f=X(1)^2-10*cos(2*pi*X(1))+10+X(2)^2-10*cos(2*pi*X(2))+10+X(3)^2-10*cos(2*pi*X(3))+10;

end

2、functiong= gfun( X )

%所求问题目标函数梯度

g=[2*X(1)+20*pi*sin(2*pi*X(1)),2*X(2)+20*pi*sin(2*pi*X(2)),2*X(3)+20*pi*sin(2*pi*X(3))];

end

3、functionHe = Hess( X )

%所求问题目标函数Hesse矩阵

n=length(X);

He=zeros(n,n);

He=[2+40*pi*pi*cos(X(1)),0,0;

0,2+40*pi*pi*cos(X(2)),0;

0,0,2+40*pi*pi*cos(X(3))];

end

解法一:最速下降法

function[ x,val,k ] = grad( fun,gfun,x0 )

%功能:用最速下降法求无约束问题最小值

%输入:x0是初始点,fun和gfun分别是目标函数和梯度

%输出:x、val分别是最优点和最优值,k是迭代次数

maxk=5000;%最大迭代次数

rho=0.5;sigma=0.4;

k=0;eps=10e-6;

while(k

g=feval(gfun,x0);%计算梯度

d=-g;%计算搜索方向

if(norm(d)

break;

end

m=0;mk=0;

while(m<20)

if(feval(fun,x0+rho^m*d)

mk=m;break;

end

m=m+1;

end

x0=x0+rho^mk*d;

k=k+1;

end

x=x0;

val=feval(fun,x0);

end

解法二:DFP法

function[ x,val,k ] = dfp( fun,gfun,x0 )

%功能:用DFP法求无约束问题最小值

%输入:x0是初始点,fun和gfun分别是目标函数和梯度

%输出:x、val分别是最优点和最优值,k是迭代次数

maxk=5000;%最大迭代次数

rho=0.5;sigma=0.4;

k=0;eps=10e-6;

n=length(x0);

Hk=inv(feval('Hess',x0));

while(k

gk=feval(gfun,x0);

if(norm(gk)

break;

end

dk=-Hk*gk';

dk=dk';

m=0;mk=0;

while(m<20)

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);

end

2取初始点,通过Matlab编程实现求解过程。

1公用函数如下:

1、functionf= fun( X )

%所求问题目标函数

f=X(1)^2/4000-cos(X(1)/sqrt(1))+1+X(2)^2/4000-cos(X(2)/sqrt(2))+1+X(3)^2/4000-cos(X(3)/sqrt(3))+1;

end

2、functiong= gfun( X )

%所求问题目标函数梯度

g=[X(1)/2000+sin(X(1)/sqrt(1))/sqrt(1),X(2)/2000+sin(X(2)/sqrt(2))/sqrt(2),X(3)/2000+sin(X(3)/sqrt(3))/sqrt(3)]

end

3、functionHe = Hess( X )

%所求问题目标函数Hesse矩阵

n=length(X);

He=zeros(n,n);

He=[1/2000+cos(X(1)),0,0;

0,1/2000+cos(X(2))/2,0;

0,0,cos(X(3)/3)];

end

解法一:最速下降法

function[ x,val,k ] = grad( fun,gfun,x0 )

%功能:用最速下降法求无约束问题最小值

%输入:x0是初始点,fun和gfun分别是目标函数和梯度

%输出:x、val分别是最优点和最优值,k是迭代次数

maxk=5000;%最大迭代次数

rho=0.5;sigma=0.4;

k=0;eps=10e-6;

while(k

g=feval(gfun,x0);%计算梯度

d=-g;%计算搜索方向

if(norm(d)

break;

end

m=0;mk=0;

while(m<20)

if(feval(fun,x0+rho^m*d)

mk=m;break;

end

m=m+1;

end

x0=x0+rho^mk*d;

k=k+1;

end

x=x0;

val=feval(fun,x0);

end

2.1.

2.2解法二:DFP法

function[ x,val,k ] = dfp( fun,gfun,x0 )

%功能:用DFP法求无约束问题最小值

%输入:x0是初始点,fun和gfun分别是目标函数和梯度

%输出:x、val分别是最优点和最优值,k是迭代次数

maxk=5000;%最大迭代次数

rho=0.5;sigma=0.4;

k=0;eps=10e-6;

n=length(x0);

Hk=inv(feval('Hess',x0));

while(k

gk=feval(gfun,x0);

if(norm(gk)

break;

end

dk=-Hk*gk';

dk=dk';

m=0;mk=0;

while(m<20)

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);

end

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐