LoginSignup
16
13

More than 5 years have passed since last update.

チェビシェフ多項式による関数近似:Juliaで眺めてみる。

Posted at

チェビシェフ多項式を使って、関数を近似する方法をまとめる。
最後にデルタ関数を例にして近似された様子をJulia 0.6.2でgifアニメにした。

チェビシェフ多項式とは

チェビシェフ多項式とは、$-1 \le x \le 1$の範囲で
$$
T_{n}(x) = \cos (n \arccos x)
$$
で定義される関数である。もう少しわかりやすく書くと、$x = \cos t$
$$
T_{n}(x) = \cos (n t)
$$
と書くことができて、cosの加法定理を使ってバラバラにしていくとどんどん計算できる。
そして、この多項式は漸化式:
$$
T_0(x) = 1
$$
$$
T_1(x) = x
$$
$$
T_{n+1}(x) = 2 T_{n}(x) - T_{n-1}(x)
$$
に従う関数である。

チェビシェフ多項式の直交性

チェビシェフ多項式には、以下のような直交性がある
$$
\frac{2}{\pi (1 + \delta_{n0})}\int_{-1}^{1} T_n(x)T_m(x)\frac{dx}{\sqrt{1-x^2}} = \delta_{nm}
$$
この直交性を使うと、任意の$-1 \le x \le 1$の範囲にある関数を
$$
f(x) = \sum_{n=0}^{\infty} a_n T_{n}(x)
$$
とチェビシェフ多項式で展開することができる。
これは、この式の両辺に$\frac{2}{\pi (1 + \delta_{n0})} T_m(x)/\sqrt{1-x^2}$をかけて$x$で積分すれば確かめることができて、
$$
\frac{2}{\pi (1 + \delta_{m0})}\int_{-1}^{1} f(x)T_m(x)\frac{dx}{\sqrt{1-x^2}} = a_n
$$
という係数を用いれば良いことがわかる。

デルタ関数の展開

試しにデルタ関数を展開してみよう。展開係数は
$$
a_n = \frac{2}{\pi (1 + \delta_{m0})}\int_{-1}^{1} \delta(x)T_m(x)\frac{dx}{\sqrt{1-x^2}} = \frac{2T_{m}(0
)}{\pi (1 + \delta_{m0})}
$$
である。
これを使ってプロットしてみよう。
言語はJulia 0.6.2を用いる。
Juliaは高速で書きやすい言語で、
www.juliabox.com
で簡単に試すことができる。
デルタ関数のチェビシェフ多項式展開とそのカットオフ依存性のgifアニメを描画するJuliaコードは

chebyshev.rb
using Plots
gr()

function calc_f(nmax,x)
    f = 0.0
    ax = acos(x)
    Tn(n) = cos(n*π/2) 
    for n in 0:nmax
        an = 2*Tn(n)/(π*(1+ifelse(n==0,1,0)))
        f += cos(n*ax)*an
    end
    return f
end

L = 200
x = linspace(-1,1,L)

@gif for nmax in 1:100
    plot(x,calc_f.(nmax,x))
end

と書ける。これを実行すると、

tmp.gif

となる。

16
13
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
13