最優(yōu)化牛頓法最速下降法共軛梯度法matlab代碼_第1頁
最優(yōu)化牛頓法最速下降法共軛梯度法matlab代碼_第2頁
最優(yōu)化牛頓法最速下降法共軛梯度法matlab代碼_第3頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、word牛頓法迭代公式:x(k 1) xk 2f(x(k) 1 f (x(k)Matlab 代碼:fun cti on x1,k二n ewt on( x1,eps)hs=i nli ne('(x-1F4+yA2');寫入函數ezco ntour(hs,-10 10 -10 10);建立坐標系hold on; 顯示圖像 syms x y定義變量f=(x-1)A4+yA2;定義函數grad1=jacobia n(f,x,y);求f的一階梯度grad2=jacobia n( grad1,x,y);求f的二階梯度k=0;迭代初始值while 1 循環(huán)gradlz二subs(subs(g

2、rad1,x,x1(1),y,x1(2);給 f 一階梯度賦初值grad2z=subs(subs(grad2,x,x1(1),y,x1(2);給 f 二階梯度賦初值x2=x1-i nv (grad2z)*(grad1z):核心迭代公式if norm(x1-x2)<eps 判斷收斂條件break;畫圖elseplot(x1(1),x2(1),x1 (2),x2(2),'-r*');k=k+1;x仁 x2;endendend迭代繼續(xù)賦值優(yōu)點:在極小點附近收斂快缺點:但是要計算目標函數的hesse矩陣最速下降法1. :選取初始點xo,給定誤差2. 計算一階梯度。假如一階梯度小于

3、誤差,停止迭代,輸出3. 取 p(k)f(x(k)4.進行一維搜索,求tk,使得f (xk tkpk)mjnf(xk tpk)令xk 1kk -x tkP ,kk 1.轉第二步例題: 求 min (x-2)A4+(x-2*y)A2(1)編寫一個目標函數,fun cti on z = f( x,y )z=(x-2.0)八4+(x-2.0*yF2;end fun cti on z = fx( x,y )z=2.0*x-4.0*y+4.0*(x-2.0)八3;end和fun cti on z = fy( x,y )z=8.0*y-4.0*x;end3下面是腳本文件,一維搜索用的是黃金分割法Tic計算

4、時間eps=10A(-4);誤差err=10;dt=0.01;x0=1.0;初始值y0=1.0;mm=0;while err>eps黃金分割法dfx=-fx(xO,yO);dfy=-fy(x0,y0);tl=O;tr=1;確定一維搜索的區(qū)間h=3;nn=0;gerr=10;geps=10八(-4);while gerr>gepstil二tl+0.382*abs(tr-tl);trr二tl+0.618*abs(tr-tl);iff(xO+tll*h*dfx,yO+tll*h*dfy)>f(xO+trr*h*dfx,yO+trr*h*dfy)tl=tll;elsetr=trr;e

5、ndgerr二abs(tl-tr);區(qū)間的長度之差tt=0.5*(tl+tr);nn二nn+1;步數增加if nn>200迭代終止條件breakendendx0=x0+tt*h*dfx; 重新迭代y0=y0+tt*h*dfy;err=sqrt(fx(x0,y0)A2+fy(x0,y0)A2);mm=mm+1;步數增加if mm>700迭代步數超過700,終止break endendres二xO,yO;輸出最后的x, ytoe計算運行時間擬牛頓法DFP算法Stepl:給出乂。e1, = 0取*=一“宀Step2:若|v/(a>)<停止運算,此時取£ = ,vA

6、;否則,進行精確線搜索求即ak = arg min f (xk + arfA)并令衛(wèi)點= p +Step3:計算=xk+1 xkt+i J從比H =Hk +fr+iStep4:令 k = y 返回Step2. 注:第一步迭代與最速下降法相同.min f(x) x: 4xf,取x0(1,1),H0這是一個腳本文件可以直接運行syms x1x2;定義變量 eps=0.00001;xO二1,1'初始值h0=1,0;0,1;f=x1A2+4*x2A2;待求函數fx二diff(f,x1);對 x 求導fy二diff(f,x2);對 y 求導df=fx,fy;f的一階梯度賦初值dfx0二subs(

7、fx,x1,x2,x0),subs(fy,x1,x2,x0)'d0=-dfx0;搜索方向n=1;while 1syms t;s0=x0+t*d0;引入變量t ff=subs(f,x1,x2,s0) 給 f 賦值; t=solve(diff(ff); 求ff 的極小點xx仁x0+t*d0;更新初始值賦值dfx仁subs(fx,x1,x2,xx1'),subs(fy,x1,x2,xx1')'pp二sqrt(dfx1*dfx1');判斷此時一階梯度的值if (ppvO.001)迭代終止條件breakenda1=xx1-x0;r1=dfx1-dfx0;的更新h仁

8、hO+(a1*a1')/(a1'*r1)-(hO*r1*r1'*hO)/(r1'*hO*r1);hOd1=-h1*dfx1;搜索方向的更新d0=d1;循環(huán)賦值x0=xx1;循環(huán)賦值h0=h1;二階梯度的近似的更新n=n+1;計算迭代步數end共軛梯度法(1,1)T求二次函數f(X1,X2)x2 2x| 4x1 2x1x2的極小點。取初始點x(0)這是一個腳本文件clc;clear all ;syms xyt ;定義變量xO二1,1;初始值n=1 ;初始迭代t=0;f1=xA2+2*yA2-4*x-2*x*y;待求函數 dfx=diff(f1,x);求函數的對x一

9、階梯度dfy=diff(f1,y);函數對y的一階梯度df=dfx,dfy;函數一階梯度以數組的形式while 1 syms kk;在循環(huán)里定義變量給一階梯度賦值kk的函數g0二subs(dfx,x,y,x0),subs(dfy,x,y,x0);s0=-g0; 下降方向m0=x0+kk*s0;引入變量 kkf11=f(m0(1),m0(2);帶入原函數,得到關于kk=solve(diff(f11);求 f11 的極小點m仁xO+kk*sO; 更新迭代初始值給一階梯度賦值g1= subs(dfx,x,y,m1),subs(dfy,x,y,m1);s1=-g1;k=(s1*s1')/(gO*gO');s2=s1+

溫馨提示

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

評論

0/150

提交評論