使用 Python SciPy 计算罗德里格斯公式 P_n(x)(勒让德多项式)

Use Python SciPy to compute the Rodrigues formula P_n(x) (Legendre polynomials)

我正在尝试使用 Python 来计算罗德里格斯公式 P_n(x)。

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

也就是说,我想要一个接受两个输入参数 n 和 x 以及 returns 该公式输出的函数。

不过,我认为SciPy还没有这个功能。 SpiPy 确实提供勒让德模块:

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

我认为这些都不是罗德里格斯公式。我错了吗?

是否有标准方法 SciPy 提供执行此操作?

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

如果您只是想要 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在某种意义上是罗德里格斯公式的"output":它是所需阶数的多项式,可以在提供的值[=14处求值=].如果你想要一个接受 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])