1.12 テイラー展開

ある関数f(x)のある一点の周りを他の関数で近似することは可能だろうか? もしこれができれば,興味のある関数,しかも特定の点周りのみに関心がある場合とても有用である.

テイラー展開とは,関数を多項式で近似したものであり,以下のようなものである.(証明は省略する)

Exercise 1.10 (テイラー展開) 関数f(x)が区間(α,β)上でn回微分可能とする.このとき,x,a(α,β)に対し,次の式が成り立つようなθ(0,1)が存在する.

f(x)=f(a)+f(a)(xa)+f

この展開式のことを,f(x)x=aの周りでのテイラー展開という.

特に,x=0の周りでのテイラー展開をマクローリン展開という.

Example 1.2 (指数関数のマクローリン展開) e^xのマクローリン展開は次のようになる.

\begin{align} e^x &= 1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots \\ &= \sum_{n=0}^{\infty} \frac{x^n}{n!} \end{align}

この場合では,右辺は任意のxについて収束することが知られている. 右辺について,どの次数の項まで用いて近似するかによって近似精度が変わってくる.基本的には,項数が増えれば増えるほど近似精度は良くなる,

次のプログラムで,指数関数をテイラー展開の2次から6次までの近似をそれぞれ可視化し,近似精度が高まっていく様子を見てみよう.

df <- data.frame(
  x = seq(-4, 4, 0.01)
) %>% 
  mutate(
    fx = exp(x),
    second_order = 1 + x + x^2/2,
    third_order = 1 + x + x^2/2 + x^3/6,
    forth_order = 1 + x + x^2/2 + x^3/6 + x^4/24,
    fifth_order = 1 + x + x^2/2 + x^3/6 + x^4/24 + x^5/120,
    sixth_order = 1 + x + x^2/2 + x^3/6 + x^4/24 + x^5/120 + x^6/720
  ) %>% 
  pivot_longer(cols=c(ends_with("order"), "fx"), names_to = "group", values_to = "y") %>% 
  mutate(
    group = factor(group, levels=c(
      "fx",
      "second_order",
      "third_order",
      "forth_order",
      "fifth_order",
      "sixth_order"
    ))
  )

df %>% 
  ggplot(aes(x=x, y=y, group=group, color=group)) + 
  geom_line(aes(linetype=group), size=0.5) + 
  scale_color_manual(values = c("black", hue_pal()(5))) + 
  theme(legend.position="bottom")
指数関数のマクローリン展開

Figure 1.2: 指数関数のマクローリン展開