python中黃金分割法實現方法

來源:互聯網
上載者:User
本文執行個體講述了python中黃金分割法實現方法。分享給大家供大家參考。具體實現方法如下:

''' a,b = bracket(f,xStart,h)  Finds the brackets (a,b) of a minimum point of the  user-supplied scalar function f(x).  The search starts downhill from xStart with a step  length h.  x,fMin = search(f,a,b,tol=1.0e-6)  Golden section method for determining x that minimizes  the user-supplied scalar function f(x).  The minimum must be bracketed in (a,b).'''    from math import log, ceildef bracket(f,x1,h):  c = 1.618033989   f1 = f(x1)  x2 = x1 + h; f2 = f(x2) # Determine downhill direction and change sign of h if needed  if f2 > f1:    h = -h    x2 = x1 + h; f2 = f(x2)   # Check if minimum between x1 - h and x1 + h    if f2 > f1: return x2,x1 - h  # Search loop  for i in range (100):      h = c*h    x3 = x2 + h; f3 = f(x3)    if f3 > f2: return x1,x3    x1 = x2; x2 = x3    f1 = f2; f2 = f3  print "Bracket did not find a mimimum"    def search(f,a,b,tol=1.0e-9):  nIter = int(ceil(-2.078087*log(tol/abs(b-a)))) # Eq. (10.4)  R = 0.618033989  C = 1.0 - R # First telescoping  x1 = R*a + C*b; x2 = C*a + R*b  f1 = f(x1); f2 = f(x2) # Main loop  for i in range(nIter):    if f1 > f2:      a = x1      x1 = x2; f1 = f2      x2 = C*a + R*b; f2 = f(x2)    else:      b = x2      x2 = x1; f2 = f1      x1 = R*a + C*b; f1 = f(x1)  if f1 < f2: return x1,f1  else: return x2,f2

希望本文所述對大家的Python程式設計有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.