nano_exit

基礎的なことこそ、簡単な例が必要だと思うのです。

Legendre多項式の直交性を python (scipy) で確かめる

いつもnumpyの多項式の使い方を忘れるので、Legendre多項式の直交関係式で練習する。
ルジャンドル多項式 - Wikipedia


\displaystyle
\int^{1}_{-1} P_{ l' }( x ) \, P_{ l }( x ) \, dx = \frac{ 2 }{ 2 l + 1 } \delta_{ l' l }

scipy.special.legendreでLegendre多項式を作ると、poly1dというタイプの関数が帰ってくるので、そのままxを代入できる(下記リンク or サンプルスクリプト参照)。
scipy.special.legendre — SciPy v1.0.0 Reference Guide
numpy.poly1d — NumPy v1.14 Manual

積分は一次元積分のquadを使用。
Python SciPy : SciPy の積分関数の基本的使い方 | org-技術

from scipy.special import legendre
from scipy.integrate import quad

def Plx( l, x ):
    # legendre( l ) >>> poly1d([ ... ])
    # poly1d([ ... ])( x ) >>> float
    return legendre( l )( x )

def orthogonal_relation( lp, l ):
    # quad >>> ( result, error )
    return quad( lambda x: Plx( lp, x ) * Plx( l, x ), -1., 1. ) [0]

if __name__ == '__main__'
    for lp in range( 5 ):
        for l in range( 5 ):
            print( 'lp, l = ', lp, l )
            print ( 'numerical', orthogonal_relation( lp, l ) )
            if lp == l:
                print( 'analytical', 2. / ( 2 * l + 1. ) )
            else:
                print( 'analytical', 0. )