Or login with:
An important detail when using this class is that the abscissas array (the x-axis) given as argument to the constructor needs to be sorted in ascending order. For an optimal fit, the elements should also be equally spaced, though this is by no mean essential.
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 spline fitting curve, 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. You may notice the root mean squared error in each of the cases.

#include <codecogs/maths/interpolation/cubic.h> #include <math.h> #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 Cubic spline interpolation routine with known data points Maths::Interpolation::Cubic A(N, x, y); // Interrogate spline curve 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) << endl; } return 0; }Output:
x = 3.1415 y = -5.89868e-005 x = 3.63753 y = 0.233061 x = 4.13355 y = 0.216427 x = 4.62958 y = 0.0486148 x = 5.12561 y = -0.133157 x = 5.62163 y = -0.172031 x = 6.11766 y = -0.0456079 x = 6.61368 y = 0.0906686 x = 7.10971 y = 0.116462 x = 7.60574 y = 0.0557287 x = 8.10176 y = -0.03875 x = 8.59779 y = -0.10346 x = 9.09382 y = -0.0734111 x = 9.58984 y = 0.0298435 x = 10.0859 y = 0.094886 x = 10.5819 y = 0.0588743 x = 11.0779 y = -0.0171021 x = 11.5739 y = -0.0630512 x = 12.07 y = -0.0601684 x = 12.566 y = -0.00994154
Source code is available when you buy a Commercial licence.
Not a member, then Register with CodeCogs. Already a Member, then Login.
| Cubic( | int | n | |
| double* | x | ||
| double* | y | )[constructor] |
| n | The number of initial points |
| x | The x-coordinates for the initial points |
| y | The y-coordinates for the initial points |
| doublegetValue( | double | x | ) |
| x | The abscissa of the interpolation point |
| doubleCubic_once( | int | N | |
| double* | x | ||
| double* | y | ||
| double | a | ) |
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

| N | The number of initial points |
| x | The x-coordinates for the initial points |
| y | The y-coordinates for the initial points |
| a | The x-coordinate for the output point |
Source code is available when you buy a Commercial licence.
Not a member, then Register with CodeCogs. Already a Member, then Login.
You must login to leave a messge