我试图用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提供了一种标准方式吗?
编辑:我希望输入参数是数组,而不仅仅是单个输入值。
答案 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
的提供值下进行评估。如果您想要使用n
和x
的单个函数,则可以使用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])