scipy.interpolate.

lagrange#

scipy.interpolate.lagrange(x, w)[source]#

返回拉格朗日插值多項式。

給定兩個一維陣列 xw,返回通過點 (x, w) 的拉格朗日插值多項式。

警告:此實作在數值上不穩定。即使點是最佳選擇,也不要期望能夠使用超過約 20 個點。

參數:
x類陣列

x 代表一組資料點的 x 座標。

w類陣列

w 代表一組資料點的 y 座標,即 f(x)。

返回:
lagrangenumpy.poly1d 實例

拉格朗日插值多項式。

範例

通過 3 個點插值 \(f(x) = x^3\)

>>> import numpy as np
>>> from scipy.interpolate import lagrange
>>> x = np.array([0, 1, 2])
>>> y = x**3
>>> poly = lagrange(x, y)

由於只有 3 個點,拉格朗日多項式的次數為 2。明確地說,它由下式給出

\[\begin{split}\begin{aligned} L(x) &= 1\times \frac{x (x - 2)}{-1} + 8\times \frac{x (x-1)}{2} \\ &= x (-2 + 3x) \end{aligned}\end{split}\]
>>> from numpy.polynomial.polynomial import Polynomial
>>> Polynomial(poly.coef[::-1]).coef
array([ 0., -2.,  3.])
>>> import matplotlib.pyplot as plt
>>> x_new = np.arange(0, 2.1, 0.1)
>>> plt.scatter(x, y, label='data')
>>> plt.plot(x_new, Polynomial(poly.coef[::-1])(x_new), label='Polynomial')
>>> plt.plot(x_new, 3*x_new**2 - 2*x_new + 0*x_new,
...          label=r"$3 x^2 - 2 x$", linestyle='-.')
>>> plt.legend()
>>> plt.show()
../../_images/scipy-interpolate-lagrange-1.png