2020年4月25日

Rでテイラー展開する (function、plot、legend)

今回は関数を近似するテイラー展開を紹介します。テイラー展開をまったく知らない人も、Rを使えばイメージできるようになります。やってみましょう。

目次
  1. 指数関数のテイラー展開
  2. functionplotlegend
  3. テイラー展開による関数の近似

*  *  *

1 指数関数のテイラー展開

前回に引き続き、ネイピア数 $e$ を底とする指数関数を例に考えます。

$$y=e^x$$

この関数を0のまわりでテイラー展開すると(式の導出はこの記事の補論を参照してください)

$$e^x=1+\frac{1}{1!}x^1+\frac{1}{2!}x^2+\frac{1}{3!}x^3+\frac{1}{4!}x^4+\frac{1}{5!}x^5+...$$

となります。式中の!は階乗です。たとえば、$3!=3\times 2\times 1=6$ です。階乗の計算をして式をきれいにすると

$$e^x=1+x+\frac{1}{2}x^2+\frac{1}{6}x^3+\frac{1}{24}x^4+\frac{1}{120}x^5+...$$

前回のマクローリン級数は関数のを近似するためのものでしたが、今回のテイラー級数は関数を近似するためのもです。指数関数 $y=e^x$ が右辺の多項式によって表現されるというのがテイラー展開の意味するところです。

*  *  *

2 functionplotlegend

複雑なグラフをきれいに描くとき便利な関数を紹介します。function はグラフを描く関数を定義するためのものです。たとえば、$y=e^x$ という関数を定義するときには

y <- function(x){exp(x)}

と書きます。function(x) は yx の関数であることを表しています。{exp(x)} は関数の姿が $e^x$ であることを表しています。

function で定義した関数をグラフにするとき plot を使います。この関数は前回も使いましたが、今回はグラフを点線にしたり、グラフに色をつけたり、複数のグラフを重ねたりといった少し高度な使い方をします。

下の2行のコードを例に説明します。1行目は function で定義した y という関数を $-3\leq x\leq 3$ の範囲でグラフにする命令文です。plot の第4要素 type="l" は折れ線グラフで表す指定です(l はエルです)。2行目は function で定義した d1y という関数を $-3\leq x\leq3$ の範囲でグラフにする命令文です。第4要素以降はグラフの細かい設定です。lty=2 はグラフを点線にする指定、col=2 はグラフの色を2番(赤)にする指定、add=TRUE は2行目のグラフを1行目のグラフに重ねて表示する指定です。

plot(y, -3, 3, type="l")
plot(d1y, -3, 3, lty=2, col=2, add=TRUE)

legend は描いたグラフに凡例(変数一覧)をつけるためのものです。下の2行のコードを例に説明します。1行目は変数の名前を定義する命令文です。c() を使って、凡例に表示する2つの変数の名前 "e^x""1st" をならべています。文字をならべるときは要素を "" で囲みます。2行目はグラフに凡例をつける命令文です。legend() の中は凡例の細かい設定です。"topleft" は凡例をグラフの左上におく指定、legend=lc は1行目で定義した2つの変数の名前を表示する指定、lty=c(1,2) は e^x を実線、1st を点線にする指定、col=c(1,2)  e^x を黒、1st を赤で表示する指定です。

lc<-c("e^x", "1st")
legend("topleft", legend=lc, lty=c(1,2), col=c(1,2))

グラフについて詳細は下のリンク先をご覧ください。英語で申し訳ないです。日本語での説明はグーグル検索をご利用ください。
https://cran.r-project.org/doc/manuals/r-release/R-intro.html#High_002dlevel-plotting-commands

*  *  *

3 テイラー展開による関数の近似

ネイピア数を底とする指数関数はテイラー展開で近似できるか、Rで検証します。下の画像をクリックすると大きくなりますので、それをみてコードを入力しましょう。入力を終えましたら左上の ☑️ を入れてから💾 を押してみましょう。(「➡️Run」を押すとうまくいかないことがあるようです… 原因がわかる人がいましたら、教えてください 🙇‍♂️)

















少し長いコードですが、構造は比較的シンプルですのでなんとか頑張りましょう。うまくいけば、右下にグラフが2つ出てきます。重なっていますので ⬅️➡️ をクリックしてみてください。





*  *  *

