第二種チェビシェフ多項式
📂数値解析第二種チェビシェフ多項式
定義
Un(x):=n+11Tn+1’(x)=sinθsin((n+1)θ)を第2種チェビシェフ多項式と言うんだ。
基本性質
再帰公式
- [0]: Un+1(x)=2xUn(x)−Un−1(X)
直交集合
- [1] 関数の内積: ⟨f,g⟩:=∫abf(x)g(x)w(x)dx に対して重み w を w(x):=1−x2 のようにすると、{U0,U1,U2,⋯} は直交集合になるんだ。
チェビシェフノード
- [2]: Un(X) の根は k=1,⋯,n に対して次のようだ。
xk=cos(n+1kπ)
偶関数と奇関数
- [3]: Un(−x)=(−1)nUn(x)
- 普通、0≤θ≤π に対して θ:=cos−1x と設定するんだ。
同じく見る
説明
n=0,⋯,3 に対する第2種チェビシェフ多項式は次のように表されるんだ。
U0(x)=U1(x)=U2(x)=U3(x)=12x4x2−18x3−4x
Tn(X) は第1種チェビシェフ多項式だ。
n+11Tn+1’(x)=sinθsin((n+1)θ) が成り立つことは 逆三角関数の微分法 を使えば次のように示せるんだ。
Un(x)===n+11[cos((n+1)cos−1x)]’=n+1n+11−x2−1[−sin((n+1)cos−1x)]1−x2sin((n+1)cos−1x)sinθsin((n+1)θ)
第2種チェビシェフ多項式は数値解析だけでなく、応用数学全般で非常に役立つ関数で、第1種チェビシェフ多項式と共に面白い性質をたくさん持っているんだ。
一方で、第2種チェビシェフ多項式は逆に U0(x)=1、U1(x)=2x そして再帰式 [0] を使って定義することもできる。これは第1種チェビシェフ多項式にも当てはまることだし、第1種と第2種を呼ぶ理由は T1(x)=1⋅x と U1(x)=2⋅x だと考えてもいいんだ。
証明
[0]
第1種チェビシェフ多項式の再帰式 Tn+1(x)=2xTn(x)−Tn−1(X) の両辺を微分すると
Tn+1′(x)=2Tn(x)+2xTn′(x)−Tn−1′(x)
Tn+1′(x)=(n+1)Un(x) なので
(n+1)Un(x)=2Tn(x)+2xnUn−1(x)−(n−1)Un−2(x)
n とまとめると
n[Un(x)−2xUn−1(x)+Un−2(x)]=2Tn(x)+Un−2(x)−Un(x)
第1種、第2種チェビシェフ多項式の関係:
- [1]: Un(x)−Un−2(x)=2Tn(X)
n[Un(x)−2xUn−1(x)+Un−2(x)]=0
両辺を n で割って整理すると
Un+1(x)=2xUn(x)−Un−1(x)
■
[1]
dx=−sinθdθ=−1−x2dθ かつ sinθ=1−x2 だから
⟨Un,Um⟩====∫−11Un(x)Um(x)1−x2dx−∫π0sin2θsin((n+1)θ)sin((m+1)θ)sin2θdθ∫0πsin((n+1)θ)sin((m+1)θ)dθ{π/20,n=m,n=m
だから、{U0,U1,U2,⋯} は直交集合だ。
■
[2]
定義により自明だ。
■
[3]
ケース 1. n=0,1
U0(−x)=U1(−x)=1=U0(x)2(−x)=−2x=−U1(x)
ケース 2. n≥2 が偶数
Un(x) で、係数が 0 でないすべての項の次数は偶数だから、Un(−x)=Un(x) だ
ケース 3. n≥2 が奇数
Un(x) で、係数が 0 でないすべての項の次数は奇数だから、Un(−x)=−Un(x) だ
■
実装
下はRで書かれたチェビシェフ多項式のコードだ。
多項式そのものを返すから、直接計算に使うことができるんだ。n
は次数で、kind
で種類を指定し、print
オプションを真にすれば係数を表示してくれるんだ。

表示される係数は定数項から高次の項の順に出力され、第2種チェビシェフ多項式はU3(x)=8x3−4x だから、正しく求まったことがわかる。関数値も U3(3)=8⋅33−4⋅3=216−12=204 と正確に計算されたんだ。
Chebyshev<-function(n,kind=1,print=F)
{
p<-NA
if((round(n)-n)!=0 | n<0) {stop("Wrong Degree!!")}
if(!kind%in%(1:2)) {stop("Wrong Kind!!")}
if(n==0)
{
if(print) {print(1)}
p<-function(x) {return(1)}
return(p)
}
if(n==1)
{
if(print) {print(c(0,kind))}
p<-function(x) {return(kind*x)}
return(p)
}
coef0<-c(1)
coef1<-c(0,kind)
for(i in 1:(n-1))
{
coef2<- ( c(0,2*coef1) - c(coef0,0,0) )
coef0<-coef1
coef1<-coef2
}
if(print) {print(coef2)}
p<-function(x) {return(sum(coef2*x^(0:n)))}
return(p)
}
p<-Chebyshev(1,2); p(2)
p<-Chebyshev(3,2,T); p(3)