哪位大虾能把三次样条插值算法给我说明一下呢~~
 小弟不懂`~最好有书~ 发到或者是 
      0QQ33890236 联系`
 谢谢谢谢

解决方案 »

  1.   

    看http://expert.csdn.net/Expert/topic/1684/1684858.xml?temp=.2828943
      

  2.   

    visual c++常用数值算法集,何光渝编著,科学出版社
      

  3.   

    还是给你打上去吧,不多。
    void spline(double x[],double y[],int n,double yp1,double ypn,double y2[])
    {
      double u[100],aaa,sig,p,bbb,ccc,qn,un;
      int i,k;
      if(yp1>9.9e + 29)
      {
       y2[1] = 0;
       u[1] = 0;
       }
      else
      { 
       y2[1] = - 0.5;
       aaa = (y[2] - y[1])/(x[2] - x[1]);
       u[1] = (3.0/(x[2] - x[1]))*(aaa- yp1);
      }
      for(i = 2;i<=n-1;i++)
      {
       sig = (x[i] - x[i-1])/(x[i+1] - x[i-1]);
       p = sig*y2[i-1] + 2.0;
       y2[i] = (sig-1.0)/p;
       aaa = (y[i+1] - y[i])/(x[i+1]-x[i-1]);
       bbb = (y[i] - y[i-1])/(x[i]-x[i-1]);
       ccc = x[i+1] - x[i-1];
       u[i] = (6.0*(aaa-bbb)/ccc-sig*u[i-1])/p;
      }
      if(ypn>9.9e = 29)
      {
       qn = 0.0;
       un = 0.0;
      }
      else
      {
       qn = 0.5;
       aaa = ypn - (y[n] - y[n-1])/x[n]-x[n-1]);
       un = (3.0/(x[n] - x[n-1]))*aaa;
       }
      y2[n] =(un-qn*u[n-1])/(qn*y2[n-1] + 1.0);
     for(k = n-1;k>=1;k--)
     y2[k] = y2[k]*y2[k+1] + u[k];
     }
     void splint(double xa[],double ya[];double y2a[],int n,double& x,double& y)
    {
     int klo,khi,k;
     double h,a,b,aaa,bbb;
     klo = 1;
     khi = n;
     loop:if(khi-klo>1)
          {
             k = (khi+klo)/2;
             if(xa[k]>x)
               khi = k;
             else
             {
                klo = k;
              }
      goto loop;
       }
     h = xa[khi] - xa[klo];
     if(h==0)
     {
      cout<<"pause 'bad xa input'"<<endl;
      return;
     }
     a = (xa[khi] - x)/h;
     b = (x-xa[klo])/h;
     aaa = a*ya[klo] + b*ya[khi];
     bbb = (a*a*a - a)*y2a[klo] + (b*b*b - b)*y2a[khi];
     y = aaa + bbb*h*h/6.0;
    }
      

  4.   

    astroboy()给的例子不错
    可以看看
    lblyy76(yibo) 程序没有变量和函数的说明
    看起来有点费劲
    我现在也在作三次样条插值,但是我要求的是非均匀的。