最優化算法-Matlab程序_第1頁
最優化算法-Matlab程序_第2頁
最優化算法-Matlab程序_第3頁
最優化算法-Matlab程序_第4頁
最優化算法-Matlab程序_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、CG程序代碼function x,y = cg(A,b,x0)%算法 % r0 = A*x0-b;p0 = -r0;k = 0;r = r0;p = p0;x = x0;while r=0alpha = -r'*p/(p'*A*p);x = x+alpha*p;rold = r;r = rold+alpha*A*p;beta = r'*r/(rold'*rold);p = -r+beta*p; plot(k,norm(p),'.-');hold onk = k+1;end y.funcount = k;y.fval = x'*A*x/2-

2、b'*x;CG-FR程序代碼function x,y = cg_FR(fun,dfun,x0)%CGJ算法 %error = 10A-5;f0 = feval(fun,x0);df0 = feval(dfun,x0);p0 = -df0;f = f0;df = df0;p = p0;x = x0;k = 0;while (norm(df)>error)&&(k<1000)f = feval(fun,x);%alpha,funcNk,exitflag = lines(fun,0.01,0.15,0.85,6,f,df'*p,x,p);% 用線搜索找下降

3、距離 if exitflag = -1disp('Break!');break;endx = x+alpha*p;dfold = df;df = feval(dfun,x);beta = df'*df/(dfold'*dfold);p = -df+beta*p;plot(k,norm(df),'.-');hold onk = k+1;endy.funcount = k;y.fval = feval(fun,x);y.error = norm(df);BFGS程序代碼function x,output = bfgs(fun,dfun,x0,vara

4、rgin)%優化課程 BFGS算法程序 % epsi = 1.0e-6;k = 0; funcN = 0; rho = 0.01;l = 0.15; u = 0.85;x = x0;f = feval(fun,x,varargin:);funcN = funcN + 1;n = length(x0);H = eye(n);g = feval(dfun,x,varargin:); while norm(g)>epsi && k<=1000 itercon = true;d = -H*g;alpha_0 = 1;gd = g'*d;alpha,funcNk,ex

5、itflag = lines(fun,rho,l,u,alpha_0,f,gd,x,d,varargin:); funcN = funcN + funcNk;if exitflag = -1 itercon = false; restart = true; H = eye(n); gold = g;endif itercon s = alpha*d;x = x + s; f = feval(fun,x,varargin:); funcN = funcN + 1; gold = g;g = feval(dfun,x,varargin:);y = g - gold; hy = H*y; sy =

6、s'*y; yhy = y'*hy;if sy<0.2*yhytheta = 0.8*yhy/(yhy-sy); s = theta*s + (1 - theta)*hy; sy = 0.2*yhy;endv = sqrt(yhy)*(s/sy - hy/yhy);H = H + s*s'/sy - hy*hy'/yhy + v*v' endk = k + 1;end output.fval = f; output.iteration = k; output.funcount = funcN; output.gnorm = norm(g);Newt

7、on-CG 程序代碼function x,output = newton_cg(fun,dfun,ddfun,x0)%優%化 7.1 算法程序 % n = length(x0);x = x0;k = 1;d(1,1:n) = zeros(1,n); %循環開始,直至滿足條件結束%while (n orm(feval(dfu n,x)>=10A-5) &&(k<20000)epsi(k) = min(0.5,sqrt(norm(feval(dfun,x)*norm(feval(dfun,x); z(1,1:n) = zeros(1,n);B = feval(ddfun

8、,x);r(1,1:n) = feval(dfun,x)'d(1,1:n) = -r(1,1:n);p = zeros(1,n)'for j=1:k%尋找最優下降方向 %if d(j,1:n)*B*d(j,1:n)'<=0if j=1p = -r(k,1:n)' break;elsep = z(j,1:n)'break;endendalpha = r(j,1:n)*r(j,1:n)'/(d(j,1:n)*B*d(j,1:n)');z(j+1,1:n) = z(j,1:n) + alpha*d(j,1:n);r(j+1,1:n) =

9、r(j,1:n) + alpha*(B*d(j,1:n)')'if norm(r(j+1,1:n)<epsi(k)p = z(j+1,1:n)'break;endbeta = r(j+1,1:n)*r(j+1,1:n)'/(r(j,1:n)*r(j,1:n)');d(j+1,1:n) = -r(j+1,1:n) + beta*d(j,1:n);end %方向找尋結束 % %獲得新的迭代點 %gd = -d(1,1:n)*d(1,1:n)'alpha1,funcNk,exitflag = lines(fun,0.01,0.15,0.85,1,

10、feval(fun,x),gd,x,d(1,1:n)');x = x + alpha1*p; k = k + 1;endoutput.fval = feval(fun,x);output.funcount = k;CG- Steihaug程序代碼function x,output = cg_steihaug(fun,dfun,ddfun,x0)%優%化 7.2 算法程序 % %參數初始化 %n = length(x0);x = x0;k = 1;d(1,1:n) = zeros(1,n);%開始循環,直至滿足條件%while (n orm(feval(dfu n,x)>=10A-

11、5) &&(k<2000)epsi(k) = min(0.5,sqrt(norm(feval(dfun,x)*norm(feval(dfun,x);z(1,1:n) = zeros(1,n);B = feval(ddfun,x);r(1,1:n) = feval(dfun,x)'d(1,1:n) = -r(1,1:n);delta(k) = 1;%p = 0,0'%開%始搜索最優下降方向%此%算法利用信賴域法尋找方向%if norm(r(1,1:n)<epsi(k)p = z(1,1:n)'break;endfor j=1:kif d(j,1

12、:n)*B*d(j,1:n)'<=0%delta(k)s,val,posdef,count,lambda = trustM(r(k,1:n)',B,delta(k);p = s;break;endalpha = r(j,1:n)*r(j,1:n)'/(d(j,1:n)*B*d(j,1:n)');z(j+1,1:n) = z(j,1:n) + alpha*d(j,1:n);if(norm(z(j+1,1:n)>=delta(k)%tao =(-4*z(j,1: n)*d(j,1: n)'+sqrt(2*z(j,1: n)*d(j,1: n)'F2-4*(z(j,1: n)*z(j,1: n)'-delta(k)A2)/(2*d(j,1: n)*d(j,1:n)');p = z(j,1:n)' + tao*d(j,1:n)'break;endr(j+1,1:n) = r(j,1:n) + alpha*(B*d(j,1:n)')'if norm(r(j+1,1:n)<epsi(k)p = z(j+1,1:n)'break 八endbefa H rji一5)*0+1 V-S7(r015)*A1 m)-)八dq+1 i m) nA+l iS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論