#include "stdio.h"
#include "malloc.h"
#include "fstream"
#include<conio.h>
void main()
{
FILE *fp1;int i,j,k,n;
double X[20]={0,1,2,4},Y[20]={1,9,23,3};
double OneResult=0,sum=0;
double newx=6;
double temp_a=1,temp_b=0,temp_c=0,temp_d=1,x,y;
if((fp1=fopen("result.txt","wt"))==NULL)
{
printf("can't open file\n");
getch();
exit(1);
}
//input module
printf("您要输入几组数据?请输入组数:");
scanf("%d",&n);
if(n>20)
{
printf("为了保证精度,请输入20组以内的数据。");
scanf("%d",&n);
}
for(i=0;i<n;i++)
{
printf("输入第%d组数据:\n",i+1);
printf("X[%d]=",i);
scanf("%lf",&X[i]);
printf("Y[%d]=",i);
scanf("%lf",&Y[i]);
}
printf("要插入的x值:");
scanf("%lf",&newx);
//computing module
printf("\n开始计算...\n");
for(i=0;i<n;i++) //显示输入的数据
{
printf("X[%d]=%lf Y[%d]=%lf\n",i,X[i],i,Y[i]);
fprintf(fp1,"X[%d]=%lf Y[%d]=%lf\n",i,X[i],i,Y[i]);
}
for(k=0;k<n;k++)
{
for(i=0;i<=k;i++) //求差商 函数值的线性组合
{
temp_a=1;
x=X[i];
y=Y[i];
for(j=0;j<=k;j++)
{
if(i!=j)
{
temp_a *=(X[i]-X[j]);
}
}
temp_b=y/temp_a;
temp_c +=temp_b;
if(i>0)
{
temp_d*=(newx-X[i-1]); /*temp_d表示累和 x-x[i]*/
}
}
//printf("temp_d[%d]:%lf ",k,temp_d);
printf(" 求得%d阶差商:%lf\n",k,temp_c); /*求得k阶差商*/
fprintf(fp1," 求得%d阶差商:%lf\n",k,temp_c);
OneResult=temp_c*temp_d; /*OneResult为插值多项式的第k个分量*/
printf("插值多项式第%d个分量:%lf\n",k,OneResult);
fprintf(fp1,"插值多项式第%d个分量:%lf\n",k,OneResult);
sum+=OneResult; /*sum为最终结果*/
temp_b=0;
temp_c=0;
temp_d=1;
}
printf("公式计算结果:%lf\n",sum);
fprintf(fp1,"公式计算结果:%lf\n",sum);
}
程序运行结果:
KEY Point :