最速下降法matlab全局最小值_matlab实现最速下降法和dfp求函数最小值
题目:分别用最速下降法、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;end2、functiong= gfun( X )%所求
题目:分别用最速下降法、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
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)