はじめに
テイラー多項式は、ある点での関数の値と有限階までの微分を合わせて、その近くを近似する方法です。微分係数を無限に並べたものがテイラー級数で、展開の中心を0にしたものをマクローリン級数と呼びます。級数が収束することと、その和が元の関数に等しいことは、別々に確認する必要があります。
指数関数や三角関数の近似を題材に、係数の決め方、等式として成り立つ条件、有限項で打ち切った誤差を説明します。最後に、0付近の \(\sin x\) をPythonで近似する学習用の例を示します。
なぜ関数を多項式で近似するのか?
そもそも、なぜ関数を多項式( \(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での関数値と各階の微分を一致させて決めます。以下の2階の条件は \(n\ge2\) の場合です。
- 0階の条件: \(P_n(0)=f(0)\) なので、\(c_0=f(0)\) です。 定数項が0での関数値を合わせます。
- 1階の条件: \(P_n'(0)=f'(0)\) なので、\(c_1=f'(0)\) です。 \(P_1(x)=f(0)+f'(0)x\) は、0での接線による近似です。
- 2階の条件: \(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\) のままです。したがって、 \(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\) とすると、正弦の1次近似を使えます。
\[ \sin \theta \approx \theta \quad (\text{十分に小さい } \theta \text{ の場合}) \]この近似によって振り子の方程式は線形化され、近似の範囲内で周期が振幅に依存しないという等時性が得られます。実際の単振り子の周期は振幅に依存し、大きな振幅にまで同じ近似を使うことはできません。
プログラミングと数値計算
関数の数値評価には、多項式近似などさまざまな方法があります。CPythonの math は主にプラットフォームのC数学ライブラリを呼び出し、具体的な計算法は実装に依存します。以下は \(|x|\le1\) など0付近で少数の項を足す学習用の例で、標準ライブラリ内部の再現ではありません。
| |
収束半径とテイラーの定理
収束半径 \(R\) は、中心 \(a\) からの距離 \(|x-a|<R\) でべき級数が収束することを表す数で、範囲そのものの名称ではありません。\(R=0\) や \(R=\infty\) の場合もあります。端点 \(|x-a|=R\) は別に調べます。例えば \(\ln(1+x)\) のマクローリン級数は収束半径1で、実数では \(-1<x\le1\) で関数に等しく、\(x=1\) は条件収束、\(x=-1\) は発散します。
有限の近似では、\(a\) と \(x\) を結ぶ区間で \(f\) が \(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\) なので、その級数の和は元の関数に一致しません。「級数の収束」と「元の関数との一致」を区別する例です。
まとめ
テイラー多項式は局所的な近似を作り、剰余項はその誤差を評価します。テイラー級数を等式として使うときは、収束範囲と元の関数への一致を確かめます。この区別を押さえると、物理や数値計算で近似を使う際にも、必要な精度と適用範囲を判断しやすくなります。
