题目描述
来源
OpenJudge网站 —— 百练习题集-第4140号习题
要求
总时间限制: 1000ms 内存限制: 65536kB
描述
求下面方程的(实数)根:f(x) = x3- 5x2+ 10x - 80 = 0。
输入
无
输出
精确到小数点后9位。
样例输入
(无)
样例输出
(不予给出)
解题思路
- f(5) = 125 - 125 + 50 - 80 = -30 。f(5) < 0 。
- f(8) = 8 * 8 * 8 - 5 * 8 * 8 + 80 - 80 = 3 * 8 * 8 = 192。f(8) > 0。
- 据上,[5, 8]区间内有一个实数解。
- x < 5的话,必有f(x) < 0。x > 8的话,必有f(x) > 0。
- 用二分法求区间[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))
测试用例
无。
小结
- 计算机求方程的解法与人类用公式求方程的解法是不同的。
- 一元三次方程有3个解(包含虚数解)。意大利学者卡尔丹于1545年发表的卡尔丹公式法,给出了3个解的计算公式。