pianofisica

Mathematics & Physics, Maxima, a bit Python & Wolfram, and Arts

入力例で学ぶPython (SymPy) :直交多項式

数学の具体的な計算にPythonを使って、数学もPythonも同時に学んでしまいましょう。

数学では、有用な性質を持っていることから特別な名前がつけられている多項式がたくさんあります。

Chebyshev多項式(チェビシェフ多項式

具体例

import sympy as sp
sp.init_printing()
n=sp.symbols('n', integer=True)
x=sp.var('x')
C_list = []
for n in range(7):
    c = sp.chebyshevt(n,x)
    C_list.append(c)
C_list

から

\quad\displaystyle{
\begin{array}{l}
T_{0}(x)=1 \\ 
T_{1}(x)=x \\ 
T_{2}(x)=2x^{2}-1 \\ 
T_{3}(x)=4x^{3}-3x \\ 
T_{4}(x)=8x^{4}-8x^{2}+1\\
\quad\vdots
\end{array}
}

直交性

\quad\displaystyle{
\int_{-1}^1 dx\ \frac{1}{\sqrt{1-x^2}}T_m(x)T_n(x) =\frac{\pi}{2}\delta_{mn}
}

実際、

import sympy as sp
sp.init_printing()
x=sp.var('x')
sp.integrate(sp.chebyshevt(1,x)*sp.chebyshevt(1,x)/sp.sqrt(1-x**2), (x, -1, 1))

などにより確かめられます。

Legendre多項式ルジャンドル多項式

具体例

import sympy as sp
sp.init_printing()
n=sp.symbols('n', integer=True)
x=sp.var('x')
P_list = []
for n in range(7):
    p = sp.legendre(n,x)
    P_list.append(p)
P_list

から

\quad\displaystyle{
\begin{array}{l}
P_{0}(x)=1 \\ 
P_{1}(x)=x \\ 
P_{2}(x)=\frac{3}{2}x^{2}-\frac{1}{2} \\ 
P_{3}(x)=\frac{5}{2}x^{3}-\frac{3}{2}x \\ 
P_{4}(x)=\frac{35}{8}x^{4}-\frac{15}{4}x^{2}+\frac{3}{8} \\
\quad\vdots
\end{array}
}

直交性

\quad\displaystyle{
\int_{-1}^1 dx\ P_m(x)P_n(x) =\frac{2}{2n+1}\delta_{mn}
}

実際、

import sympy as sp
sp.init_printing()
x=sp.var('x')
n=sp.symbols('n', integer=True)
Pint_list = []
for n in range(7):
    pint = sp.integrate(sp.legendre(n,x)*sp.legendre(n,x), (x, -1, 1))
    Pint_list.append(pint)
Pint_list

などによって確認できます。

Legendre陪関数(ルジャンドル陪関数)

Legendre陪関数 \ P^m_n(x) はLegendre多項式 \ P^m(x) から次のようにして定義されます:

\quad\displaystyle{
P^m_n(x)=(-1)^m(1-x^2)^{\frac{m}{2}}\frac{d^m P_n(x)}{dx^m}
}

SymPyでの入力は

n, m=sp.symbols('n, m', integer=True)
x=sp.var('x')
sp.assoc_legendre(n,m,x)

となります。

Hermite多項式(エルミート多項式

具体例

import sympy as sp
sp.init_printing()
n=sp.symbols('n', integer=True)
x=sp.var('x')
H_list = []
for n in range(7):
    h = sp.hermite(n,x)
    H_list.append(h)
H_list

から

\quad\displaystyle{
\begin{array}{l}
H_{0}(x)=1 \\ 
H_{1}(x)=2x \\ 
H_{2}(x)=4x^2-2 \\ 
H_{3}(x)=8x^3-12 \\ 
H_{4}(x)=16x^4-48x^2+12 \\
\quad\vdots
\end{array}
}

直交性

\quad\displaystyle{
\int_{-\infty}^\infty dx\ e^{-x^2}H_m(x)H_n(x) =\frac{2}{2n+1}\delta_{mn}
}

実際、

import sympy as sp
sp.init_printing()
x=sp.var('x')
n=sp.symbols('n', integer=True)
Hint_list = []
for n in range(7):
    hint = sp.integrate(sp.exp(-x**2)*sp.hermite(n,x)*sp.hermite(n,x), (x, -00, 00))
    Hint_list.append(hint)
Pint_list

などによって確認できます。


Laguerre多項式(ラゲール多項式

具体例

import sympy as sp
sp.init_printing()
n=sp.symbols('n', integer=True)
x=sp.var('x')
L_list = []
for n in range(7):
    l = sp.laguerre(n,x)
    L_list.append(l)
L_list

から

\quad\displaystyle{
\begin{array}{l}
L_{0}(x)=1 \\ 
L_{1}(x)=1-x \\ 
L_{2}(x)=\frac{1}{2}x^2-2x+1 \\ 
L_{3}(x)=-\frac{1}{6}x^3+\frac{3}{2}x^2-3x+1 \\ 
L_{4}(x)=\frac{1}{24}x^4-\frac{2}{3}x^3+3x^2-4x+1 \\
\quad\vdots
\end{array}
}


Jacobi多項式(ヤコビ多項式

具体例

import sympy as sp
sp.init_printing()
n=sp.symbols('n', integer=True)
a, b, x=sp.var('a, b, x')
sp.jacobi(n,a,b,x)

とくに  \ a=b=0 とするとJacobi多項式はLegendre多項式に一致します:

\quad\displaystyle{
P^{(0,0)}_n(x)=P_n(x)
}

sp.jacobi(n,0,0,x)

直交性

\quad\displaystyle{
\int dx\ (1-x)^a(1-x)^bP^{(a,b)}_m(x)P^{(a,b)}_n(x) \ \begin{cases} =0 \quad (m\neq 0)\\ \neq 0 \quad (m=n)\end{cases}
}


球面調和関数(spherical harmonics)

\quad\displaystyle{
Y_{n\, m} (\theta,\phi) =\sqrt{\frac{(2n+1)}{4\pi}\,\frac{(n-m)!}{(n+m)!}}e^{im\phi}P^m_n(\cos \theta)
\qquad (- n\leq m \leq n)
}

ここで  \ P^m_n はLegendreの陪関数です。SymPyでの入力は

n, m=sp.symbols('n, m', integer=True)
theta, phi=sp.var('theta, phi')
sp.Ynm(n,m,theta,phi)


キーワード:直交多項式Python、SymPy