上代码:
//预先定义插值节点的个数为1000个,根据控制台输入的个数num从而确定插值节点的个数
const int N=1000;
// 拉格朗日插值算法
float lglr(float x[], float y[],int n,float t)
{
float yResult=0.0;
//LValue[N]存放的是每次求解的插值基函数的通项
float LValue[N];
//循环变量k,m
int k,m;
//插值基函数中的上下累乘temp1,temp2
float temp1,temp2;
for(k=0;k<n;k++)
{
temp1=1.0;
temp2=1.0;
for(m=0;m<n;m++)
{
if(m==k)
{
continue;
}
temp1 *= (t-x[m]);
temp2 *= (x[k]-x[m]);
}
LValue[k]=temp1/temp2;
}
for(int i=0;i<n;i++)
{
yResult += y[i]*LValue[i];
}
return yResult;
}
|