1.3.4.1. 多项式
Numpy也包含不同基的多项式:
例如,$3x^2 + 2x - 1$:
In [211]:
p = np.poly1d([3, 2, -1])
p(0)
Out[211]:
-1
In [212]:
p.roots
Out[212]:
array([-1\. , 0.33333333])
In [213]:
p.order
Out[213]:
2
In [215]:
x = np.linspace(0, 1, 20)
y = np.cos(x) + 0.3*np.random.rand(20)
p = np.poly1d(np.polyfit(x, y, 3))
t = np.linspace(0, 1, 200)
plt.plot(x, y, 'o', t, p(t), '-')
Out[215]:
[<matplotlib.lines.Line2D at 0x10f40c2d0>,
<matplotlib.lines.Line2D at 0x10f40c510>]
更多内容见http://docs.scipy.org/doc/numpy/reference/routines.polynomials.poly1d.html。
1.3.4.1.1 更多多项式(有更多的基)
Numpy也有更复杂的多项式接口,支持比如切比雪夫基。
(3x^2 + 2x - 1):
In [216]:
p = np.polynomial.Polynomial([-1, 2, 3]) # 系数的顺序不同!
p(0)
Out[216]:
-1.0
In [217]:
p.roots()
Out[217]:
array([-1\. , 0.33333333])
In [218]:
p.degree() # 在普通的多项式中通常不暴露'order'
Out[218]:
2
在切尔雪夫基中使用多项式的例子,多项式的范围在[-1,1]:
In [221]:
x = np.linspace(-1, 1, 2000)
y = np.cos(x) + 0.3*np.random.rand(2000)
p = np.polynomial.Chebyshev.fit(x, y, 90)
t = np.linspace(-1, 1, 200)
plt.plot(x, y, 'r.')
plt.plot(t, p(t), 'k-', lw=3)
Out[221]:
[<matplotlib.lines.Line2D at 0x10f442d10>]
切尔雪夫多项式在插入方面有很多优势。