分类：电脑/网络-程序设计-C/C++
问题：大家来帮我看看哪里出错了（牛顿插值法c语言）附件里就是我编写的源 
附件里就是我编写的源。目的是用牛顿插值法做预测。我给出一定量的数据，用牛顿插值法求出一个多项式，我再代入我想预测的插值点，求得预测量即函数值。现在问题是：初始数据量给的小时，预测没错，但目测可知结果不太准确，给的初始数据量较大时，预测结果直接出错。高手们帮帮忙阿，十万火急，我在线等待高手解答。或者高手有别的预测方法源代码适用于大量数据统计预测的告诉我也行，积分双手奉上
回答：看看我作的程序吧拉格朗日差值法在tc3.0下调试通过的，你可以借用#include <math.h>#include <stdio.h>#include <stdlib.h>#include<malloc.h>//重新排列void cxpl(int n,int m,float t,float *x,float *y ){int i,j; float a;  for(i=0;i<m;i++)    for(j=i+1;j<n;j++)    {  if(fabs(*(x+j)-t)<fabs(*(x+i)-t))          {a=*(x+i);         *(x+i)=*(x+j);         *(x+j)=a;                a=*(y+i);*(y+i)=*(y+j);*(y+j)=a;        }    }}float lag(int n,float *x,float *y,float t){int i,j; float p,s,la; p=1;la=0; for(i=0;i<n;i++) {for(j=0;j<n;j++)    {if(j!=i)     p=p*(t-*(x+j))/(*(x+i)-*(x+j));    }  s=*(y+i)*p;  p=1;  la=la+s; } return(la);}void main(){  int m,n,k,i;   float *x,*y,la,t;   printf("请输入给定点的数量n");   scanf("%d",&n);      x=(float*)calloc(n,sizeof(float));     if(x==NULL)   {printf("分配失败");    exit(1);   }    y=(float*)calloc(n,sizeof(float));     if(y==NULL)   {printf("内存分配失败");    exit(1);   }   //printf("请输入x的值");     //for(i=0;i<n;i++)  //   scanf("%f",x+i);   //printf("请输入y的值,注意与x的值一一对应");  // for(i=0;i<n;i++)   //    scanf("%f",y+i);   x[0]=300;x[1]=400;x[2]=500;x[3]=600;x[4]=700;x[5]=800;   y[0]=14.7; y[1]=3.85; y[2]=1.21; y[3]=0.49; y[4]=0.23;y[5]=0.11;    for(i=0;i<n;i++)    {  printf("x[%d]=%f     ",i,*(x+i));        printf("y[%d]=%f\n",i,*(y+i));    }        for(i=0;;i++)   {printf("请输入t的值(退出则输入0)");    scanf("%f",&t);     if(t==0)     {printf("确认退出请输入0，计算f(0)请按输入任意数字值");       scanf("%d",&m);        if(m==0)break;     }      printf("请输入需要使用的点的个数");    scanf("%d",&k);    cxpl(n,k,t,x,y);    la=lag(k,x,y,t);    printf("插值结果是:\n");    printf("      f(%3.2f)=%3.4f\n",t,la);   }   free(x);   free(y);}