python二分法查找函數底值
假設連續函數f(x)在區間(a,b)上有一個底值m,且在該底值下的函數輸出值為M,即f(m)=M,利用二分法查找該底值:(s為足夠小的數)
令t=(a+b)/2,若|f(t)-M|<=s,則m=t,若|f(t)-M|>s,如果(f(t)-M)和(f(a)-M)同號,a=t,反之b=t,繼續二分法t=(a+b)/2…直到|f(t)-M|<=s,則m=t。
例如:一項一年期投資,每個季度初投入10000元,期滿時收入44163.225,求內部收益率(已設定為0.04)。
收益函數為:
從(0,1)區間中查找該內部收益率,用二分法令t=(0+1)/2=0.5,比較發現|f(t)-44163.225|>10**(-10),並且f(t)-44163.225和f(1)-44163.225同號,則繼續令t=(0+0.5)/2=0.25,,,直到查找出內部收益率為0.03999999445689362,約等於0.04
def f(i): y = 10000 * (1 + i) ** 4 + 10000 * (1 + i) ** 3 + 10000*(1+i)**2+10000*(1+i)**1 return y def division(a,b,M,n): #a,b為自選值范圍,(f(a)-M)*(F(b)-M)<或=0 #M為f(x)輸出值,n為輸出值精度要求小數位數 while True: t = (a + b) / 2 if abs(f(t) - M) <= 10 ** (-n): m = t break if (f(t) - M) / abs(f(t) - M) == (f(a) - M) / abs(f(a) - M): a = t else: b = t return m y=division(0,1,44163.225,10) print(y)
到此這篇關於python二分法查找函數底值的文章就介紹到這瞭,更多相關python函數底值內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python的數據類型與標識符和判斷語句詳解
- python基礎–除法(/,//,%)的應用說明
- 一文詳解Python中復合語句的用法
- Python循環語句介紹
- python如何利用traceback獲取詳細的異常信息