我想把一个定义好的函数分段积分,这个函数乘以勒让德多项式。
不幸的是,我找不到如何在documentation中使用x的第n个勒让德多项式。当n = 1,..., 50时,我要对x的每个Legendre多项式进行积分,所以我设置了n = np.arange(1, 51, 1)。在import numpy as np
import pylab
from scipy import integrate
n = np.arange(1, 51, 1)
def f(x):
if 0 <= x <= 1:
return 1
if -1 <= x <= 0:
return -1
我想我需要定义另一个函数,比如u(x)。在
^{pr2}$
所以我会返回一些u(x),前50个项用Legendre多项式展开我的分段函数。在
编辑1:
如果不能这样做,我可以用罗德里格斯公式来计算第n个勒让德多项式。然而,当我在Python中寻找n阶导数时,我找不到任何有用的东西。在P_n(x) = \frac{1}{2^n n!}\frac{d^n}{dx^n}(x^2 - 1)^n
因此,如果有人知道如何在Python中实现这样的方案,那么这是一个选择。在
编辑2:
用萨洛·卡斯特罗的回答,我有:import numpy as np
from scipy.integrate import quad
def f(x, coef):
global p
p = np.polynomial.legendre.Legendre(coef=coef)
if 0 <= x <= 1:
return 1*p(x)
if -1 <= x <= 0:
return -1*p(x)
c = []
for n in range(1, 51):
c.append((2. * n + 1.) / 2. * quad(f, -1, 1, args=range(1,n+1))[0])
def g(x)
return sum(c * p(x) for n in range(1, 51))
但是,如果我打印c,则值是错误的。值应该是1.5, 0, -7/8, 0, ...
另外,当我绘制g时,我想做x = np.linspace(-1, 1, 500000),所以绘图很详细,但是{}只有50。如何做到这一点?在