如何生成 [0,1] 上勒让德多项式的正交基?
我尝试使用许多模块,但它们通常不提供标准化和间隔更改。是否有一些通用的标准化因素?或者间隔变化的公式?
你可以用
[-1, 1]
得到scipy.special.legendre
上的勒让德多项式。它们是正交的,但不是正交的。但已知,Ln(x)*Ln(x)
在[-1, 1]
上的积分为2 / (2*n +1)
,其中Ln
表示n
次勒让德多项式。因此,您可以按如下方式对勒让德多项式进行归一化:
import scipy.integrate as integrate
from scipy.special import legendre
from math import sqrt
l3 = legendre(3, monic=False)
integrate.quad(lambda x: l3(x)*l3(x), -1, 1) # = 2 / (2*degree + 1)
def l3normalized(x):
return sqrt((2*3 + 1) / 2) * l3(x)
integrate.quad(lambda x: l3normalized(x)*l3normalized(x), -1, 1) # = 1
现在,要更改间隔,您可以对变量进行线性更改:通过
Pn
在 [0, 1]
上定义 Pn(x) = sqrt(2) * Ln_normalized(2*x-1)
。那么 Pn
是正交的。
import scipy.integrate as integrate
from scipy.special import legendre
from math import sqrt
l3 = legendre(3, monic=False)
integrate.quad(lambda x: l3(x)*l3(x), -1, 1) # = 2 / (2*degree + 1)
def l3normalized(x):
return sqrt((2*3 + 1) / 2) * l3(x)
integrate.quad(lambda x: l3normalized(x)*l3normalized(x), -1, 1) # = 1
l4 = legendre(4, monic=False)
def l4normalized(x):
return sqrt((2*4 + 1) / 2) * l4(x)
def p3(x):
return sqrt(2) * l3normalized(2*x-1)
def p4(x):
return sqrt(2) * l4normalized(2*x-1)
integrate.quad(lambda x: p3(x)*p3(x), 0, 1) # = 1
integrate.quad(lambda x: p3(x)*p4(x), 0, 1) # = 0