235. 算術幾何數列

黃志斌發表於2014-10-17

題目

Problem 235: An Arithmetic Geometric sequence

Given is the arithmetic-geometric sequence u(k) = (900-3k)rk-1.
Let s(n) = Σk=1...nu(k).

Find the value of r for which s(5000) = -600,000,000,000.

Give your answer rounded to 12 places behind the decimal point.

分析

根據題目,我們有:

F

當 r = 1 時,F ,不符合題目要求。

當 r ≠ 1 時,F

前一項使用了等比數列的求和公式,後一項請參見《具體數學:電腦科學基礎(第2版)》第 28 頁。

根據題目,我們有:

F

上式進行移項並乘以 F 就得到:

F

經整理後得到以下一元 5001 次方程:

F

經過簡單的計算,得知這個方程的一個實根是 1,另一個實根比 1 稍大。我們的目的就是求出這個實根。

P

解答

根據以上分析,我們有以下 Haskell 程式:

import Text.Printf ( printf )

main = let eps = 1e-12 :: Double in printf "%.12f\n" $ fst $ until
  (\(a,b) -> b-a < eps/2) (\(a,b) -> let x = (a+b)/2 in if f x < 0
  then (x,b) else (a,x)) (1, 2) where
  f r = 4700*r**5001-4701*r**5000-2e11*r*r+(4e11+300)*r-2e11-299

簡要說明:

  • 最後一行就是我們前面推匯出來的 5001 次整係數多項式。
  • 然後簡單地使用二分法在區間 (1,2) 內求根。

這個程式的執行時間是 0.002 秒。

進階

根據代數基本定理,一元 n 次方程正好有 n 個複數根。而我們這道題目中涉及到的實係數一元 5001 次方程有多少個實數根?此外,這個 5001 次整係數多項式的函式影像整體上是怎樣的呢?

注意,實係數多項式函式的定義域是全體實數,最高項的次數為奇數時,值域也是全體實數。而且多項式函式處處有導數,也就是說它的影像是光滑的,上圖中兩個看上去不光滑的點,區域性放大後必然是光滑的。其中右邊那個區域性放大後如下圖所示。

從上圖可以看出,這個一元 5001 次方程有三個實數根,分別是:r1 = r2 = 1,r3 = 1.002322108... 。

參考資料

  1. 圖靈社群:圖書:具體數學:電腦科學基礎(第2版)
  2. Wikipedia: Geometric progression
  3. Wikipedia: Arithmetico-geometric sequence
  4. Wikipedia: Fundamental theorem of algebra

相關文章