黃金分割法,進退法,基礎原理及經過流程圖_第1頁
黃金分割法,進退法,基礎原理及經過流程圖_第2頁
黃金分割法,進退法,基礎原理及經過流程圖_第3頁
黃金分割法,進退法,基礎原理及經過流程圖_第4頁
黃金分割法,進退法,基礎原理及經過流程圖_第5頁
已閱讀5頁,還剩8頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

1、*1黃金分割法的優化問題(1)黃金分割法基本思路:黃金分割法適用于a , b區間上的任何單股函數求極小值問題, 對函 數除要求“單谷”外不做其他要求,甚至可以不連續。因此,這種方 法的適應面非常廣。黃金分割法也是建立在區間消去法原理基礎上的 試探方法,即在搜索區間a, b內適當插入兩點al, a2,并計算其 函數值。al, a2將區間分成三段,應用函數的單谷性質,通過函數 值大小的比較,刪去其中一段,是搜索區間得以縮小。然后再在保留 下來的區間上作同樣的處理,如此迭代下去,是搜索區間無限縮小, 從而得到極小點的數值近似解。(2)黃金分割法的基本原理一維搜索是解函數極小值的方法之一,其解法思想為

2、沿某一已知方向 求目標函數的極小值點。一維搜索的解法很多,這里主要采用黃金分 割法(0.618法)。該方法用不變的區間縮短率 0.618代替斐波那契 法每次不同的縮短率,從而可以看成是斐波那契法的近似, 實現起來 比較容易,也易于人們所接受。rl=a+0,382(>-a) r2=a+0,618Cb-a) 如圖班2戶母4) 所以新區間為a ,于2以為新區間,繼域求新的試點黃金分割法是用于一元函數f(x)在給定初始區間a,b內搜索極 小點* *的一種方法。它是優化計算中的經典算法,以算法簡單、收 斂速度均勻、效果較好而著稱,是許多優化算法的基礎,但它只適用 于一維區間上的凸函數6,即只在單峰

3、區間內才能進行一維尋優,其 收斂效率較低。其基本原理是:依照“去劣存優”原則、對稱原則、 以及等比收縮原則來逐步縮小搜索區間7。具體步驟是:在區間a,b 內取點:al , a2把a,b分為三段。如果f(a1)>f(a2),令 a=a1,a1=a2,a2=a+r*(b-a);如果 f(a1)<f(a2),令 b=a2,a2=a1,a1=b-r*(b-a), 如果 | (b-a)/b | 和 | (y1-y2)/y2| 都大于收斂精度e重新開始。因為a,b為單峰區間,這樣每次可將搜索區間 縮小0.618倍或0.382倍,處理后的區間都將包含極小點的區間縮小, 然后在保留下來的區間上作同

4、樣的處理,如此迭代下去,將使搜索區a,b逐步縮小,直到滿足預先給定的精度時,即獲得一維優化問題 的近似最優解。黃金分割法原理如圖1所示,(3)程序流程如下:*4實驗所編程序框圖結束#include math.h#include «stdio.h»#define f(x) x*x+2*xdouble calc(double *a,double *b,double e,int *n) double x1,x2,s;if(fabs(*b-*a)<=e)s=f(*b+*a)/2);else x1=*b-0.618*(*b-*a);x2=*a+0.618*(*b-*a);if(

