一、Newton插值法
#include<stdio.h>
#define MAX_N 20
typedef struct tagPOINT
{double x;
double y;
}POINT;
int main()
{int n,i,j;
POINT points[MAX_N+1];double diff[MAX_N+1];
double x,tmp,newton=0;
printf("/nInput n value:");
scanf("%d",&n);
printf("Now input the (x_i,y_i),....,%d:/n",n);
for(i=0;i<=n;i++)
scanf("%lf%lf",&points[i].x,&points[i].y);
printf("Now input the x value:");
scanf("%lf",&x);
for(i=0;i<=n;i++) diff[i]=points[i].y;
for(i=0;i<=n;i++)
{for(j=n;j>i;j--)
{diff[j]=(diff[j]-diff[j-1])/(points[j].x-points[j-1-i].x);
}
}
tmp=1;newton=diff[0];
for(i=0;i<n;i++)
{tmp=tmp*(x-points[i].x);
newton=newton+tmp*diff[i+1];
}
printf("newton(%f)=%f/n",x,newton);
return 0;
}
二、Lagrange插值法
double Lagrange(int n,double u,double x[],double y[])
{int i,j;
double l,Ln=0;
for(i=0;i<=n;i++)
{l=1.0;
for(j=0;j<=n;j++)
if (i!=j)l=l*(u-x[j])/(x(i)-x[j]);
Ln=Ln+l*y[i];
}
return(Ln);
}
#include<stido.h>
#define N 20
Void main(void)
{int i,n;
double x[N],y[N],u.fu;
double Lagrange(int n,double u,double x[],double y[]);
printf(“请输入插值多项式的次数N及插入点U:/n”);
scanf(“%d,%lf”,&n,&u);
printf(“请输入n+1个插值节点x,y:/n”);
for(i=0;i<=n;i++)
scanf(“%lf,%lf”,&x[i],&y[i]);
fu=Lagrange(n,u,x,y);
printf(“插入点u的近似值为%lf/n”,fu);
}
三、用梯形公式
#include<stdio.h>
#include<math.h>
double f(double x)
{return(sqrt(pow(x,4)+1));
}
double T(double a,double b)
{double u,h;
h=(b-a)/2;
u=f(a)+f(b);
return (h*u);
}
void main()
{ double a,b;
printf("请输入积分区域:a,b/n");
scanf("%lf,%lf",&a,&b);
double T(double ,double );
printf("%lf,%lf",