テイラー級数の応用
📂微分積分学テイラー級数の応用
説明
テイラー級数(マクローリン級数)とは、与えられた関数を冪級数で近似したもので、関数fのテイラー級数は次のようになる。
n=0∑∞n!f(n)(a)(x−a)n=f(a)+f′(a)(x−a)+2!f′′(a)(x−a)2+⋯
良好な条件下では、fとそのテイラー級数は実際に一致する。
f(x)=n=0∑∞n!f(n)(a)(x−a)n=f(a)+f′(a)(x−a)+2!f′′(a)(x−a)2+⋯
テイラー級数は極限を含んでいて一見するとより難しく見えるが、実際にはそうではない。関数fが複雑な場合、テイラー級数で扱うほうが便利なこともある。基本的にテイラー級数は(無限次の)多項式なので、微分や積分、そして関数値計算が容易だ。
様々な状況で関数を冪級数として表現することがどのように有用かを見てみよう。
関数値の近似
例として、サイン関数sinを考えてみよう。こうした超越関数の関数値を計算するのは容易ではない。sinxの値が簡単に分かるのはx、0、6πなどの特殊角の場合だけだ。直ちにsin0.672の値を計算しろと言われても難しいだろう。このような場合、テイラー級数でsinの近似値を計算すればよい。sinのテイラー級数は次のようになる。
sinx=x−3!x3+5!x5−7!x7+⋯=n=0∑∞(−1)n(2n+1)!x2n+1
つまり次のような近似式を使えば、適切な掛け算と足し算だけでsin0.672の値を簡単に計算することができる。
sinx≈x−3!x3+5!x5−7!x7
実際、プログラミング言語では超越関数をテイラー級数で近似して実装することもある。ジュリアのコードを見てみれば、サイン関数がテイラー級数の7番目の項までで近似されていることが確認できる。

定数を用いて関数を直接定義して計算してみると、ジュリアで実装されたサイン関数とほぼ同じ値が得られる。
julia> function mysin(x)
S = [-1.66666666666666324348e-01,
8.33333333332248946124e-03,
-1.98412698298579493134e-04,
2.75573137070700676789e-06,
-2.50507602534068634195e-08,
1.58969099521155010221e-10]
sinx = x + S[1]*x^3 + S[2]*x^5 + S[3]*x^7 + S[4]*x^9 + S[5]*x^11 + S[6]*x^13
return sinx
end
mysin (generic function with 1 method)
julia> sin(0.672)
0.622552387351666
julia> mysin(0.672)
0.6225523873516658
区間[0,π/4]でsinxとs6=n=0∑6(−1)n(2n+1)!x2n+1を比較してみると、ほとんど違いがないことが分かる。
S = [-1.66666666666666324348e-01,
8.33333333332248946124e-03,
-1.98412698298579493134e-04,
2.75573137070700676789e-06,
-2.50507602534068634195e-08,
1.58969099521155010221e-10]
x = 0:0.01:π/4
y = sin.(x)
s₆ = x .+ S[1]*x.^3 .+ S[2]*x.^5 .+ S[3]*x.^7 .+ S[4]*x.^9 .+ S[5]*x.^11 .+ S[6]*x.^13
using Plots
plot(x, y, label="sin(x)", linewidth=8, dpi=300, size=(728,300))
plot!(x, s₆, label="s_6", linewidth=3, ls=:dash, lc=:red)

無理数の近似
三角関数の計算も難しいのに、逆三角関数の計算はさらに難しくないか?アークタンジェントの関数値はアークタンジェントのテイラー級数を使って近似できるだろう。
tan−1x=n=0∑∞(−1)n2n+1x2n+1
上の式から面白い公式を得ることができ、x=1を代入すると次のようになる。
4π=tan−11=1−31+51−71+⋯
⟹π=4(1−31+51−71+⋯)
つまり、無理数πを近似できる級数を得ることができる。
積分
関数をテイラー級数として表現することは、関数値の計算だけでなく積分をする際にも有利だ。それもそのはず、テイラー級数は多項式だからだ。多項式の積分は非常に簡単なので、複雑な形の関数はテイラー級数として表して積分すると簡単だ。例えばf(x)=x2sinxのような関数の不定積分を求めるのは難しい。(部分積分法が思い浮かぶかもしれないが、実際にやってみると行き詰まってしまう。)このような場合、sinのテイラー級数を積分するほうが簡単だ。
∫x2sinxdx=∫x21n=0∑∞(−1)n(2n+1)!x2n+1dx=∫x21(x−3!x3+5!x5−7!x7+⋯)dx=∫(x1−3!x+5!x3−7!x5+⋯)dx=C+ln∣x∣−2⋅3!x2+4⋅5!x4−6⋅7!x6+⋯=C+ln∣x∣+n=1∑∞(−1)n2n(2n+1)!x2n
別の例としてex2のような関数を見てみよう。ex2の積分というのは、微分積分学の基本定理により、微分してex2になる関数を見つけることだ。このような関数を見つけようとすると、指数にx2が含まれていて容易ではない。このような場合、ex2を冪級数で表して不定積分するほうが簡単だ。
∫ex2dx=∫(1+x2+2!x4+⋯+n!x2n+⋯)dx=C+x+3⋅1!x3+5⋅2!x5+7⋅3!x7+⋯+(2n+1)n!x2n+1+⋯=C+n=0∑∞(2n+1)n!x2n+1
調和振動子
任意の関数を冪級数で表現する方法はいろいろな分野で応用される。物理学では、単純調和振動子のポテンシャルエネルギーをV(x)=a0+a1x+a2x2+⋯のような級数で与え、フックの法則F(x)=−kxと単純調和振動子の運動方程式x¨+xkx=0を導くことができる。
微分方程式の解
いくつかの微分方程式は解が冪級数で表現される。ベッセル微分方程式とその解(ベッセル関数)は次の通り。
x2y′′+xy′+(x2−ν2)y=0
Jν(x)=n=0∑∞Γ(n+1)Γ(n+ν+1)(−1)n(2x)2n+ν