1,线性插值
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "interpolation.h"
using namespace alglib;
int main(int argc, char **argv)
{
//
// We use piecewise linear spline to interpolate f(x)=x^2 sampled
// at 5 equidistant nodes on [1.0,5.0].
//
real_1d_array xx;
real_1d_array yy;
double _x[] = {1.0, 2.0, 3.0, 4.0, 5.0};
double _y[] = {1, 4.0, 9.0, 16.0, 25.0};
int nPoints=5;
xx.setcontent(5,_x);
yy.setcontent(5,_y);
double t = 2.5;
double v;
spline1dinterpolant s;
// build spline
spline1dbuildlinear(xx, yy, s);
// calculate S(2.5) - it is quite different from 2.5^2=6.25
v = spline1dcalc(s, t);
printf("%.4f\n", double(v)); // EXPECTED: 6.5
system("pause");
return 0;
}
2,spline插值
(分别用精确边界条件和自然边界条件实现的)
#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include "interpolation.h"
using namespace alglib;
int main(int argc, char **argv)
{
//
// We use cubic spline to interpolate f(x)=x^2 sampled
// at 5 equidistant nodes on [1.0,5.0].
//
// First, we use default boundary conditions ("parabolically terminated
// spline") because cubic spline built with such boundary conditions
// will exactly reproduce any quadratic f(x).
//
// Then we try to use natural boundary conditions
// d2S(-1)/dx^2 = 0.0
// d2S(+1)/dx^2 = 0.0
// and see that such spline interpolated f(x) with small error.
//
real_1d_array xx;
real_1d_array yy;
double _x[] = {1.0, 2.0, 3.0, 4.0, 5.0};
double _y[] = {1, 4.0, 9.0, 16.0, 25.0};
int nPoints=5;
xx.setcontent(5,_x);
yy.setcontent(5,_y);
double t = 2.5;
double v;
spline1dinterpolant s;
ae_int_t natural_bound_type = 2;
//
// Test exact boundary conditions: build S(x), calculare S(2.5)
// (almost same as original function)
//
spline1dbuildcubic(xx, yy, s);
v = spline1dcalc(s, t);
printf("%.4f\n", double(v)); // EXPECTED: 6.25
//
// Test natural boundary conditions: build S(x), calculare S(2.5)
// (small interpolation error)
//
spline1dbuildcubic(xx, yy, 5, natural_bound_type, 0.0, natural_bound_type, 0.0, s);
v = spline1dcalc(s, t);
printf("%.3f\n", double(v)); // EXPECTED: 6.232
system("pause");
return 0;
}
参考资源:
http://www.alglib.net/interpolation/