使用Numpy创建Legendre公式

时间:2014-05-02 01:27:55

标签: python numpy matplotlib formula

所以,我试图使用numpy.polynomial.legendre命令来生成P2到Pn多项式公式。 我想输入2并且它给我p2 = 1/2 *(-1 +3x**2)或者如果输入是3则它得到P3公式。

这样我可以给x值计算每个Pn,并使用我的一些类方法来计算错误,以找到根。

我设法使用:

制作剧情
 numpy.polynomial.legendre.legval (x, np.identity(10))

2 个答案:

答案 0 :(得分:6)

我认为您正在寻找功能scipy.special.legendre

#Build the polynomial
>>> import scipy.special as sp
>>> sp.legendre(2)
poly1d([ 1.5,  0. , -0.5])

#Compute on an interval from -1 to 1
>>> sp.legendre(2)(np.linspace(-1,1,10))
array([ 1.        ,  0.40740741, -0.03703704, -0.33333333, -0.48148148,
       -0.48148148, -0.33333333, -0.03703704,  0.40740741,  1.        ])

答案 1 :(得分:3)

您也可以使用numpy多项式包。

In [1]: from numpy.polynomial import Polynomial, Legendre

In [2]: for i in range(5):
   ...:     p = Legendre.basis(i).convert(kind=Polynomial)
   ...:     print p.coef
   ...: 
[ 1.]
[ 0.  1.]
[-0.5  0.   1.5]
[ 0.  -1.5  0.   2.5]
[ 0.375  0.    -3.75   0.     4.375]

请注意,系数从低到高顺序。但是,没有必要转换为幂级数来计算值,而且更准确的不是。

In [3]: Legendre.basis(2)(np.linspace(-1,1,10))
Out[3]: 
array([ 1.        ,  0.40740741, -0.03703704, -0.33333333, -0.48148148,
       -0.48148148, -0.33333333, -0.03703704,  0.40740741,  1.        ])

您还可以使用linspace方法从[-1,1]绘制结果。

In [4]: plot(*Legendre.basis(2).linspace())
Out[4]: [<matplotlib.lines.Line2D at 0x30da4d0>]