いつもnumpyの多項式の使い方を忘れるので、Legendre多項式の直交関係式で練習する。
ルジャンドル多項式 - Wikipedia
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. )