logo资料库

最速下降法、DFP法.doc

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
%所求问题目标函数
%所求问题目标函数梯度
%功能:用最速下降法求无约束问题最小值
%功能:用DFP法求无约束问题最小值
%所求问题目标函数
%所求问题目标函数梯度
%功能:用最速下降法求无约束问题最小值
%功能:用DFP法求无约束问题最小值
题目:分别用最速下降法、DFP 法求解问题: 1、 min f (x)  3  i 1  2 X(i)  10*cos(2*pi*X(i)) 1  0 2、 min f  3  i 1  X i ( ) / 4000 2  cos X i ( ) / ( sqrt i ( )) 1  ,通过 Matlab 编程实现求解过程。 T  x (1,1,1) 1 取初始点 (1) 1 公用函数如下: 1、function f= 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*c os(2*pi*X(3))+10; %所求问题目标函数梯度 g=[2*X(1)+20*pi*sin(2*pi*X(1)),2*X(2)+20*pi*sin(2*pi*X(2)),2*X(3) 2、function g= gfun( X ) +20*pi*sin(2*pi*X(3))]; end end 3、function He = 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
if(feval(fun,x0+rho^m*d)
gk=feval(gfun,x0); if(norm(gk)0) end k=k+1; x0=x; end val=feval(fun,x0); end Hk=Hk-(((Hk*yk')*yk)*Hk)/(yk*Hk*yk')+(sk'*sk)/(sk*yk'); x 2 取初始点 (1) 1 公用函数如下:  (1,1,1) T ,通过 Matlab 编程实现求解过程。
1、function f= fun( X ) %所求问题目标函数 end 2、function g= gfun( 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; %所求问题目标函数梯度 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、function He = 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
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
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
分享到:
收藏