| Contents |
#include <codecogs/maths/interpolation/cubic.h>
using namespace Maths::Interpolation;
| class Cubic Interpolates a given set of points using cubic spline fitting.
| |||||||||||||||||
| double | Cubic_once (int N, double *x, double *y, double a) A static function implementing the Cubic Class for one off calculations | ||||||||||||||||
| Real | cc_interpolationCubic_once (Integer N, Range x, Range y, Real a) This function is available as a Microsoft Excel add-in. |
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
| 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 |