webエンジニアの日常

RubyやPython, JSなど、IT関連の記事を書いています

マクローリン展開とテイラー展開と違い

はじめに

先日社内の方が「テイラー展開とマクローリン展開の違いがあるはずだけど、ネットで調べてもよくわからない」と質問していて、それに回答しました。

質問された方から僕の解説が「分かりやすい!」と言っていただけたので、もう少し詳しく説明を加えてブログの方にも書いてみたいと思います。

スポンサーリンク

テイラー展開・マクローリン展開とは

テイラー展開

まずはテイラー展開から説明します。

テイラー展開はある関数をべき級数(  { x^ n } の多項式)で表現したものです。

べき級数は微分や積分などの操作が容易なため、複雑な関数を簡単なべき級数で近似することで元の関数を詳しく調べることができるようになります。

以下は関数 f(x)を点 x_0の周りでテイラー展開した場合の式です。点の周りとは、点の近辺(ある程度狭い範囲の中)のことを意味します。

 \displaystyle{ f(x) = \sum_{i=0}^ \infty \frac{f^ {(i)}(x_0)}{i!}(x - x_0)^ i}

ただし、 f(x) C^ \infty級関数(何階でも微分できる関数)とします。

また、右辺の級数は f(x)に収束するようなxの範囲内で定義されているものとします。

ここで、 x_0 = 0の場合を考えてみると、上記の式は

 \displaystyle{ f(x) = \sum_{i=0}^ \infty \frac{f^ {(i)}(0)}{i!}x^ i}

となって、式がすっきりしました。

 x=0での値は計算しやすいため、特別に x=0周りでのテイラー展開をマクローリン展開と呼びます。

収束半径

ここまではどんな教科書にもどんなサイトにも載ってあるようなことですが、ここからもう少し詳しく説明します。

実はテイラー展開には収束半径というものが存在します。

先ほどから、「点の近辺で」とか「収束するようなxの範囲内で」とか言っていますが、テイラー展開は全てのx(定義域全域)に対してテイラー展開が可能でなく、

ある点( x_0)を中心とした半径Rの範囲内(すなわち  \displaystyle{x_0 - R < x < x_0 + R} ) でのみ右辺の級数が f(x)に収束し、近似が可能となるのです。

実はこの半径、関数によっては意外と小さいです。

例として、 log(x + 1)という関数を調べてみましょう。

この関数を原点を中心にテイラー展開します。

 \displaystyle{log(x + 1) = x - \frac{x^ 2}{2} + \frac{x^ 3}{3} - \frac{x^ 4}{4} + \frac{x^ 5}{5} +  ...}

するとこのようになります。

プログラムを書いて計算してみましょう

def log(xp1)
    x = xp1 - 1
    sum=0
    100.times do |i|
        sum += (-1) ** i * x ** (i+1) / (i + 1)
    end
    sum
end

p log(0.1)  #log(-0.9+1)
p log(0.5)#log(-0.5+1)
p log(0.7)#log(-0.3+1)
p log(1.3)#log(0.3+1)
p log(1)  #log(0+1)
p log(1.9) #log(0.9+1)
p log(2)  #log(1+1)

結果は以下のようになります。

-2.302582905639062
-0.6931471805599451
-0.35667494393873234
0.26236426446749095
0
0.6418537610170555
-49

スポンサーリンク

xの値が-0.9から0.9あたりまではよく近似できているのですが、xが1になったとたんに大きく外れてしまいました。

実は log(x + 1)の収束半径は1で、0周りのテイラー展開(マクローリン展開)では、 -1 < x < 1の範囲でしか log(x + 1)へ収束しないのです。

この範囲外で級数を計算したとしても、発散したり値が大きく外れる結果になってしまいます。

一方で、 \sin x \cos x,  e^ xは収束半径が無限大なので、定義域全域にわたってテイラー展開可能(級数がターゲットとなる関数へ収束する)となります。

このため、マクローリン展開の応用としてオイラーの公式( e^ {ix} = \cos x + i\sin x)しか紹介しないサイトなどでは、テイラー展開やマクローリン展開という言葉は出てきても、収束半径という言葉は出てこないことが多いです。

間違ってはいけないのが、マクローリン展開は万能ではないということです。

上記の通り、テイラー展開には収束半径があり、マクローリン展開だけでは欲しい値の近似値を得るには不十分な場合があるということです。

 log(x + 1)の場合だと、 x = 10での値 log(11)の近似値を得るには x = 10周りでのテイラー展開を計算する必要があります。

まとめ

以上でテイラー展開とマクローリン展開の違いが分かっていただけたと思います。

マクローリン展開は0という計算しやすい点の周りでのテイラー展開に特別に名前を付けたものであると言えます。

また、テイラー展開を使うときは必ず収束半径はいくらか確認してから使うようにしましょう。これは統計学などで定理の証明にテイラー展開を使う場合でも同じです。