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

本文通过C++实例介绍了线性插值和spline插值方法的应用,包括如何使用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/




您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值