一个关于非线性插值的有关问题

一个关于非线性插值的问题
我需要在两个值之间进行抛物线插值,插值的程序如下,但是我不知道该怎么去使用,我很难读懂那个程序,所以现在我想问一下大家,不需要读懂那个程序,我该怎么去用那个程序呢?举个例子,比如有一个点的值是3000.0,有一个点的值是3515.0,现在我需要在这两点之间运用抛物线插值,请问我该如何使用下面的算法程序呢?(程序后面附有如何使用的例子,不过我还是看不懂,请大家能够详细讲一下,谢谢了)

int   mulxyz(len,rh,aa)  
    {
    int   len,rh;
            float   aa[];
      int     i,j,k,m;
      float     nf,xr,mf,x,yy[4],y[RL];         /*   RL:纪录道长度     */
      void   xyz();

      nf=(float)rh/(float)len;
      xr=1./nf;
      for(k=1;   k <=len;   k++)
            y[k]=aa[k-1];
      m=0;
      aa[m]=y[1];
      nf=1;
      y[0]=y[1];
      y[len+1]=y[len];
      y[len+2]=y[len];
      for(k=0;   k <rh;   k++)
            {
                nf=nf+xr;
                mf=nf-(int)nf;
                j=(int)nf;
                if(j> =len)   break;
                yy[0]=y[j-1];
                yy[1]=y[j];
                yy[2]=y[j+1];
                yy[3]=y[j+2];
                x=1.0+mf;
                m++;
                xyz(yy,x,&aa[m],2);
            }
      aa[++m]=y[len];
      return(m+1);
    }

  void   xyz(yy,x,y,kf)
  float   yy[4];
  float   x,*y;
  int   kf;
  {
      float   a,b,xx;

      b=yy[1]-yy[0];
      a=2.0*yy[1]-yy[2]-yy[0];
        if(kf==1)   {
                  if(a!=0)   x=0.5+b/a;
                  else       x=1.0;     }
      *y=yy[0]+b*x-0.5*a*x*(x-1.0);
      if(kf> =2)
        {
          b=yy[2]-yy[1];
          a=2.0*yy[2]-yy[3]-yy[1];
          xx=x-1.0;
          xx=yy[1]+b*xx-0.5*a*xx*(xx-1.0);
          *y=(*y+xx)*0.5;
        }
  }
例子:
if(len!=rh)   j=mulxyz(len,rh,aa);
  if(j!=rh)   mulxyz(j,rh,aa);

------解决方案--------------------
也看的一头雾水,等高手来讲解了!呵呵,先顶一下了!
------解决方案--------------------
aa是一个float数组
len是取起始点在数组中的位置,int型
rh是终结点在数组中的位置,int型
------解决方案--------------------
数字计算方法是不是有?