以下、準備、処理、出力の順でコードを説明します。このコードは準備と処理が一体化していますので、まとめて説明します。2行目と3行目はいつものおまじないです。5行目から9行目までは式の定義です。式とコードを対応させると次のようになります。

指数関数($e^x$) exp(x)

テイラー展開
〜$x^1$の項($1+x$) 1+x
〜$x^2$の項($1+x+\frac{x^2}{2!}$) 1+x+x^2/2
〜$x^3$の項($1+x+\frac{x^2}{2!}+\frac{x^3}{3!}$) 1+x+x^2/2+x^3/6
〜$x^5$の項($1+x+...+\frac{x^5}{5!}$) 1+x+x^2/2+x^3/6+x^4/24+x^5/120









*  *  *

出力では、描画を2度くりかえします。それぞれの命令文を分けて説明します。11行目から14行目はグラフの描画です。11行目は指数関数 $y=e^x$ 、12行目はテイラー展開の $x$ を含む項まで、13行目はテイラー展開の $x^2$ を含む項までのグラフです。これらのグラフを1枚の図にまとめて表示するため、plot 関数の中で add=TRUE と指定します。

14行目は $x=0$ の点線を書き加える命令文です。この点線は、指数関数を0のまわりでテイラー展開していることを表します。テイラー展開は、0のまわりで指数関数をよく近似します。

16行目と17行目は凡例を図示する命令文です。16行目は、図示する3つのグラフの名前をそれぞれ e^x1st2nd と指定しています。17行目は、グラフの名前を取り込んで、左上に凡例を表示する命令文です。さいごの要素 bty="n" は、凡例に枠をつけないことを指定しています。上に掲げた上段の図はこのように描きます。








図をみると、2nd緑のグラフx がマイナスの領域で上に跳ねてしまっています。これは $x^2$ が左右対称のグラフであるためです。同様に、$x^4$、$x^6$ など、べき指数が偶数のとき、マイナスの領域でグラフが跳ね上がります。

ここでは指数関数の近似を考えていますので、べき指数が奇数の項までのときだけグラフにしてみましょう。下段の図はそのようなグラフです。コードは次のとおりです。命令文の大半は1つめの図のものとおなじですので説明を割愛します。違いはべき指数が奇数となる項までのテイラー級数だけグラフにしている点です。









下段の図をみると、$x^5$ の項までのテイラー展開は、0のまわりで指数関数をうまく近似しています。これがテイラー展開の妙味です。

*  *  *



補論 テイラー展開とマクローリン級数

この補論は込み入っています。興味のある人だけみてください。テイラー展開とは、関数のおおよそのふるまいをみるためのものです。式にするととてもいかめしいのですが、$a$ のまわりで展開すると

$$f(x)=f(a)+\frac{f'(a)}{1!}(x-a)^1+\frac{f''(a)}{2!}(x-a)^2+\frac{f'''(a)}{3!}(x-a)^3+...$$

となります。ここで $f'(a)$、$f''(a)$、$f'''(a)$ は、それぞれ関数を1回、2回、3回微分したものです。この式のおおまかな意味は、$x$ の値が $a$ にとても近いとき、関数のふるまいは微分を繰り返して足したもので表せるということです。

*  *  *

ネイピア数 $e$ を底とする指数関数 $f(x)=e^x$ を例に考えましょう。ネイピア数と指数関数については姉妹ブログ『文系の "だいたい" 数学』をご参照ください。

$f(x)=e^x$ は、何回微分してもその導関数が $e^x$ になります。つまり

$$f(x)=e^x f'(x)=e^x f''(x)=e^x f'''(x)=e^x$$

$e^x$ の $x$ に $a$ を代入すると

$$f(a)=f'(a)=f''(a)=f'''(a)=e^a$$

さらに、$a=0$ を代入すると

$$f(0)=f'(0)=f''(0)=f'''(0)=e^0=1$$

この結果をテイラー展開の各項の分子に代入すると($a=0$)

$$e^x=1+\frac{1}{1!}x^1+\frac{1}{2!}x^2+\frac{1}{3!}x^3+...$$

これが今回使ったネイピア数を底とする指数関数をテイラー展開して得られるテイラー級数です。この式に $x=1$ を代入すると

$$e=1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+...$$

となります。これが前回使ったマクローリン級数です。指数関数が級数で表されるのはとても不思議ですね… (nが無限大に近づくときのふるまい(収束)などについては難しすぎますので説明を割愛します。数学の本をご参照ください。)