所以,我试图使用numpy.polynomial.legendre命令来生成P2到Pn多项式公式。
我想输入2并且它给我p2 = 1/2 *(-1 +3x**2)
或者如果输入是3则它得到P3公式。
这样我可以给x值计算每个Pn,并使用我的一些类方法来计算错误,以找到根。
我设法使用:
制作剧情 numpy.polynomial.legendre.legval (x, np.identity(10))
答案 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>]