Python 中的勒让德多项式

问题描述 投票:0回答:1

如何生成 [0,1] 上勒让德多项式的正交基?

我尝试使用许多模块,但它们通常不提供标准化和间隔更改。是否有一些通用的标准化因素?或者间隔变化的公式?

python polynomials polynomial-math polynomial-approximations
1个回答
0
投票

你可以用

[-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
© www.soinside.com 2019 - 2024. All rights reserved.