viewed 10287 times and licensed 14 times
Interpolates a given set of points using the Lagrange polynomial.
View version details
Contents  |
|
Interface
#include <codecogs/maths/interpolation/lagrange.h>
using namespace Maths::Interpolation;
| | class Lagrange Interpolates a given set of points using the Lagrange polynomial. | [constructor] | Lagrange (int n, double *x, double *y) Class constructor | | [destructor] | ~Lagrange () Class destructor | | double | getValue (double x, int l) Returns an interpolated value. | | int | m_n | | double* | m_x |
|
| double | Lagrange_once (int N, double *x, double *y, double a, int l) A static function implementing the Lagrange Class for one off calculations |
 | Real | cc_Lagrange_once (Integer N, Range x, Range y, Real a, Integer l) This function is available as a Microsoft Excel add-in. |
Class Documentation
The Lagrange interpolating polynomial is the polynomial of degree n - 1 that passes
through the n points
It is given by
where
The formula was first published by Waring (1779), rediscovered by Euler in 1783, and published by Lagrange in 1795
(Jeffreys and Jeffreys 1988). An important detail when using this class is that the abscissas array given as argument
to the constructor needs to be sorted in ascending order.
Below you will find the interpolation graphs for a set of points obtained by evaluating the function

,
displayed in light blue, at particular abscissas. The Lagrange polynomial, displayed in red, has been calculated using
this class. In the first graph there had been chosen a number of 12 points, while in the second 36 points were
considered. The level of interpolation in both graphs is 3. The root mean squared error is also displayd in each of
the cases.
References:
- MathWorld, http://mathworld.wolfram.com/LagrangeInterpolatingPolynomial.html
- Jean-Pierre Moreau's Home Page, http://perso.wanadoo.fr/jean-pierre.moreau/
- F.R. Ruckdeschel, "BASIC Scientific Subroutines, Vol. II, BYTE/McGRAWW-HILL, 1981
Example 1:
- The following example displays 20 interpolated values (you may change this amount through
the N_out variable) for the given function
with abscissas equally spaced in the
interval. The X and Y coordinate arrays are initialized by evaluating
this function for N = 12 points equally spaced in the domain from
to
.
#include <codecogs/maths/interpolation/lagrange.h>
#include <cmath>
#include <iostream>
#include <iomanip>
using namespace std;
#define PI 3.1415
#define N 12
int main()
{
// Declare and initialize two arrays to hold the coordinates of the initial data points
double x[N], y[N];
// Generate the points
double xx = PI, step = 4 * PI / (N - 1);
for (int i = 0; i < N; ++i, xx += step) {
x[i] = xx;
y[i] = sin(2 * xx) / xx;
}
// Initialize the Lagrange interpolation routine with known data points
Maths::Interpolation::Lagrange A(N, x, y);
// Interrogate Lagrange polynomial to find interpolated values
int N_out = 20;
xx = PI, step = (3 * PI) / (N_out - 1);
for (int i = 0; i < N_out; ++i, xx += step) {
cout << "x = " << setw(7) << xx << " y = ";
cout << setw(13) << A.getValue(xx, 3) << endl;
}
return 0;
}
Output:
x = 3.1415 y = -5.89868e-005
x = 3.63753 y = 0.216649
x = 4.13355 y = 0.208793
x = 4.62958 y = -0.0536974
x = 5.12561 y = -0.186543
x = 5.62163 y = -0.10577
x = 6.11766 y = 0.0268879
x = 6.61368 y = 0.0875189
x = 7.10971 y = 0.0993752
x = 7.60574 y = 0.0512131
x = 8.10176 y = -0.0885626
x = 8.59779 y = -0.123293
x = 9.09382 y = -0.0160297
x = 9.58984 y = 0.0787203
x = 10.0859 y = 0.0791771
x = 10.5819 y = 0.0216086
x = 11.0779 y = -0.0212055
x = 11.5739 y = -0.0727429
x = 12.07 y = -0.0621462
x = 12.566 y = 0.0312161
See Also
Also consider the regression methods:
Regression/Discrete,
Regression/Forsythe,
Regression/Orthogonal,
Regression/StiefelAuthors:
- Lucian Bentea (August 2005)
Members of Lagrange
- Initializes the necessary data for following evaluations of the polynomial.
Parameters:
| n | The number of initial points |
| x | The x-coordinates for the initial points |
| y | The y-coordinates for the initial points |
Returns the approximated ordinate at the given abscissa.Note:
- The value of the x parameter needs to be in the X[0]...X[N - L + 1]
interval (including endpoints), where l > 1 is the level of interpolation.
For example a level 3 interpolation would have the maximum working interval
between X[0] and X[N - 2].
Parameters:
| x | The abscissa of the interpolation point |
| l | The level of interpolation (2 means quadratic) |
Function Documentation
This function implements the Lagrange class for one off calculations, thereby avoid the need to instantiate the Lagrange class yourself.
Example 2:
- The following graph is constructed from interpolating the following values:
x = 1 y = 0.22
x = 2 y = 0.04
x = 3 y = -0.13
x = 4 y = -0.17
x = 5 y = -0.04
x = 6 y = 0.09
x = 7 y = 0.11
Parameters:
| N | The number of initial points |
| x | The x-coordinates for the initial points (evenly spaced!) |
| y | The y-coordinates for the initial points |
| a | The x-coordinate for the output point |
| l | The level of interpolation (2 means quadratic) |
Returns:
- the interpolated y-coordinate that corresponds to a.
Page Comments
You must login to leave a messge
Last Modified: 13 Feb 08 @ 23:24 Page Rendered: 2010-03-14 10:58:30