Python入門習題(89)——OpenJudge百練習題:二分法求函數的零點

OpenJudge百練第4142號習題:二分法求函數的零點

題目描述

來源
OpenJudge網站 —— 百練習題集-第4142號習題

要求
總時間限制: 3000ms 單個測試點時間限制: 1000ms 內存限制: 65536kB

描述

有函數:

f(x) = x5 - 15 * x4+ 85 * x3- 225 * x2+ 274 * x - 121

已知 f(1.5) > 0 , f(2.4) < 0 且方程 f(x) = 0 在區間 [1.5,2.4] 有且只有一個根,請用二分法求出該根。

輸入
無。
輸出
該方程在區間[1.5,2.4]中的根。要求四捨五入到小數點後6位。
樣例輸入

樣例輸出
不提供

解題思路

  1. 對於區間[x1, x2],令mid = (x1 + x2) / 2,即mid是區間中點。如果f(mid)大於0,則在[mid, x2]區間內尋找函數的零點。如果f(mid)小於0,則在[x1, mid]區間內找函數的零點。
  2. 上述步驟不斷重複,直至x2 - x1小於10-7。此即爲二分法求函數的零點。

參考答案

def f(x):
    return x**5 - 15 * x**4 + 85 * x**3 - 225 * x**2 + 274 * x - 121

LIMIT = 10**-7
x1 = 1.5
x2 = 2.4
while x2 - x1 > LIMIT:
    mid = (x1 + x2) / 2
    y = f(mid)
    if y > 0:
        x1 = mid
    elif y < 0:
        x2 = mid

print("%.6f"%((x1 + x2) / 2))

測試用例

無。

小結

  1. 二分法是典型的算法。本題採用的算法本質上是二分查找法。
  2. 二分查找算法步驟中的每一輪排除掉一半的查找範圍(也叫搜索空間)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章