include
include
double t[9]={15,30,50,100,150,200,300,400,550};
double cp[9]={7.2,16.4,21.1,24.3,25.2,25.8,26.5,27.4,28.9};
double sm_15=2.4;
double lgrg2(int n,double x0)
{
int i;
double p,q,r,z,c[i];
for(i=1;i<n;i++)
c[i]=cp[i]/t[i];
if(x0>t[0] && x0<t[1])
{
i=0;
p=(x0-t[i+1])*(x0-t[i+2])/(t[i]-t[i+1])/(t[i]-t[i+2]);
q=(x0-t[i])*(x0-t[i+2])/(t[i+1]-t[i])/(t[i+1]-t[i+2]);
r=(x0-t[i])*(x0-t[i+1])/(t[i+2]-t[i])/(t[i+2]-t[i+1]);
z=p*c[i]+q*c[i+1]+r*c[i+2];
}
else if(x0>t[n-2] && x0<t[n-1])
{
i=6;
p=(x0-t[i+1])*(x0-t[i+2])/(t[i]-t[i+1])/(t[i]-t[i+2]);
q=(x0-t[i])*(x0-t[i+2])/(t[i+1]-t[i])/(t[i+1]-t[i+2]);
r=(x0-t[i])*(x0-t[i+1])/(t[i+2]-t[i])/(t[i+2]-t[i+1]);
z=p*c[i]+q*c[i+1]+r*c[i+2];
}
else
{
for(i=0;i<n;i++)
{
if(x0>t[i] && x0<t[i+1])
if (fabs(x0-t[i])> fabs(x0-t[i+1]))
{
p=(x0-t[i+1])*(x0-t[i+2])/(t[i]-t[i+1])/(t[i]-t[i+2]);
q=(x0-t[i])*(x0-t[i+2])/(t[i+1]-t[i])/(t[i+1]-t[i+2]);
r=(x0-t[i])*(x0-t[i+1])/(t[i+2]-t[i])/(t[i+2]-t[i+1]);
z=p*c[i]+q*c[i+1]+r*c[i+2];
break;
}
else
{
i=i-1;
p=(x0-t[i+1])*(x0-t[i+2])/(t[i]-t[i+1])/(t[i]-t[i+2]);
q=(x0-t[i])*(x0-t[i+2])/(t[i+1]-t[i])/(t[i+1]-t[i+2]);
r=(x0-t[i])*(x0-t[i+1])/(t[i+2]-t[i])/(t[i+2]-t[i+1]);
z=p*c[i]+q*c[i+1]+r*c[i+2];
break;
}
}
}
return z;
}
double simp()
{
int k,n=1;
double a=15,b=500,h,fa,fb,eps=0.00001;
double t1,t2,s,s1,s2,d=1;
h=b-a;
s1=0;
fa=cp[0]/t[0];
fb=lgrg2(9,500);
t1=h*(fa+fb)/2;
while(d>eps)
{
s=0;
for(k=1;n;k++)
{
s=s+lgrg2(9,a+(k-0.5)*h);
}
t2=(t1+h*s)/2;
s2=t2+(t2-t1)/3;
d=fabs(s2-s1);
if(fabs(s2)>1)
{
d=fabs(s2-s1)/s2;
}
n=n*2;
h=h/2;
t1=t2;
s1=s2;
}
return s2;
}
int main()
{
double sm_500;
sm_500=sm_15+simp();
printf("固态铅在500K时的标准熵是%lf",sm_500);
return 0;
}