<工程数学>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/




  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值