lagrange#
- scipy.interpolate.lagrange(x, w)[source]#
- Return a Lagrange interpolating polynomial. - Given two 1-D arrays x and w, returns the Lagrange interpolating polynomial through the points - (x, w).- Warning: This implementation is numerically unstable. Do not expect to be able to use more than about 20 points even if they are chosen optimally. - Parameters:
- xarray_like
- x represents the x-coordinates of a set of datapoints. 
- warray_like
- w represents the y-coordinates of a set of datapoints, i.e., f(x). 
 
- Returns:
- lagrangenumpy.poly1dinstance
- The Lagrange interpolating polynomial. 
 
- lagrange
 - Notes - The name of this function refers to the fact that the returned object represents a Lagrange polynomial, the unique polynomial of lowest degree that interpolates a given set of data [1]. It computes the polynomial using Newton’s divided differences formula [2]; that is, it works with Newton basis polynomials rather than Lagrange basis polynomials. For numerical calculations, the barycentric form of Lagrange interpolation ( - scipy.interpolate.BarycentricInterpolator) is typically more appropriate.- References [1]- Lagrange polynomial. Wikipedia. https://en.wikipedia.org/wiki/Lagrange_polynomial [2]- Newton polynomial. Wikipedia. https://en.wikipedia.org/wiki/Newton_polynomial - Examples - Interpolate \(f(x) = x^3\) by 3 points. - >>> import numpy as np >>> from scipy.interpolate import lagrange >>> x = np.array([0, 1, 2]) >>> y = x**3 >>> poly = lagrange(x, y) - Since there are only 3 points, the Lagrange polynomial has degree 2. Explicitly, it is given by \[\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() 