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個解的計算公式。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章