テイラー展開について
ここでは、物理で頻繁に用いられるテイラー展開 (Taylor Expansion)について解説する。テイラー展開は任意の滑らかな関数を変数のべき級数で近似する方法である。 つまり、関数 f(x) を以下のように展開する。 f(x)=a0+a1(x−x0)+a2(x−x0)2+a3(x−x0)3+⋯=∞∑n=0an(x−x0)n. ここで、ai (i=0,1,2,…) は定数で、x0 は特定の x の点であり、その差 Δx=(x−x0) を用いて表せば、 f(x)=f(x0+Δx)=a0+a1Δx+a2Δx2+a3Δx3+⋯=∞∑n=0anΔxn という式が得られるので、どちらを見ても同じものだと思って欲しい。
目次
その他の展開方法
ちなみに関数を展開する方法は他にもある。参考までに一例をあげる。周期 L の周期関数の任意の x について (関数全体について)、sine 関数や cosine 関数で展開することは、フーリエ級数展開 (Fourier Expansion) と呼ばれ、こちらもよく用いられる。 f(x)=a0+∞∑n=1ancos(2πnLx) +∞∑n=1bnsin(2πnLx). ここで、ai (i=0,1,…) と bi (i=1,2,…) は定数である。これは一般に次のようにも書ける。 f(x)=∞∑n=−∞cnexp(2πniLx). ここで、ci (i=1,2,…) は定数。
マクローリン展開
さて、フーリエ級数展開は置いておいて、ここではテイラー展開について説明する。フーリエ級数展開では周期関数全体を近似するが、テイラー展開はある特定の x=x0 の周りでの展開となるので注意が必要である。つまり、(x−x0)n の n をある数で打ち切ったとき、|x−x0|≪1 の場合にのみ近似値が妥当となる (実際は、展開の係数 an に依るがここでは大ざっぱな議論をしよう。)。初めは少し分かりにくいと思うので、x0=0、つまり原点付近での関数の展開について考えていこう (図 1)。 ちなみにテイラー展開の中で、原点近傍 (付近) の x に関する展開を特別に、マクローリン展開 (Maclaurin Expansion)と呼ぶ。
グラフから感覚的に理解する。
図 1 の一変数関数 f(x) を引続き考よう。 この関数の原点付近に着目する (図 2)。十分に原点に近い所では x の線形 (一次) の関数 g1(x):=a0+a1xでも十分近い値を与えそうである (図 2 の赤線)。ここで係数 a0,a1 は適当 (適切) に接線になるように選んだ。
しかし、よく見ると、原点から離れるにつれて (|x|≳0.05 くらいから) 少しずつずれていることが分かる (拡大して見るとよい)。では、これを補正するように x の 2 次関数 g2(x):=a0+a1x+a2x2 を重ねてみる (係数 a0,a1 は先ほどのもの、a2 は適当に決める)。 より近くなった (図 2 青線。ほとんど重なっている。)。
上の範囲では 2 次の近似関数でほぼ完璧に f(x) を再現できたように見えるが、グラフを広い範囲で見ると原点から離れるにしたがってずれが見えてくる。今度は、さらに、2 次関数 g2(x) (青色)、3 次関数 g3(x) (紫色)、4 次関数 g4(x) (橙色)、10 次関数 g20(x) (緑色) を図 3 に一緒に描いた (グラフを表示している範囲が図 2 と異なっていることに注意せよ)。
グラフから分かるように、高次の関数を用いることで、x≲1 では、より正確に元の関数を再現できることが分かった。このように、滑らかな関数について、多項式 (a0+a1x+a2x2+⋯) を用いてそれに近い関数を作ることができた。ここで、いくつかの点に気付いて欲しい。
- 原点に近いほど、近似関数は本来の関数をよく再現する。
- 高次の近似関数になるほど、本来の関数をよく再現し、近似関数と本来の関数との誤差は小さくなる。
- 近似関数は、x≥1 の範囲では本来の関数を再現しない (むしろ差が大きい)。
- 近似関数は特定の x の値について近い値を返すのではなくて、|x|≪1 の範囲の x について関数自体を再現する。
f(x)=lnx の近似関数を求める。
以上の性質が分かった所で、具体的に展開係数 ai (i=0,1,…) を決めていこう。 実は上の関数は f(x)=loge(x+1)=ln(x+1) である。
今考えているのは、x≃0 での近似関数であるので、x=0 において f(x) と近似関数が等しくなるようにしたい。この要請より、ゼロ次の係数 a0 が決定される。ln(0+1)=0 なので、a0=0 である。
次に 1 次の係数 a1 であるが、f(x) に近いのは f(x) の接線であるので、x=0 での接線の傾きが f′(x)|x=0=1x+1|x=0=1 より、a1=1 である。
次に 2 次の係数 a2 であるが、f(x) に近いので、その微係数も等しいはずと考え、f″、また、\left . g''(x)\right |_{x=0} = 2 a_2 より、\displaystyle a_2 = -\frac{1}{2} を得る。
同様に計算していくと、結果的に、 \begin{equation} \ln (x + 1) = x - \frac{1}{2} x^2 + \frac{1}{3} x^3 - \cdots = - \sum_{k=1}^{\infty} \frac{(-1)^k}{k}x^k \end{equation} を得る。20 次の近似関数をみると |x| < 1 において、ほぼ一致していることが分かる。
一般の近似式の導出
さて、一般の関数 f (x) について展開公式を導こう。といっても、\ln (x+1) の関数で具体的に計算したので大体予想はつくはずだ。 任意の滑らかな関数 f (x) が以下の冪級数で展開できると仮定する。 \begin{equation} f (x) = a_0 + a_1 x + a_2 x^2 + \cdots = \sum_{k = 0}^\infty a_k x^k. \end{equation}
この左辺と右辺が x = 0 において一致するように各係数 a_k ~(k = 0, 1, \dots) を決めていこう。
両辺に x = 0 を代入すると、 \begin{equation} f(0) = a_0 \quad \Rightarrow \quad a_0 = f(0). \end{equation}
次に、両辺を微分して x = 0 を代入すると、 \begin{equation} f'(0) = \left . 1 \cdot a_1 + 2 \cdot a_2 x + 3 \cdot a_3 x^2 + \cdots \right |_{x=0} = a_1 \quad \Rightarrow \quad a_1 = f'(0). \end{equation}
さらに、両辺を微分して x = 0 を代入すると、 \begin{equation} f''(0) = \left . 2 \cdot 1 \cdot a_2 + 3 \cdot 2 \cdot a_3 x + 4 \cdot 3 \cdot a_4 x^2 + \dots \right |_{x=0} = 2 a_2 \quad \Rightarrow \quad a_2 = \frac{1}{2} f''(0). \end{equation}
さらにさらに、両辺を微分して x = 0 を代入すると、 \begin{equation} f^{(3)} (0) = \left . 3 \cdot 2 \cdot 1 \cdot a_3 + 4 \cdot 3 \cdot 2 \cdot a_4 x + \cdots \right |_{x=0} = 3! ~a_3 \quad \Rightarrow \quad a_3 = \frac{1}{3!} f^{(3)} (0). \end{equation}
以上を続けていって、n 回両辺を微分して x = 0 を代入すると、 \begin{equation} f^{(n)} (0) = \left . n \cdot (n-1) \cdots 1 \cdot a_n + (n-1) \cdot (n-2) \cdots 2 \cdot a_{n+1} x + \cdots \right |_{x=0} = n! ~a_n \quad \Rightarrow \quad a_n = \frac{1}{n!} f^{(n)} (0). \end{equation}
よって、滑らかな関数 f (x) について、冪級数展開の一般的な展開係数が求まった。まとめると、 \begin{gather} f(x) = a_0 + a_1 x + a_2 x^2 + \cdots = \sum_{k=0}^\infty a_k x^k, \\ a_k = \frac{1}{k!} f^{(k)} (0). \end{gather}
誤差の見積もり
上では一般の滑らかな関数 f (x) について、無限次までの冪級数として近似関数を導くことができた。しかし、実際の使用では無限次まで計算することができないため、低次の次数までにとどめて文字通り近似として使用することになる。このとき、どれくらいの誤差を含むかということが分かれば実用上便利である。以下では本当の関数との誤差について考える。
n 次の多項式の近似関数 g_n (x) を次のように定義する。 \begin{equation} g_n (x) := a_0 + a_1 x + a_2 x^2 + \cdots + a_n x^n = \sum_{k=0}^n a_k x^k. \end{equation} すると、各近似関数 g_n (x) に対して、誤差関数が以下のようにして定義できる。 \begin{equation} R_n (x) := f (x) - g_n (x). \end{equation} ここで、f (x) = g_n (x) + R_n (x) と考えると、g_n (x) は x の n 次の関数であるため、R_n (x) は x の (n + 1) 次以上の関数である。 \begin{equation} R_n (x) = a_{n+1} x^{n+1} + a_{n+2} x^{n+2} + \cdots = \sum_{k=n+1}^\infty a_{k} x^k. \end{equation}
誤差関数 R_n (x) の初項は係数を別にして x^{n+1} であり、今、x \ll 1 であるので、これは小さい。また、さらに高次の項になればその効果は顕著になる。もちろんそれぞれの係数 a_k ~(k = n+1, n+2, \dots) の大きさによりそれは変わるが、a_k 自体も \displaystyle a_k = \frac{1}{k!} f^{(k)} (0) であるので、k! に反比例して小さくなる。よって、x \ll 1 の場合を考えて、この係数 a_k の部分は無視して見積もる誤差を \mathcal{O} (x^{n+1}) というように書く。つまり、\mathcal{O} (x^{n+1}) = R_n (x) である。 特別に x の値を決めれば、大体誤差がどのくらいか見積もることができる。例えば x = 0.1 なら \mathcal{O} (x^3) の誤差は \lesssim 0.1^3 = 0.001 くらいになる。
テイラー展開
以上では、簡単のために x = 0 付近での多項式近似を行ってきた。しかし、任意の x = x_0 における展開も x の値をずらしてやればできる。今まで x だとしていた所を、x_0 からのずれだと思えばよい。 具体的に考えると、\ln (x+1) の x = 0 での展開 \begin{equation} \ln (x+1) = -\sum_{k=1}^\infty \frac{(-1)^k}{k} x^k \end{equation} の代わりに、\ln x の x = 1 での展開を考えると、 \begin{equation} \ln x = -\sum_{k=1}^\infty \frac{(-1)^k}{k} (x - 1)^k \end{equation} となる。ここで、x + 1 \rightarrow x と置き換えた。この置き換えは x \rightarrow x - 1 の置き換えと等しいことに注意して、上の式が正しいことを確かめて欲しい。図 4 に \ln (x+1) のグラフ (灰色)、\ln x のグラフ (黒色) と、その 1 次 (赤色)、5 次 (青色)、10 次 (緑色) の近似関数を示している。ちょうど、x = 1 からのずれ \Delta x = x - 1 が小さいとして展開していることが分かる。
同様にして、一般の場合について式を拡張する。 原点の周りで冪級数展開できている \tilde{f} (x) = \sum_{k = 0}^\infty a_k x^k を考える。 \tilde{f} (x) から x_0 だけ右にずらした関数 f (x) を考える。 \begin{equation} f (x) = \tilde{f} (x-x_0) \end{equation} \tilde{f} (x - x_0) の x = x_0 での展開は、式自体は原点での展開と同じで、変数を x \rightarrow x - x_0 への置き換えをしてやればいいので、 \begin{equation} \tilde{f} (x - x_0) = \sum_{k=0}^\infty a_k (x - x_0)^k \end{equation} ここで、係数については元々、\displaystyle a_k = \left . \frac{1}{k!} f^{(k)} (x) \right |_{x=0} = \frac{1}{k!} f^{(k)} (0) だったことを思い出すと、 \begin{equation} a_k = \left . \frac{1}{k!} f^{(k)} (x) \right |_{x=x_0} = \frac{1}{k!} f^{(k)} (x_0) \end{equation} となる。よって、最終的に任意の滑らかな関数 f (x) の x = x_0 でのテーラー展開 (冪級数展開) は、 \begin{equation} f (x) = \sum_{k=0}^\infty a_k (x - x_0)^k, \quad a_k = \frac{1}{k!} f^{(k)} (x_0). \end{equation}
テイラー展開はマクローリン展開の原点をずらしただけに過ぎないので、各種調べてきた性質はそのまま成り立つ。 別の言い方をすれば、テイラー展開がより広く冪級数展開を指すのに対し、マクローリン展開は、x_0 = 0 に限定した場合に付けられた特別な名前である。
問題例
理解を確かめるために適当に問題を掲示する。全部解く必要はない。パターン化されているので、分かっていると理解できれば n が入った式だけ解けばいい。
次の関数をマクローリン展開せよ (x = 0 の近傍でテイラー展開せよ)。答は総和の記号 \sum を用いて表すこと。ただし、a, n は定数とする。
- \displaystyle f (x) = \frac{1}{1 + x}
- \displaystyle f (x) = \frac{1}{1 - x}
- \displaystyle f (x) = \frac{1}{1 + x^2}
- \displaystyle f (x) = \frac{1}{1 + x^n}
- \displaystyle f (x) = \frac{x}{1 + x}
- \displaystyle f (x) = \frac{1}{a + x}
- \displaystyle f (x) = \frac{1}{1 + a x}
- \displaystyle f (x) = \frac{1}{(1+x)^2}
- \displaystyle f (x) = \frac{1}{(1+x)^n}
- \displaystyle f (x) = \exp {x}
- \displaystyle f (x) = \exp \left ( {a x} \right )
- \displaystyle f (x) = \exp \left ( {i x} \right )
- \displaystyle f (x) = \cos x
- \displaystyle f (x) = \sin x
- \displaystyle f (x) = \frac{1}{1 + \sin x}
- \displaystyle f (x) = \frac{1}{\cos x}
- \displaystyle f (x) = \frac{1}{1 + \sin^2 x}
- \displaystyle f (x) = \frac{1}{\cos^2 x}
- \displaystyle f (x) = \frac{1}{\tan x}