引言
泰勒多項式藉由使某一點的函數值與有限階導數相符,近似該點附近的函數。將這些導數所決定的係數排成無窮和,就得到泰勒級數;展開中心為0時,稱為麥克勞林級數。級數是否收斂,以及其和是否等於原函數,必須分別確認。
本文以指數函數與三角函數的近似為例,說明係數如何決定、展開式成立的條件,以及有限項截斷後的誤差。最後提供一個用 Python 近似計算0附近 \(\sin x\) 的教學範例。
為什麼要用多項式來近似函數?
首先,為什麼有必要將一個函數表示為多項式( \(a + bx + cx^2 + \dots\) )呢?
flowchart LR
A["在展開中心附近解析的函數"] -->|"收斂範圍內的泰勒展開"| B["冪級數"]
B -->|"有限項截斷"| C["多項式近似"]
C -->|"僅基本算術運算"| D["高速電腦計算"]
用多項式近似非線性函數,有時能簡化求值、微分與積分。係數確定後,多項式可用加法與乘法求值。不過,近似的適用範圍與精確程度,必須根據餘項和數值計算誤差判斷。
麥克勞林展開的直觀理解
先考慮在 \(x=0\) 附近近似函數的麥克勞林展開。 假設函數 \(f\) 在0附近具有所需階數的導數。選定有限次數 \(n\),決定以下多項式 \(P_n\) 的係數:
\[ P_n(x) = c_0 + c_1 x + c_2 x^2 + \dots + c_n x^n \]令0處的函數值與各階導數相符,就能決定係數。以下二階條件適用於 \(n\ge2\) 的情況。
- 函數值條件:\(P_n(0)=f(0)\),因此 \(c_0=f(0)\)。常數項使0處的函數值相符。
- 一階導數條件:\(P_n'(0)=f'(0)\),因此 \(c_1=f'(0)\)。\(P_1(x)=f(0)+f'(0)x\) 是0處的切線近似。
- 二階導數條件:要求 \(P_n''(0)=f''(0)\)。由於 \(P_n''(0)=2c_2\),可得 \(c_2=f''(0)/2!\)。對含有高次項的一般 \(P_n\),整個 \(P_n''(x)\) 並不恆等於常數 \(2c_2\)。
- 一般條件:對 \(k\le n\),要求 \(P_n^{(k)}(0)=f^{(k)}(0)\),即可決定 \(c_k=f^{(k)}(0)/k!\)。展開中心附近的誤差以下文的餘項估計。
麥克勞林展開的公式與推導
若 \(f\) 可無限次微分,就能用這些係數構成麥克勞林級數。不過,要像下式一樣與原函數 \(f(x)\) 以等號連接,級數必須在該點收斂到 \(f(x)\)。例如,函數在0附近解析時,等式在適當的鄰域內成立。僅有無限次可微分這項條件仍不足夠。
\[ f(x) = f(0) + f'(0)x + \frac{f''(0)}{2!}x^2 + \frac{f^{(3)}(0)}{3!}x^3 + \dots \]用求和記號可寫為:
\[ f(x) = \sum_{n=0}^{\infty} \frac{f^{(n)}(0)}{n!} x^n \]這裡, \(f^{(n)}(0)\) 是將函數 \(f(x)\) 微分 \(n\) 次後代入 \(x=0\) 得到的值,而 \(n!\) 表示 \(n\) 的階乘( \(n \times (n-1) \times \dots \times 1\) )。
典型函數的麥克勞林展開
以下指數函數、正弦與餘弦的級數,對所有實數 \(x\) 都收斂到對應的函數。三角函數的引數以弧度表示。
1. 指數函數 \(e^x\)
指數函數 \(f(x)=e^x\) 無論微分幾次,仍為 \(e^x\)。因此,各階導數在0處的值都為 \(1\)(\(f^{(n)}(0)=1\))。
\[ e^x = 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \dots = \sum_{n=0}^{\infty} \frac{x^n}{n!} \]2. 三角函數 \(\sin x\) 和 \(\cos x\)
反覆對 \(\sin x\) 微分時,導數依序循環為 \(\cos x, -\sin x, -\cos x, \sin x, \dots\)。代入 \(x=0\) 後,只有奇數階導數的值非零,偶數階導數的值為 \(0\)。
\[ \sin x = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + \dots = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n+1)!} x^{2n+1} \]同樣,對於 \(\cos x\),只有偶數階的項保留下來。
\[ \cos x = 1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \frac{x^6}{6!} + \dots = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n)!} x^{2n} \]推廣到泰勒展開
將展開中心從0移到 \(a\),就得到泰勒級數。若 \(f\) 在 \(a\) 附近解析,則在級數表示原函數的範圍內,以下等式成立。只假設有限階可微分的近似,則以下文的有限泰勒多項式與餘項處理。
\[ f(x) = f(a) + f'(a)(x-a) + \frac{f''(a)}{2!}(x-a)^2 + \dots = \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!} (x-a)^n \]當你想要預測在距離 \(x=a\) 稍微有一段距離的位置( \(x = a + \Delta x\) )的函數值時,這個公式就顯示出了它的威力。
泰勒展開的應用
物理學中的線性近似
物理學常用泰勒多項式作線性近似。對單擺而言,將角度 \(\theta\) 以弧度表示,並假設 \(|\theta|\ll1\),就可採用正弦的一階近似:
\[ \sin \theta \approx \theta \quad (\text{當 } \theta \text{ 足夠小時}) \]這項近似使單擺方程式線性化,並在小振幅近似下得到週期與振幅無關的等時性。實際單擺的週期會隨振幅改變,不能將相同近似直接套用到大振幅擺動。
程式設計與數值計算
函數的數值求值可採用多項式近似等多種方法。CPython 的 math 模組主要呼叫平台的 C 數學函式庫,具體演算法依實作而定。以下是在0附近(例如 \(|x|\le1\))累加少量項的教學範例,並非標準函式庫內部實作的重現。
| |
收斂半徑與泰勒定理
收斂半徑 \(R\) 是一個數,表示冪級數在距中心 \(a\) 滿足 \(|x-a|<R\) 的範圍內收斂,而不是區間本身的名稱。\(R=0\) 或 \(R=\infty\) 也可能出現。端點 \(|x-a|=R\) 必須另行檢查。例如,\(\ln(1+x)\) 的麥克勞林級數收斂半徑為1,在實數範圍 \(-1<x\le1\) 上等於原函數;在 \(x=1\) 處條件收斂,在 \(x=-1\) 處發散。
對於有限的近似,假設 \(f\) 在連接 \(a\) 與 \(x\) 的區間上屬於 \(C^{n+1}\) 類,泰勒定理便給出:
\[ f(x)=P_{n,a}(x)+R_n(x),\qquad P_{n,a}(x)=\sum_{k=0}^{n}\frac{f^{(k)}(a)}{k!}(x-a)^k \]\[ R_n(x)=\frac{f^{(n+1)}(\xi)}{(n+1)!}(x-a)^{n+1} \]其中 \(\xi\) 位於 \(a\) 與 \(x\) 之間。若區間上 \(|f^{(n+1)}|\le M\),則 \(|R_n(x)|\le M|x-a|^{n+1}/(n+1)!\)。要證明函數等於其無窮泰勒級數,可以驗證此餘項在 \(n\to\infty\) 時趨近0。
上述程式碼累加10項,即到 \(x^{19}\) 為止。正弦級數的20次項係數為0,因此泰勒定理給出 \(x=1\) 時的截斷誤差不超過 \(1/21!\),約為 \(1.96\times10^{-20}\)。這是以實數精確計算有限和時的誤差;Python 浮點運算的捨入誤差必須另外考慮。math.sin 的輸出也是供比較的浮點值,並非數學上的精確真值。
光滑函數的級數也可能不表示原函數
\[ g(x)=\begin{cases}e^{-1/x},&x>0,\\0,&x\le0.\end{cases} \]這個函數可無限次微分,且在0處的各階導數都為0。因此,它在0處的泰勒級數恆為0,對所有 \(x\) 都收斂。但當 \(x>0\) 時,\(g(x)>0\),級數的和並不等於原函數。這個例子說明,必須區分「級數收斂」與「級數的和等於原函數」。
結論
泰勒多項式提供局部近似,餘項則估計近似誤差。將泰勒級數當作等式使用時,需要確認收斂範圍及其和是否等於原函數。掌握這些區別,有助於在物理與數值計算中判斷近似的適用範圍和所需精確程度。
