第一種チェビシェフ多項式
第一種チェビシェフ多項式 (Chebyshev polynomials of the first kind) は
\[T_n(\cos\theta)=\cos(n\theta)\tag{1}\]
によって定義されます。$x=\cos\theta$ とおけば、
\[T_n(x)=\cos(n \mathrm{Arccos}x)\tag{2}\]
と表すことができます。逆三角関数 $\mathrm{Arccos}x$ が含まれるので、$T_n(x)$ の定義域は $[-1,1]$ に制限されます。第一種チェビシェフ多項式は漸化式
\[\begin{align*}&T_0(x)=1\\[6pt]&T_1(x)=x\\[6pt]&T_{n+1}(x)=2xT_n(x)-T_{n-1}(x)\end{align*}\tag{3}\]
を満たします。$T_n(x)$ の具体的な表式を並べると
\[\begin{align*}&T_0(x)=1\\[6pt]&T_1(x)=x\\[6pt]&T_2(x)=2x^2-1\\[6pt]&T_3(x)=4x^3-3x\\[6pt]&T_4(x)=8x^4-8x^2+1\end{align*}\]
となります。
scipy.special.eval_chebyt()
scipy.special.eval_chebyt(n, x) を使うと、n 次の第一種チェビシェフ多項式の点 x における値を評価できます。
# SCIPY_CHEBYSHEV_01
# In[1]
import numpy as np
from scipy.special import eval_chebyt
x = np.array([-1, -0.5, 0, 0.5, 1])
# 9次の第一種チェビシェフ多項式のxにおける値を計算
t = eval_chebyt(9, x)
print(t)
[-1. 1. 0. -1. 1.]
第一種チェビシェフ多項式のグラフを描画するコードも載せておきます。
# In[2]
# 第1種チェビシェフ多項式のグラフ
import matplotlib.pyplot as plt
# グラフ描画領域を設定
fig = plt.figure(figsize = (6, 6))
ax = fig.add_subplot(111)
ax.set_title("Chebyshev polynomials", size = 15)
ax.grid()
ax.set_xlim(-1, 1)
ax.set_ylim(-1.5, 1.5)
ax.set_xlabel("x", size = 14, labelpad = 8)
ax.set_ylabel("Tn(x)", size = 14, labelpad = 8)
# x座標データ
x = np.linspace(-1, 1, 129)
# 色のリスト
c = ["red", "blue", "green", "darkorange"]
# T0,T1,T2,T3のグラフを描画
for i in range(4):
ax.plot(x, eval_chebyt(i, x),
label = "n = {}".format(i), color = c[i-1])
# 凡例を表示
ax.legend()
plt.show()
scipy.special.eval_chebyt() は値をとるだけです。
係数の取得や微分・積分など、多項式自体を操作する必要があるときは、後述する scipy.special.chebyt() で多項式オブジェクトを作成してください。
scipy.special.chebyt()
scipy.special.chebyt(n) は n 次の第一種チェビシェフ多項式オブジェクトを生成します。
# SCIPY_CHEBYSHEV_02
# In[1]
import numpy as np
from scipy.special import chebyt
# 3次の第一種チェビシェフ多項式を生成
t3 = chebyt(3)
print(t3)
3 4 x - 3 x
生成されたオブジェクトの引数に数値を渡して、任意の点におけるチェビシェフ多項式の値を取得できます。
# In[2]
# x=[-1.0 -0.5 0.0 0.5 1.0]
x = np.linspace(-1, 1, 5)
print(t3(x))
[-1. 1. -0. -1. 1.]
多項式オブジェクトは、次数、係数、根、変数などのデータ属性(インスタンス変数)を備えています。
# In[3]
# 次数を取得
print("次数 {}".format(t3.o))
# 係数を取得
print("係数 {}".format(t3.c))
# 根を取得
print("根 {}".format(t3.r))
# 変数を取得
print("変数 {}".format(t3.variable))
次数 3 係数 [ 4. 0. -3. 0.] 根 [ 0.8660254 -0.8660254 0. ] 変数 x
deriv()メソッドで多項式を微分できます。
# In[4]
# t3を微分
print(t3.deriv())
2 12 x - 3
integ()メソッドで多項式を積分できます。
# In[5]
# t3を積分
print(t3.integ())
4 2 1 x - 1.5 x
第二種チェビシェフ多項式
第二種チェビシェフ多項式 (Chebyshev polynomials of the second kind) は
\[U_{n}(\cos t)=\frac{\sin(n+1)t}{\sin(t)}\tag{4}\]
で定義される多項式です。$x=\cos t$ とおくと、
\[U_n(x)=\frac{\sin((n+1)\mathrm{Arccos}x)}{\sin(\mathrm{Arccos}x)}\tag{5}\]
となります。$U_n(x)$ は漸化式
\[\begin{align*}&U_0(x)=1\\[6pt]&U_1(x)=2x\\[6pt]&U_{n+1}=2xU_n(x)-U_{n-1}(x)\end{align*}\tag{6}\]
を満たします。この漸化式だけでは区間は制限されませんが、定義式 (4) に逆三角関数 $\mathrm{Arccos}x$ が含まれているので、一般に $U_n(x)$ は区間 [$-1,\ 1$] に制限されます。漸化式を使うと、$U_n(x)$ の表式
\[\begin{align*}&U_0(x)=1\\[6pt]&U_1(x)=x\\[6pt]&U_2(x)=4x^2-1\\[6pt]&U_3(x)=8x^3-4x\end{align*}\]
を順次得ることができます。
scipy.special.eval_chebyu()
scipy.special.eval_chebyu(n, x) は次数 n の第二種チェビシェフ多項式の x における値を評価します。ただし、n に非整数の値を渡すことも可能で、引数 x に区間制限は設けられていません。
# SCIPY_CHEBYSHEV_03
# In[1]
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import eval_chebyu
# グラフ描画領域を設定
fig = plt.figure(figsize = (6, 6))
ax = fig.add_subplot(111)
ax.set_title("Chebyshev polynomials of the 2nd kind", size = 14)
ax.grid()
ax.set_xlim(-1, 1)
ax.set_ylim(-3, 3)
ax.set_xlabel("x", size = 14, labelpad = 8)
ax.set_ylabel("Un(x)", size = 14, labelpad = 8)
# x座標データ
x = np.linspace(-1, 1, 129)
# 色のリスト
c = ["red", "blue", "green", "darkorange"]
# U0,U1,U2,U3のグラフを描画
for i in range(4):
ax.plot(x, eval_chebyu(i, x),
label = "n = {}".format(i), color = c[i-1])
# 凡例を表示
ax.legend()
plt.show()
第二種チェビシェフ多項式を (4) で定義する限り、$n$ は必ずしも整数値である必要はありません。ただし、$n$ が非整数の場合は多項式の直交性は失われ、$U_n(x)$ を漸化式を使って導き出すことはできません。
先ほど述べたように、scipy.special.eval_chebyu() は n に非整数の値を渡すこともできます。コードは省略しますが、n に半整数を渡したときの $U_n(x)$ のグラフも掲載しておきます。
scipy.special.chebyu()
scipy.special.chebyu(n) は n 次の第二種チェビシェフ多項式オブジェクトを生成します。
# SCIPY_CHEBYSHEV_04
# In[1]
# 5次の第二種チェビシェフ多項式を生成
u5 = chebyu(5)
print(u5)
5 3 32 x - 32 x + 6 x
生成された第二種チェビシェフ多項式オブジェクトは次数、係数、根などの属性値をもっています。
# In[2]
# 次数を取得
print("次数 {}".format(u5.o))
# 係数を取得
print("係数 {}".format(u5.c))
# 根を取得
print("根 {}".format(u5.r))
# 変数を取得
print("変数 {}".format(u5.variable))
次数 5 係数 [ 32. 0. -32. 0. 6. 0.] 根 [-0.8660254 -0.5 0.8660254 0.5 0. ] 変数 x
deriv()メソッドで微分、integ()メソッドで積分できます。
# In[3]
# u5を微分
u5_d = u5.deriv()
# u5を積分
u5_i = u5.integ()
print("導関数\n{}\n".format(u5_d))
print("積分\n{}".format(u5_i))
導関数 4 2 160 x - 96 x + 6 積分 6 4 2 5.333 x - 8 x + 3 x
人工知能がチェビシェフ多項式を解説します
チェビシェフ多項式(Chebyshev polynomials)は、数学的に重要な多項式の一群です。これらの多項式は、ロシアの数学者パフヌティ・チェビシェフ(Pafnuty Chebyshev)によって導入され、彼の名前にちなんで名付けられました。チェビシェフ多項式は、[-1, 1]の範囲で定義されます。n次のチェビシェフ多項式は、Tn(x)と表記されます。以下に、最初のいくつかのチェビシェフ多項式の例を示します。
T0(x) = 1
T1(x) = x
T2(x) = 2x^2 – 1
T3(x) = 4x^3 – 3x
T4(x) = 8x^4 – 8x^2 + 1
チェビシェフ多項式は、多くの応用分野で使用されます。特に、数値解析や物理学、信号処理、データフィッティングなどで有用です。以下に、いくつかの特性と応用について説明します。
1. 正規化: チェビシェフ多項式は、[-1, 1]の範囲で正規化されています。これにより、他の区間に変換する場合でも便利です。
2. 直交性: チェビシェフ多項式は、[-1, 1]の範囲で相互に直交します。すなわち、n ≠ mのとき、∫(Tn(x)Tm(x))dx = 0です。この直交性の性質は、数値積分やフーリエ解析などで利用されます。
3. 最小二乗近似: チェビシェフ多項式は、与えられたデータに対して最小二乗近似を行うのに適しています。データフィッティングや曲線フィッティングに使用され、多項式近似の精度を向上させることができます。
4. 数値解析: チェビシェフ多項式は、数値解析の手法に広く使用されます。例えば、微分方程式の数値解法や数値積分、行列の近似、フーリエ変換などに応用されます。
5. 三角関数の近似(続き): チェビシェフ多項式は、三角関数の近似においても有用です。具体的には、与えられた関数をチェビシェフ多項式の線形結合で近似することができます。この近似法は、特に高速フーリエ変換(FFT)などのアルゴリズムにおいて、計算効率を改善するために利用されます。
6. ゼロ点: チェビシェフ多項式は、[-1, 1]の範囲でn個の異なるゼロ点を持ちます。これらのゼロ点は、数値解析や関数近似において重要な役割を果たします。
以上が、チェビシェフ多項式の概要と主な応用についての説明です。チェビシェフ多項式は、数学や科学のさまざまな分野で幅広く使用され、特に数値解析や関数近似の分野で重要な役割を果たしています。