#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; }
(分别用精确边界条件和自然边界条件实现的)
#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/