<工程数学>Alglib库,测试插值运算

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/




你可能感兴趣的:(算法,数学,插值,spline)