使用Python SciPy计算Rodrigues公式P_n(x)(勒让德多项式)

时间:2015-04-20 18:42:10

标签: python numpy scipy

我试图用Python来计算Rodrigues公式,P_n(x)。

http://en.wikipedia.org/wiki/Rodrigues%27_formula

也就是说,我想要一个函数,它接受两个输入参数n和x,并返回该公式的输出。

但是,我并不认为SciPy有这个功能。 SpiPy确实提供了勒让德模块:

http://docs.scipy.org/doc/numpy/reference/routines.polynomials.legendre.html

我认为这些都不是Rodrigues的公式。我错了吗?

SciPy提供了一种标准方式吗?

编辑:我希望输入参数是数组,而不仅仅是单个输入值。

1 个答案:

答案 0 :(得分:4)

如果您只是想要P_n(x),那么您可以使用scipy.special.legendre创建一个表示P_n多项式的合适对象,并使用您的值x调用它:

In [1]: from scipy.special import legendre
In [2]: n = 3
In [3]: Pn = legendre(n)
In [4]: Pn(2.5)
Out[4]: 35.3125        # P_3(2.5)

在某种意义上,对象Pn是"输出"罗德里格斯公式:它是所需顺序的多项式,可以在x的提供值下进行评估。如果您想要使用nx的单个函数,则可以使用eval_legendre

In [5]: from scipy.special import eval_legendre
In [6]: eval_legendre(3, 2.5)
Out[6]: 35.3125

正如the docs中所述,这是为大型n(例如n > 20)执行此操作的推荐方法,而不是创建具有所有系数的多项式对象不处理舍入误差和数值稳定性。

编辑:两种方法都适用于数组(至少对于x参数)。例如:

In [7]: x = np.array([0, 1, 2, 5, 10])
In [8]: Pn(x)
Out[8]: 
array([  0.00000000e+00,   1.00000000e+00,   1.70000000e+01,
     3.05000000e+02,   2.48500000e+03])