日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 二分法实现pow_Python实现二分法和黄金分割法

發布時間:2025/4/5 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 二分法实现pow_Python实现二分法和黄金分割法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

運籌學課上,首先介紹了非線性規劃算法中的無約束規劃算法。二分法和黃金分割法是屬于無約束規劃算法的一維搜索法中的代表。

二分法:$$x_{1}^{(k+1)}=\frac{1}{2}(x_{R}^{(k)}+x_{L}^{(k)}-\Delta)$$$$x_{2}^{(k+1)}=\frac{1}{2}(x_{R}^{(k)}+x_{L}^{(k)}+\Delta)$$

黃金分割法:$$x_{1}^{(k+1)}=x_{R}^{(k)}-(\frac{\sqrt{5}-1}{2})(x_{R}^{(k)}-x_{L}^{(k)})$$$$x_{2}^{(k+1)}=x_{L}^{(k)}+(\frac{\sqrt{5}-1}{2})(x_{R}^{(k)}-x_{L}^{(k)})$$

選擇的$x_{1}^{(k+1)}$和$x_{2}^{(k+1)}$一定滿足$$x_{L}^{(k)}

下面確定新的不確定空間$I^{(k+1)}$

情況1:若$f(x_{1}^{(k+1)})>f(x_{2}^{(k+1)})$,則$I^{(k+1)}=\left[x_{L}^{(k)},x_{2}^{(k+1)}\right]$

情況2:若$f(x_{1}^{(k+1)})

情況3:若$f(x_{1}^{(k+1)})=f(x_{2}^{(k+1)})$,則$I^{(k+1)}=\left[x_{1}^{(k+1)},x_{2}^{(k+1)}\right]$

下面記錄下用Python實現二分法和黃金分割法的代碼。

二分法:

1 importmath2 importnumpy as np3

4

5 def anyfunction(x): #在這里我們定義任意一個指定初始區間內的單峰函數,以x*cos(x)為例

6 return x*math.cos(x)7

8

9 Low = float(input("Please enter the lowbound:"))10 High = float(input("Please enter the highbound:"))11 High = np.pi #在這里我們取初始上界為π,如果可以輸入則注釋掉這一行

12 echos = int(input("Please enter the echos:")) #迭代次數

13 small = float(input("Please enter the smallvalue:")) #公式中的Delta

14

15 for i in range(1, echos + 1):16 Lowvalue = anyfunction(0.5*(Low + High -small))17 Highvalue = anyfunction(0.5*(Low + High +small))18 print("echos:" +str(i))19 print(‘before‘ + "Lowbound:" + str(0.5*(Low + High - small)) + "Highbound:" + str(0.5*(Low + High +small)))20 print(‘Lowvalue:‘ + str(Lowvalue) + ‘ ‘ + ‘Highvalue:‘ +str(Highvalue))21 if(Lowvalue ==Highvalue):22 Low = 0.5*(Low + High -small)23 High = 0.5*(Low + High +small)24 elif(Lowvalue

輸出結果如下:

5次循環后極值點被限制在[0.7828981633974482,0.8907604338221292]內。

黃金分割法:

1 from math importsqrt, cos2 importnumpy as np3

4

5 def anyfunction(x): #同上以函數x*cos(x)為例

6 return x*cos(x)7

8

9 Low = float(input("Please enter the lowbound:"))10 High = float(input("Please enter the highbound:"))11 High = np.pi #同上,使用時應該注釋掉

12 echos = int(input("Please enter the echos:"))13

14 #初始化,第一次運算不存在運算簡化

15 uniquevalue = ((sqrt(5)-1)/2)*(High-Low)16 value1 = anyfunction(High -uniquevalue)17 value2 = anyfunction(Low +uniquevalue)18

19 for i in range(1, echos + 1):20 print("echos:" +str(i))21 print(‘before‘ + "Lowbound:" + str(High - uniquevalue) + "Highbound:" + str(Low +uniquevalue))22 print(‘value1:‘ + str(value1) + ‘ ‘ + ‘value2:‘ +str(value2))23 #利用黃金分割法的性質減少一半的運算量

24 if(value1 ==value2):25 Low = High -uniquevalue26 High = Low +uniquevalue27 uniquevalue = ((sqrt(5)-1)/2)*(High-Low)28 value1 = anyfunction(High -uniquevalue)29 value2 = anyfunction(Low +uniquevalue)30 elif(value1

輸出結果如下:

5次循環后極值點被限制在[0.7416294238611398,1.0249066567190932]

原文:https://www.cnblogs.com/chester-cs/p/11751508.html

總結

以上是生活随笔為你收集整理的python 二分法实现pow_Python实现二分法和黄金分割法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。