logo

第二種チェビシェフ多項式 📂数値解析

第二種チェビシェフ多項式

定義

$$U_{n} (x) := {{1} \over {n+1} } T_{n+1} ’ (x) = {{\sin \left( ( n +1 ) \theta \right)} \over { \sin \theta }} $$を第2種チェビシェフ多項式と言うんだ。

基本性質

再帰公式

  • [0]: $$U_{n+1} (x) = 2x U_{n} (x) - U_{n-1} (X)$$

直交集合

  • [1] 関数の内積: $\displaystyle \left<f, g\right>:=\int_a^b f(x) g(x) w(x) dx$ に対して重み $w$ を $\displaystyle w(x) := \sqrt{1 - x^2}$ のようにすると、$\left\{ U_{0} , U_{1}, U_{2}, \cdots \right\}$ は直交集合になるんだ。

チェビシェフノード

  • [2]: $\displaystyle U_{n} (X)$ の根は $k=1, \cdots , n$ に対して次のようだ。 $$x_{k} = \cos \left( {{k} \over {n+1}} \pi \right)$$

偶関数と奇関数

  • [3]: $$U_{n} (-x) = (-1)^{n} U_{n} (x)$$

  • 普通、$0 \le \theta \le \pi$ に対して $\theta := \cos^{-1} x $ と設定するんだ。

同じく見る

説明

$n = 0, \cdots , 3$ に対する第2種チェビシェフ多項式は次のように表されるんだ。

$$ \begin{align*} U_{0} (x) =& 1 \\ U_{1} (x) =& 2x \\ U_{2} (x) =& 4x^{2} - 1 \\ U_{3} (x) =& 8x^{3} - 4x \end{align*} $$

$T_{n} (X)$ は第1種チェビシェフ多項式だ。

$\displaystyle {{1} \over {n+1} } T_{n+1} ’ (x) = {{\sin \left( ( n +1 ) \theta \right)} \over { \sin \theta }}$ が成り立つことは 逆三角関数の微分法 を使えば次のように示せるんだ。 $$ \begin{align*} \displaystyle U_{n} (x) =& {{1} \over {n+1} } \left[ \cos \left( ( n +1 ) \cos^{-1} x \right) \right]’ \\ &= {{n+1} \over {n+1} } {{ - 1} \over { \sqrt{ 1 - x^{2} } }} \left[ - \sin \left( ( n +1 ) \cos^{-1} x \right) \right] \\ =& {{\sin \left( ( n +1 ) \cos^{-1} x \right)} \over { \sqrt{ 1 - x^{2} } }} \\ =& {{ \sin \left( (n+1) \theta \right) } \over {\sin \theta }} \end{align*} $$ 第2種チェビシェフ多項式は数値解析だけでなく、応用数学全般で非常に役立つ関数で、第1種チェビシェフ多項式と共に面白い性質をたくさん持っているんだ。

一方で、第2種チェビシェフ多項式は逆に $U_{0} (x) = 1$、$U_{1} (x) = 2x$ そして再帰式 [0] を使って定義することもできる。これは第1種チェビシェフ多項式にも当てはまることだし、第1種と第2種を呼ぶ理由は $T_{1} (x) = 1 \cdot x$ と $U_{1} (x) = 2 \cdot x$ だと考えてもいいんだ。

証明

[0]

第1種チェビシェフ多項式の再帰式 $T_{n+1} (x) = 2x T_{n} (x) - T_{n-1} (X)$ の両辺を微分すると $$ T_{n+1} ' (x) = 2 T_{n} (x) + 2x T_{n} ' (x) - T_{n-1} ' (x) $$ $T_{n+1} ' (x) = ( n+1 ) U_{n} (x) $ なので $$ (n+1) U_{n} (x) = 2 T_{n} (x) + 2x n U_{n-1} (x) - (n-1) U_{n-2} (x) $$ $n$ とまとめると $$ n \left[ U_{n} (x) - 2x U_{n-1} (x) + U_{n-2} (x) \right] = 2 T_{n} (x) + U_{n-2} (x) - U_{n} (x) $$

第1種、第2種チェビシェフ多項式の関係:

  • [1]: $$U_{n} (x) - U_{n-2} (x) = 2 T_{n} (X)$$

$$ n \left[ U_{n} (x) - 2x U_{n-1} (x) + U_{n-2} (x) \right] = 0 $$ 両辺を $n$ で割って整理すると $$ U_{n+1} (x) = 2x U_{n} (x) - U_{n-1} (x) $$

[1]

$dx = - \sin \theta d \theta = - \sqrt{1 - x^2} d \theta$ かつ $\sin \theta = \sqrt{1 - x^2}$ だから $$ \begin{align*} \displaystyle \left< U_{n}, U_{m} \right> =& \int_{-1}^{1} U_{n} (x) U_{m} (x) \sqrt{1 - x^2} d x \\ =& - \int_{\pi}^{0} {{ \sin \left( (n + 1 ) \theta \right) \sin \left( (m + 1 ) \theta \right) \sin^2 \theta } \over { \sin^2 \theta}} d \theta \\ =& \int_{0}^{\pi} \sin \left( (n + 1 ) \theta \right) \sin \left( (m + 1 ) \theta \right) d \theta \\ =& \begin{cases} \pi/2 &, n=m \\ 0 &, n \ne m \end{cases} \end{align*} $$ だから、$\left\{ U_{0} , U_{1}, U_{2}, \cdots \right\}$ は直交集合だ。

[2]

定義により自明だ。

[3]

ケース 1. $n=0,1$

$$ \begin{align*} U_{0} (-x) =& 1 = U_{0} (x) \\ U_{1} (-x) =& 2(-x) = -2x = - U_{1} (x) \end{align*} $$


ケース 2. $n \ge 2$ が偶数

$U_{n}(x)$ で、係数が $0$ でないすべての項の次数は偶数だから、$U_{n}(-x) = U_{n}(x)$ だ


ケース 3. $n \ge 2$ が奇数

$U_{n}(x)$ で、係数が $0$ でないすべての項の次数は奇数だから、$U_{n}(-x) = - U_{n}(x)$ だ

実装

下はRで書かれたチェビシェフ多項式のコードだ。

多項式そのものを返すから、直接計算に使うことができるんだ。nは次数で、kindで種類を指定し、printオプションを真にすれば係数を表示してくれるんだ。

20181120\_130322.png

表示される係数は定数項から高次の項の順に出力され、第2種チェビシェフ多項式は$U_{3} (x) = 8x^{3} - 4x$ だから、正しく求まったことがわかる。関数値も $U_{3} (3) = 8 \cdot 3^{3} - 4 \cdot 3 = 216-12 = 204$ と正確に計算されたんだ。

Chebyshev<-function(n,kind=1,print=F)
{
  p<-NA
  
  if((round(n)-n)!=0 | n<0) {stop("Wrong Degree!!")} #degree must be nonnegative integer
  if(!kind%in%(1:2)) {stop("Wrong Kind!!")} #kind must be 1 or 2
  
  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)