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

插值问题

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;
}

–本文仅供本人学习笔记之用,如有错误,望请指正。谢谢。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值