最优化理论与算法------阻尼牛顿法(附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];

 

 

注意修改原函数,一阶偏导函数,二阶偏导函数。

posted @ 2020-12-17 10:35  北漂的尘埃  阅读(4167)  评论(5编辑  收藏  举报