プログラミング初心者の勉強日記

情報科学専攻です. 機械学習と競技プログラミングについて日々勉強しています.

MENU

テイラー展開

テイラー展開

最適化数学でテイラー展開がたくさん出てきたのでとりあえず実装してみることにしました. 今回はサインカーブを使おうと思います.

1. テイラー展開とは

関数のある一点での導関数の無限和で表されたものをテイラー級数と言います. その、テイラー級数を得るためにテイラー展開を行います. この時、ある一点をx=aとすると、x=a周りのテイラー展開と表現します. 要は、x=a近傍における導関数の無限和をとることを意味します.

ちなみに、原点回りのテイラー展開のことをマクローリン展開といいます(ややこしい...). ここで、このテイラー展開やマクローリン展開について気軽に学べる良書として数学ガールを紹介しておきます. 私は、学部時代はテイラー展開の有難みが全く分かりませんでしたが、この数学ガールを読んでテイラー展開の使いどころを理解できるようになりました.

数学ガール (数学ガールシリーズ 1)

数学ガール (数学ガールシリーズ 1)

さて、関数f(x)x=a周りのテイラー展開は次の式で表されます.

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

無限級数で近似していることになりますので、例えばk=5で止めれば関数を5次関数で近似できることになります. kが大きいほど元の関数に近づきます.

また、マクローリン展開は原点回りのテイラー展開のことだったので、上式のa0を代入すれば良くて、

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

と表されます.

ここで、サインカーブに対してマクローリン展開してみたいと思います. \sin xは微分していくと\sin x \rightarrow \cos x \rightarrow -\sin x \rightarrow -cosxとなります. また、\sin 0 = 0なのでサインの項が消えます. よってサインカーブのマクローリン展開は、

\displaystyle \sin x = \sin 0 + \frac{cos 0}{1!}x + \frac{-sin 0}{2!}x^{2} + \frac{-cos 0}{3!}x^{3} + \frac{sin 0}{4!}x^{4} + \cdots = x - \frac{x^{3}}{3!}+\cdots

と規則性が見えてきます. (コサインカーブのマクローリン展開も同様に導くことができます.)

2. 実装例

今回は、サインカーブに限定して実装したので、導関数のところは事前にこちらで用意することにしました(4通りしかないので).

また、sympyというのを使えば、テイラー展開もn次導関数も求めることができますが、今回はnumpyだけを用いています.

テイラー展開展開(sin)

f:id:linearml:20170915200418p:plain

かなり見づらいですが、元のサインカーブが青色で他は各次元で近似したものを図示しています.

例えば緑色は1次元で近似しているので、直線になっています. その後次元数を上げると元のサインカーブに近づいていき、11次元の時は大分サインカーブに近づいていることが分かります.

これなら分かる最適化数学ではn変数のテイラー展開について触れていましたが、それはまた別の機会で...