一、 拉格朗日插值 #include #include #include void Lagrange(float s) { double x[5]={0.2,0.4,0.6,0.8,1.0},y[5]={0.98,0.92,0.81,0.64,0.38},f,L=0; int i,j; for (i=0;i<5;i++) { f=1; for (j=0;j<5;j++) if(j!=i) f=(s-x[j])/(x[i]-x[j])*f; L+=f*y[i]; } printf("输出:%f\n",L); } void main() { float x; printf("输入插值点:"); scanf("%f",&x); Lagrange(x); } 二、 牛顿插值 #include #include #include int ND(float s) { double x[5]={0.2,0.4,0.6,0.8,1.0},y[5]={0.98,0.92,0.81,0.64,0.38},p=0,g,f; int i,j,k; for (i=0;i<5;i++) { for (j=4;j>i;j--) { f=x[j]-x[j-i-1];y[j]=(y[j]-y[j-1])/f;} g=y[i+1]; for (k=0;k<=i;k++) g=g*(s-x[k]); p=p+g; } printf("输出插值点函数值:%f\n",p+y[0]); return 1; } void main() { float x; printf("输入插值点:"); scanf("%f",&x); ND(x); } 三、 埃尔米特插值 #include #include #include void Hermite(float s) { double x[3]={0.25,1,2.25},y[3]={0.125,1,3.375},z[3]={0.75,1.5,2.25}; double H=0.0,a,b,f,g; int i,j; for (i=0;i<3;i++) { f=1.0;g=0.0; for (j=0;j<3&&j!=i;j++) {f=f*(s-x[j])/(x[i]-x[j]);g=g+1/(x[i]-x[j]);} a=(1-2*(s-x[i])*g)*f*f;b=(s-x[i])*f*f; H=H+y[i]*a+z[i]*b; } printf("%f\n",H); } void main() { float x; printf("输入插值点:"); scanf("%f",&x); Hermite(x); } 四、 三次样条插值 #include #include #include void main() { int N=7,R=2,i,k; double p1,p2,p3,p4; double x[8]={0.5,0.7,0.9,1.1,1.3,1.5,1.7,1.9}; double y[8]={0.4794,0.6442,0.7833,0.8912,0.9636,0.9975,0.9917,0.9463}; double P0=-0.4794,Pn=-0.9463,u[3]={0.6,0.8,1.2},s[3]; double h[7],a[8],c[7], g[8],af[8],ba[7],m[8]; for(k=0;k