5、f(x1)>f(x2)*a=x1;else*b=x2;*n=*n+1;s=calc(a,b,e,n);return s;main() double s,a,b,e;int n=0;scanf("%lf %lf %lf",&a,&b,&e);s=calc(&a,&b,e,&n);printf("a=%lf,b=%lf,s=%lf,n=%dn",a,b,s,n);5程序運行結果如下圖:2進退法(1)算法原理進退法是用來確定搜索區間(包含極小值點白區間)的算法,其理論依據是:f(x)為單谷函數(只有一個極值

6、點),且a,b為其極小值點的一個搜索區間,對于任意xla,b,如果f k fX2,則a, X2為極小值的搜索區間,如果fxifX2,則xi,b為極小值的搜索區間。因此,在給定初始點xo,及初始搜索步長h的情況下,首先以初始步長向前搜索一步,計算f x0 h。(1)如果 f x0f x0 h則可知搜索區間為%x0 h,其中%寺求,為確定 %后退一步計算f(x°h),為縮小系數,且01,直接找到合適的,使得f(xoh) f xo ,從而確定搜* .索區間xoh, xo h。(2)如果 f % f x0 h則可知搜索區間為xo,%,其中%寺求,為確定 前進一步計算f (xoh), 為、,a

7、一,、 a 4、一*放大系數,且 1 ,知道找到合適的,使得f % hf (xoh),從而確定搜索*.區間xo, %h。進退法求極值基本思想:對f(x)任選一個初始點xi及初始步長ho,通過比較這兩點函數值的大 小,確定第三點位置,比較這三點的函數值大小,確定是否為“高一低-高”形態。 算法原理 1.試探搜索:選定初始點(a)(b)x1, x2= x 1+ ho,計算 y1=f(x1),y2=f(x2)如y1>y2,轉2向右前進;如 y1<y22.前進搜索加大步長 h=2 h ,廣生新點 x3= x2+ 2h o ;*(a)如y2<y3,則函數在xi,x3內必有極小點,令 a

8、=xi,b= x3搜索區間為a, b;(b)如 y2>y3,令 xi=x2 , y產y2 ;x2=x3 , y2=y3 ; h=2h重新構造新點 x3=x2+h,y2<y3。圖8.23.后退搜索令h = -ho,令x3=x 1產生新點x3= x 2+ h ;(a)如y2<y3,則函數在為a, b(b)如 y2>y3,y3=yi ; xi=x2 , yi=y2 ;xi, x3內必有極小點,x2=x3 , y2=y3 ; h=2h;a= x3, b= x i,搜索區間令 xi=x2 , yi=y2 ; x2=x3 , y2=y3 ; 重新構造新點x3=x2+h,并比較y2、

9、y3的大小, 搜索區間為a, b;h=2h直至ij y2<y3。令 a= xi, b= x 3,圖8.3(2)算法步驟用進退法求一維無約束問題min f(x),x R的搜索區間(包含極小值點的區間)的基本算法步驟如下:(1) 給定初始點x(0),初始步長ho,令hho, x(i)x(0), k 0 ;(2) 令xxh,置k k 1;(3) 若f xf x,則轉步驟(4),否則轉步驟(5);(4)令 x(2)x x(1)x(4), f x(2)f x(1) , f x f x(4),令 h 2h,轉步驟(2);(5) 若k 1 ,則轉步驟(6)否則轉步驟(7);(6)令h h, xx,f

10、x f x,轉步驟(2); 令xx,xx,xx,停止計算,極小值點包含于區間x(1),x(3)或x(3),x(1)(3)算法的MATLAB 實現在MATLAB中編程實現的進退函數為:min JT功能:用進退法求解一維函數的極值區間。調用格式:min x,max x min JT( f, x0, h0,eps)其中,f :目標函數;x0:初始點;h0:初始步長;eps :精度;minx:目標函數取包含極值的區間左端點; maxx:目標函數取包含極值的區間又端點。進退法的MATLAB 程序代碼如下:function minx,maxx=minJT(f,x0,h0,eps)%目標函數:f;%初始點:x0;%初始步長:h0;%精度:eps;%目標函數取包含極值的區間左端點:minx;%目標函數取包含極值的區間又端點:maxx;format long;if nargin=3eps=1.0e-6;endx1=x0;k=0;h=h0;while 1x4=x1+h;%試探步k=k+1;f4=subs(f,findsym,x4);f1=subs(f,findsym,x1);

溫馨提示

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

評論

0/150

提交評論