# include "math.h"
# define dx 1.0E-3 /* 定义常量*/
# define MAX 20
float c[MAX],t[MAX],x[MAX],y[MAX],v[MAX];
int N; /*定义全局变量和数组*/
float a,b,r;
float inval(T) /* 拉格朗日插值子程序*/
float T;
{float f,p;
int i,j;
f=0.0;
for(i=1;i<=N;i++)
{p=1.0;
for(j=1;j<=N;j++)
if(i!=j) p=p*(t-x[j])/(x[i]-x[j]);
f=f+p*y[i];}
return(f);
}
void regression()/* 线性回归子程序*/
{int i;
float sx=0,sy=0,sxx=0,syy=0,sxy=0;/* 定义局部变量*/
for(i=1;i<=N;i++)
{sx=sx+x[i];
sy=sy+y[i];
sxx=sxx+x[i]*x[i];
syy=syy+y[i]*y[i];
sxy=sxy+x[i]*y[i];
}
sx=sx/N;
sy=sy/N;
sxx=sxx-N*sx*sx;
syy=syy-N*sy*sy;
sxy=sxy-N*sx*sy;
b=sxy/sxx;
a=sy-b*sx;
r=sxy/sqrt(sxx*syy);}
main() /* 主程序(主函数) */
{int i;
float T,y1,y2;
printf("\n 输入数据点的个数N(N>2):");
scanf("%d",&N);
for(i=1;i<=N;i++)
{printf("\N 输入第%d 点的时间和浓度(t,C):",i);
scanf("%f %f",&t[i],&c[i]);
x[i]=t[i];y[i]=c[i];
}
for(i=1;i<=N;i++)
{T=x[i]-dx;y1=inval(T); /* 调用插值子程序求y 值*/
T=x[i]+dx;y2=inval(T);
v[i]=(y1-y2)/(2*dx); /* 求各浓度对应的速率*/
} /* 下面输出中间结果*/
printf("\n%s%-10s%-10s%-10s%-10s%-10s"," ","t","c","v","lnv","lnc");
for(i=1;i<=N;i++)
printf("\n%10.6f%10.6f%10.6f%10.6f%10.6f",x[i],y[i],v[i],log(v[i]),log(c[i]));
for(i=1;i<=N;i++)
{x[i]=log(c[i]); /* 为线性回归作准备*/
y[i]=log(v[i]);
}
regression(); /* 调用线性回归子程序求lnv 和lnC 的线性关系*/
printf("\n 反应级数n=%f",b);
printf("\n 速率常数k=%f",exp(a));
}
C语言中出现illegal use of floating point in function inval错误,怎么解决呀?
在if(i!=j) p=p*(t-x[j])/(x[i]-x[j]);处出现illegal use of floating point in function inval错误
我还没输数据,应该不会出现除数是零的情况,估计是这个拉格朗日插值程序有问题。
float inval(T) /* 拉格朗日插值子程序*/
float T;
{float f,p;
int i,j;
f=0.0;
for(i=1;i<=N;i++)
{p=1.0;
for(j=1;j<=N;j++)
if(i!=j) p=p*(t-x[j])/(x[i]-x[j]);
f=f+p*y[i];}
return(f);
}