已知部分由x对应y的值如下:
x        y
 0 823
29 825
223 830
514 835
692 838
1270 845
1910 850
2470 855
2820 860
2950 862
3140 865
3430 870
3720 875
3860 877
4000 880
4270 885如何生成一个函数或用其他办法,使得输入x(0到4270之间)返回y的值(823到885之间)?

解决方案 »

  1.   

    我用DBChar画出了函数曲线,不知能否可以得到由曲线上的任意一点的坐标?
    望高手不吝赐教!
      

  2.   

    可以利用插值法,x,y的值分别存于数组中,并且一一对应。
    x1<x<x2,则y=y2-(x2-x)*(y2-y1)/(x2-x1)
      

  3.   

    多谢darkliu(钢铁工人甲)的提醒,其实我在大学上数值分析课时已学到,只是几年不用就忘了!
      

  4.   


    /****************************************************** 
    * 用牛顿插值法依据N个已知数据点即使函数值 
    * 输入: n--已知数据点的个数N-1 
    *       x--已知数据点第一坐标的N维列向量 
    * y--已知数据点第二坐标的N维列向量 
    * xx-插值点第一坐标 
    * 输出: 函数返回值所求插值点的第二坐标 
    ******************************************************/ 
    double newton(int n,double x[N],double y[N],double xx) 

    double d[N],b; 
    int i,j; for(i=0;i<=n;i++) 
    d=y; 
    for(i=n-1;i>=0;i--) /*求差商*/ 
    for(j=i+1;j<=n;j++) 

    if(fabs(x-x[j])<EPS) 
    return 0; 
    d[j]=(d[j-1]-d[j])/(x-x[j]); 

    b=d[n]; 
    for(i=n-1;i>=0;i--) 
    b=d+(xx-x)*b; 
    return b; 
    }