您的位置:首页 > 其它

基础算法学习(03)-插值计算(拉格朗日插值法和牛顿插值法)

2017-10-12 21:30 316 查看

插值问题

1、算法作用

插值问题是一种软件开发中较为常见的问题,比如已知三个电流输出时采集到的三个采样电流,用软件的方法尽量精确地求出第四个输出时的采样电流。本质上,就是多项式的求解。多项式求解有很多数学上的方法,这里主要研究的是两种数学上的经典算法得出的计算机算法-拉格朗日插值法和牛顿插值法。最近工作中用到了,记下来作为笔记。

2、C++实现

2.1.拉格朗日插值法

关于数学原理,维基百科讲得很不错

https://zh.wikipedia.org/wiki/%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E6%8F%92%E5%80%BC%E6%B3%95

简单来说就是把一种拆分多项式的方法,很便于计算机实现。

C++代码实现如下

//N是已知的,X是已知所有点的横坐标数组,Y是纵坐标数组,x是待求点的横坐标,返回值为待求点的纵坐标
double Lagrange(int N,double &X,double &Y,double x)
{
double result=0;
for(int i=0;i<N;i++)
{
double temp=Y[i];
{
if(i!=j)
{
temp = temp*(x-X[j]);
temp = temp/(X[i]-X[j]);
}
}
result += temp;
}
return result;
}


2.2.牛顿插值算法

C++实现 4个值求第5个值

double Newton4(double F1, double F2, double F3, double F4, double x1, double x2,double x3, double x4, double t )
{
double f;
f = F1 * (t - x2) * (t - x3) * (t - x4) / ((x1 - x2) * (x1 - x3) * (x1 - x4));
f = f + F2 * (t - x1) * (t - x3) * (t - x4) / ((x2 - x1) * (x2 - x3) * (x2 - x4));
f = f + F3 * (t - x1) * (t - x2) * (t - x4) / ((x3 - x1) * (x3 - x2) * (x3 - x4));
f = f + F4 * (t - x1) * (t - x2) * (t - x3) / ((x4 - x1) * (x4 - x2) * (x4 - x3));

return f;
}


–本文仅供本人学习笔记之用,如有错误,望请指正。谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: