最優化理論與算法------阻尼牛頓法(附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];

 

 

注意修改原函數,一階偏導函數,二階偏導函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM