拉格朗日多项式插值近似计算

拉格朗日多项式插值近似计算_第1张图片

//purpose:(x_i,y_i)的拉格朗日插值多项式     //

#include<stdio.h>
#define MAX_N 20                //定义(x_i,y_i)的最大维数
typedef struct tagPOINT         //点的结构
{
double x;
double y;
}POINT;
int main()
{
int n;
int i,j;
POINT points[MAX_N+1];
double x,tmp,lagrange=0;
printf("\ninput n value:");     //输入被插值点得数目
scanf("%d",&n);
if(n>MAX_N)
{
printf("the input n is larger than MAX_N,please redefine the MAX_N.\n");
return 1;
}
if(n<=0)
{
printf("please input a number between 1 and %d.\n",MAX_N);
return 1;
}
printf("now input the (x_i,y_i),i=0,...,%d:\n",n);//输入被插值点(x_i,y_i)
for(i=0;i<n;i++)
scanf("%lf%lf",&points[i].x,&points[i].y);
printf("now input the x value:");                //输入计算拉格朗日插值多项式的x值
scanf("%lf",&x);
for(i=0;i<=n;i++)
{
for(j=0,tmp=1;j<=n;j++)
{
if(j==i)continue;
tmp=tmp*(x-points[j].x)/(points[i].x-points[j].x);//tmp是拉格朗日基函数
}
lagrange=lagrange+tmp*points[i].y;
}
printf("lagrange(%f)=%f\n",x,lagrange);
return 0;
}

你可能感兴趣的:(拉格朗日多项式插值近似计算)