最优化理论与算法------阻尼牛顿法(附Matlab实现)
1 function[x,val,k]=dampnm(fun,gfun,Hess,x0) 2 %功能:用阻尼牛顿法求解无约束优化问题:minf(x); 3 %输入:x0是初始点,fun,gfun,Hess分别是目标函数和梯度Hess阵函数; 4 %输出:x,va1分别是近似最优解和近似最优值,k是迭代次数; 5 maxk = 5000; 6 rho = 0.55; 7 sigma =0.4; 8 k = 0; 9 epsion = 1e-8; 10 while (k<maxk) 11 gk=feval(gfun,x0); 12 Gk=feval(Hess,x0); 13 dk=-inv(Gk)*transpose(gk); 14 if(norm(dk)<epsion) 15 break; 16 end 17 m=0; 18 mk=0; 19 while(m<20) 20 if(feval(fun,x0+rho^m*dk)<=feval(fun,x0)+sigma*rho^m*gk*dk) 21 mk=m; 22 break; 23 end 24 m=m+1; 25 end 26 x0=x0+rho^mk*dk; 27 k=k+1; 28 end 29 x=x0; 30 val=feval(fun,x);
1 function y = fun(x) 2 %原函数 3 y = (1 - x(1))^2 + 100*(x(2)-x(1)^2)^2;
1 function g = gfun(x) 2 %求一阶偏导函数 3 g = [-2+2*x(1)-400*x(1)*(x(2)-x(1)^2),200*(x(2)-x(1)^2)];
1 function He = Hess(x) 2 n = length(x); 3 He = zeros(n,n); 4 %求二阶偏导函数 5 He = [2-400*(x(2)-3*x(1)^2),-400*x(1);-400*x(1),200];
注意修改原函数,一阶偏导函数,二阶偏导函数。