一元三点插值算法源代码

分类:代码, 博客 标签:

除了上次提到的线性插值算法,一元三点插值算法是一种精度更高的插值算法,使用这种方法插值出来的曲线不像线性插值算法那样在分段点的地方出现折点,显得更为平滑,具体代码如下:

double interp3(double *x, double *y, int n, double t)
{
  double v=0;
  int p=0;

  for(int i=1;i < n-2;i++)
  {
    if(t <= x[i]) break;
    p++;
  }

  if(p>0 && p<n-2 && (t-x[p]<x[p+1]-t))
    p--;

  v = (t-x[p+1])/(x[p]-x[p+1])*(t-x[p+2])/(x[p]-x[p+2])*y[p];
  v += (t-x[p])/(x[p+1]-x[p])*(t-x[p+2])/(x[p+1]-x[p+2])*y[p+1];
  v += (t-x[p])/(x[p+2]-x[p])*(t-x[p+1])/(x[p+2]-x[p+1])*y[p+2];

  return v;
}

但是这种方法也存在一些不足,因此提出了一元三点插值算法的修正方法



分类:代码, 博客 标签:

发表评论

You must be logged in to post a comment.