1.3.4.1. 多项式

Numpy也包含不同基的多项式:

例如,$3x^2 + 2x - 1$:

In [211]:

  1. p = np.poly1d([3, 2, -1])
  2. p(0)

Out[211]:

  1. -1

In [212]:

  1. p.roots

Out[212]:

  1. array([-1\. , 0.33333333])

In [213]:

  1. p.order

Out[213]:

  1. 2

In [215]:

  1. x = np.linspace(0, 1, 20)
  2. y = np.cos(x) + 0.3*np.random.rand(20)
  3. p = np.poly1d(np.polyfit(x, y, 3))
  4. t = np.linspace(0, 1, 200)
  5. plt.plot(x, y, 'o', t, p(t), '-')

Out[215]:

  1. [<matplotlib.lines.Line2D at 0x10f40c2d0>,
  2. <matplotlib.lines.Line2D at 0x10f40c510>]

1.3.4.1. 多项式 - 图1

更多内容见http://docs.scipy.org/doc/numpy/reference/routines.polynomials.poly1d.html。

1.3.4.1.1 更多多项式(有更多的基)

Numpy也有更复杂的多项式接口,支持比如切比雪夫基。

(3x^2 + 2x - 1):

In [216]:

  1. p = np.polynomial.Polynomial([-1, 2, 3]) # 系数的顺序不同!
  2. p(0)

Out[216]:

  1. -1.0

In [217]:

  1. p.roots()

Out[217]:

  1. array([-1\. , 0.33333333])

In [218]:

  1. p.degree() # 在普通的多项式中通常不暴露'order'

Out[218]:

  1. 2

在切尔雪夫基中使用多项式的例子,多项式的范围在[-1,1]:

In [221]:

  1. x = np.linspace(-1, 1, 2000)
  2. y = np.cos(x) + 0.3*np.random.rand(2000)
  3. p = np.polynomial.Chebyshev.fit(x, y, 90)
  4. t = np.linspace(-1, 1, 200)
  5. plt.plot(x, y, 'r.')
  6. plt.plot(t, p(t), 'k-', lw=3)

Out[221]:

  1. [<matplotlib.lines.Line2D at 0x10f442d10>]

1.3.4.1. 多项式 - 图2

切尔雪夫多项式在插入方面有很多优势。