運籌學第一次實驗_第1頁
運籌學第一次實驗_第2頁
運籌學第一次實驗_第3頁
運籌學第一次實驗_第4頁
運籌學第一次實驗_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、熟練利用0.618法,共軛梯度法以及非二次函數(shù)的共軛梯度法求解相關問題。(一) 問題描述0.618法:min f(x)=2x2-x-1,a1,b1=-1,1,精度L0.16共軛梯度法(CG算法): min f(x)=x12-x1x2+x22+2x1-4x2 非二次的共軛梯度法(CG算法推廣):min f(x)=(1-x1)2+2(x2-x12)2 (三) 算法介紹(1)0.618法Step1:對區(qū)間a,b= a1,b1中取兩點:1=a1+0.382(b1-a1),1=a1+0.618(b1-a1)Step2:若bk-ak<,停止運算,輸出結果,否則計算并比較。若(k)(k),則ak+1=

2、ak,bk+1=k,k+1=k,k+1=ak+1+0.382*(bk-ak+1)若(k)(k),則ak+1=k,bk+1=bk,k+1=k,k+1=ak+1+0.618*(bk-ak+1)Step3:置k:=k+1,返回Step2(2)CG算法原理及步驟:n元正定二次函數(shù)f(x)=1/2xTQx+bT+c,給定任一初始點x0,計算d0=-g0,置k:=0step1:tk=gkTgk/dkTQdk,xk+1=xk+tkdkstep2:判斷|gk+1|<,若成立則終止,輸出。否則轉step3step3:計算下一次的搜索方向dk+1=-gk+1+kdk,其中k=gk+1TQdk/dkTQdks

3、tep4:置k:=k+1,轉step1進行下一次迭代。(3)CG算法的推廣:對tk:改用直接的e.l.s,求得步長因子。對k:k=gk+1Tgk+1/gkTgk(四)程序代碼及運行結果:(1)0.618法源程序代碼a=-1;%區(qū)間端點b=1; %區(qū)間端點fprintf('初始區(qū)間為');interval=a,be=0.16;%誤差q=b-a;u1=a+0.382*(b-a);u2=a+0.618*(b-a);n=0;while q>e n=n+1; f1=2*u12-u1-1; f2=2*u22-u2-1; if f1<f2 b=u2; u2=u1; u1=a+0.

4、382*(b-a); fprintf('得到新區(qū)間為'); interval=a,b else a=u1; u1=u2; u2=a+0.618*(b-a); fprintf('得到新區(qū)間為'); interval=a,b end q=b-a;end interval=a,bfprintf('使f=2*x2-x-1去的最小值的x為: ');x=(b+a)/2fprintf('f的最小值為:');f=2*x2-x-1fprintf('共計迭代了n步:');n(2)0.618法 運行結果: 初始區(qū)間為:interval

5、= -1 1得到的新區(qū)間為:得到的新區(qū)間為:interval = -0.2360 0.5278得到的新區(qū)間為:得到的新區(qū)間為:interval = 0.0558 0.3475得到的新區(qū)間為:得到的新區(qū)間為:interval = 0.1672 0.2787使f=2*x2-x-1取得最小值的x為:x = 0.2229f的最小值為:f = -1.1235共計迭代了n步:n = 6(3)CG法源程序代碼function f=Untitled3(x0,e)syms x1 x2f=x12-x1*x2+x22+2*x1-4*x2;a=diff(f,x1);b=diff(f,x2);a=subs(a,x1,x

6、2,x0);b=subs(b,x1,x2,x0);g=a;bQ=2 -1;-1 2;d=-g;x=x0;n=0;while double(sqrt(a2+b2)>0.2 t=(g.'*g)/(d.'*Q*d); x=x+t*d; f=x12-x1*x2+x22+2*x1-4*x2; a=diff(f,x1); b=diff(f,x2); a=subs(a,x1,x2,x); b=subs(b,x1,x2,x); g=a;b; p=(g.'*Q*d)/(d.'*Q*d); d=-g+p*d; n=n+1; endfprintf('最優(yōu)解為:'

7、);xfprintf('共迭代了n步');n(4)CG法 運行結果:在matlab對話框中輸入Untitled3(0;0,0.2) 得到結果:最優(yōu)解為:x = 0 2共迭代了n步:n = 2在matlab對話框中輸入Untitled3(-1;1,0.2) 得到結果:最優(yōu)解為:x = 0 2共迭代了n步:n = 1(5)CG推廣法源程序代碼:function f=num3(x0,e)syms x1 x2 tx=x0;f=(1-x1)2+2*(x2-x12)2;a=diff(f,x1);b=diff(f,x2);a=subs(a,x1,x2,x0);b=subs(b,x1,x2,x

8、0);g=a;b;d=-g; n=0;while double(sqrt(a2+b2)>e x=x+t*d; f=subs(f,x1,x2,x); f1=diff(f); f1=solve(f1); if f1=0 ti=double(f1); else break end x=subs(x,t,ti(1,1); m=g.'*g; f=(1-x1)2+2*(x2-x12)2; a1=diff(f,x1); b1=diff(f,x2); a1=subs(a1,x1,x2,x); b1=subs(b1,x1,x2,x); g1=a1;b1; p=(g1.'*g1)/m; d=

9、-g1+p*d; a-a1; b=b1; n=n+1;endfprintf('最優(yōu)解為:');xfprintf('最小值為:');f=subs(f,x1,x2,x)fprintf('共迭代了n步:');n (6)CG法推廣 運行結果:在matlab對話框中輸入num3(0;0,0.001) 得到結果:最優(yōu)解為: x = 1 1最小值為:f = 0共迭代了n步n = 2(六)結果分析針對0.618法:在本題手工計算時我們采用了借助圖像簡化計算,matlab運算的結果與手工計算結果基本完全吻合,兩種方法的正確性互相得到了驗證。針對CG法:本題我們分別選擇了兩個初始點進行迭代,對這兩個初始點進行比較可以看出使用(-1,1)這個初始點迭代步數(shù)更少,同時使用該點作為初始點進行手工計算時計算量也相對小于(0,0)作為初始點,因此我們要根據(jù)實際情況選擇初始點。針對CG推廣法:是在CG法基礎上進行修改,用

溫馨提示

  • 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

提交評論