題目描述
來源
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個解的計算公式。