?? 拉格朗日插值法.cpp
字號:
#include<stdio.h>
void main()
{int N,i,j;
float x[10],y[10],l[10],x0,y0=0,fz,fm;
printf("input N:");
scanf("%d",&N);
printf("input x[i] i=0.....N-1:\n");
for(i=0;i<N;i++)
scanf("%f",&x[i]);
printf("input y[i] i=0.....N-1:\n");
for(i=0;i<N;i++)
scanf("%f",&y[i]);
printf("input x0:");
scanf("%f",&x0);
for(i=0;i<N;i++)
printf("x[%d]=%f ",i,x[i]);
printf("\n");
for(i=0;i<N;i++)
printf("y[%d]=%f ",i,y[i]);
printf("\nx0=%f\n",x0);
for(i=0;i<N;i++)
{fz=1;fm=1;
for(j=0;j<N;j++)
if(j!=i)
{fz*=x0-x[j];
fm*=x[i]-x[j];
printf("l[%d].%d=%f/%f ",i,j,fz,fm);
}
/* why not?
for(j=0;j<N&&j!=i;j++)
{fz*=(x0-x[j]);
fm*=(x[i]-x[j]);
printf("l[%d].%d=%f/%f ",i,j,fz,fm);
}
*/
/* or right
for(j=0;j<i;j++)
{fz*=(x0-x[j]);
fm*=(x[i]-x[j]);
printf("l[%d].%d=%f/%f ",i,j,fz,fm);
}
for(j=i+1;j<N;j++)
{fz*=(x0-x[j]);
fm*=(x[i]-x[j]);
printf("l[%d].%d=%f/%f ",i,j,fz,fm);
}
*/
l[i]=fz/fm;printf("\nl[%d]:%f\n",i,l[i]);
}
for(i=0;i<N;i++)
y0=y0+l[i]*y[i];
printf("\n%f",y0);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -