插值结果与拉格郎日插值接近,参与计算原始点不要超过6个
double NewtonInsertValueFunc(int OriPoints,double* XValue,double* YValue,double X)
{
/*****************************************************************
牛顿插值
******************************************************************/
int i,j;
double y,t;
double* Difference = malloc(sizeof(double)*(OriPoints + 1));
for(i = 0;i < OriPoints;i++)
{
Difference[i] = YValue[i];
}
for(i = 0;i < OriPoints;i++)
{
for(j = OriPoints - 1;j > i;j--)
{
Difference[j] = (Difference[j] - Difference[j - 1]) / (XValue[j] - XValue[j - i - 1]);
}
}
y = 0;
for(i = 0;i < OriPoints;i++)
{
t = 1;
for(j = 0;j < i;j++)
{
t = t * (X - XValue[j]);
}
y = y + t * Difference[i];
}
free(Difference);
return y;
}