24小时热门版块排行榜    

查看: 787  |  回复: 3
当前主题已经存档。

holyshine

[交流] 求助,P-R方程C语言编程求解问题

#include
#include

void main()
{
int k,sign;
double f(double V);
double v3,v4,q3;
double x[50],A,B,C;


x[1]=1.0;*设定初值
x[2]=2.0;
x[3]=3.0;  
k=3;

while(fabs(x[k]-x[k-1])>0.00001)*Muller法迭代
{
  v3=(x[k]-x[k-1])/(x[k-1]-x[k-2]);
  q3=1+v3;
  A=f(x[k-2])*v3*v3-f(x[k-1])*v3*q3+f(x[k])*v3;
  B=f(x[k-2])*v3*v3-f(x[k-1])*q3*q3+f(x[k])*(v3+q3);
  C=f(x[k])*q3;
  
  if (B>0)
          sign=1;
  else
          sign=-1;
  v4=-2*C/(B+sign*sqrt(B*B-4*A*C));
  x[k+1]=x[k]+v4*(x[k]-x[k-1]);

   k++;
}
  printf("Muller迭代方法所求实根X=%lf\n",x[k]);
  printf("迭代次数:%d\n",k);
}

double f(double V)
{ double R=8.314,Tc=190.69,Pc=4604000,w=0.013; *临界温度压力偏心因子
   double Q,T,a,b,P,e,d,K,Tr;
printf("请输入压力P(千帕)和温度T(开尔文)\n";
scanf("%lf,%lf",&P,&T);

Tr=T/Tc;
K=0.37464+1.54226*w-0.26992*w*w;
e=0.45724*R*R*Tc*Tc/Pc;
d=pow((1+K*(1-sqrt(Tr))),2.0);
a=e*d;
b=0.0778*R*Tc/Pc;
printf("a=%lf",a);

    Q=R*T/(V-b)-a/(V*(V+b)+b*(V-b))-P; *利用P-R方程构造的迭代格式
   return Q;
}
Peng-Robinson方程可以用来求实际流体的密度等物性参数,现在已知纯甲烷的临界温度和临界压力,偏心因子,用C语言编程计算1MP,108.15K时的密度。编程时出现溢出现象,主要是使用Muller法设定初值的问题,劳烦高手指点迷津,多谢。
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

波不动

木虫 (正式写手)

Wave No Move

★ ★
小木虫(金币+0.5):恭喜抢沙发,给个红包
Doctorcbw(金币+1,VIP+0):谢谢参与 12-21 09:37
是输入1000,108.15吧???
没有溢出啊??输出:a=0.300640
端好自己的碗,吃好自己的饭。
2楼2009-12-21 00:24:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bluesine

铁杆木虫 (职业作家)

科苑小木虫


小木虫(金币+0.2):抢了个小板凳,给个红包
double f(double V);

这一句应该写在main()函数外面   <上面>
板凳要做十年冷文章不发一个字
3楼2009-12-21 10:14:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holyshine

谢谢了


bluesine(金币+1,VIP+0):呵呵 ,能否把解决的方法分享一下呢 1-7 11:14
谢谢上面两位朋友的回复,我原以为没人理我呢,加之最近考试比较忙,一直没上网查看。这个问题已经解决了。不过,输入的是1000000,108.15.函数声明写在main()里也是可以的。再次感谢热心人,实在不好意思了。
4楼2010-01-06 22:15:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holyshine 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见