Python入门习题(95)——OpenJudge百练习题:方程求解

OpenJudge百练第4140号习题:方程求解

题目描述

来源
OpenJudge网站 —— 百练习题集-第4140号习题

要求
总时间限制: 1000ms 内存限制: 65536kB

描述

求下面方程的(实数)根:f(x) = x3- 5x2+ 10x - 80 = 0。

输入

输出
精确到小数点后9位。

样例输入
(无)
样例输出
(不予给出)

解题思路

  1. f(5) = 125 - 125 + 50 - 80 = -30 。f(5) < 0 。
  2. f(8) = 8 * 8 * 8 - 5 * 8 * 8 + 80 - 80 = 3 * 8 * 8 = 192。f(8) > 0。
  3. 据上,[5, 8]区间内有一个实数解。
  4. x < 5的话,必有f(x) < 0。x > 8的话,必有f(x) > 0。
  5. 用二分法求区间[5, 8]内的解。

参考答案

def f(x):
    return x**3 - 5 * x**2 + 10 * x - 80

x0 = 5
x1 = 8
LIMIT = 10**-9
while x1 - x0 > LIMIT:
    x = (x0 + x1) / 2
    if f(x) > 0:
        x1 = x
    elif f(x) < 0:
        x0 = x
    else:
        break

print("%.9f"%((x0 + x1) / 2))

测试用例

无。

小结

  1. 计算机求方程的解法与人类用公式求方程的解法是不同的。
  2. 一元三次方程有3个解(包含虚数解)。意大利学者卡尔丹于1545年发表的卡尔丹公式法,给出了3个解的计算公式。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章