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. 二分查找算法步骤中的每一轮排除掉一半的查找范围(也叫搜索空间)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章