化工热力学气体p-V-T关系的编程计算论文
- 格式:doc
- 大小:126.00 KB
- 文档页数:9
第一章 气体的pVT 性质无论物质是哪一种聚集状态,都有许多宏观性质,如压力p 、体积V 、温度T 、密度ρ、内能U 、熵S 等.在重多的宏观性质中,p 、V 、T 三者是物理意义非常明确、又易于直接测定的基本性质.当物质的量n 一定后,其pVT 性质不可能同时独立取值,而存在如下关系:0),,(=T V p f该函数称为状态方程.若考虑到物质的量n,则可表示为: 0),,,(=T V p n f鉴于液、固体的可压缩性一般甚小,即等温压缩率(系数) T T pVV )(1∂∂-=κ和体膨胀系数p V TVV a )(1∂∂=均较小,故在通常的物理化学计算中,常将其体积随压力和温度的变化忽略.与凝聚态相比,气体具有较大的等温压缩系数T κ和体膨胀系数V a ,其体积随温度和压力的变化较大,故一般只研究气体的pVT 性质.1.1 理想气体状态方程1.理想气体状态方程波义尔定律: 常数=pV (n,T 恒定)盖.吕萨克定律 常数=T V / (n,p 恒定)阿伏加德罗定律 常数=n V / (p,T 恒定)这三个定律都客观地反映了低压下气体服从的pVT 简单关系.将其结合可整理得到状态方程: nRT pV =此即理想气体状态方程.式中,R 是摩尔气体常数.其值经精确测定,为:11314510.8--⋅⋅=K mol J R .因摩尔体积n V V m /=,故理想气体状态方程又可写成:RT pV m = 因M m n =,Vm =ρ,故理想气体状态方程又可写成:RT Mm pV =或RT pM ρ=例: 试由上列三定律导出理想气体状态方程.解: 因任意体系均满足:0),,,(=n T V p f ,可改写成:),,(n T p f V =该式取全微分得:dn nVdT T V dp p V dV T p n p n T ,,,)()()(∂∂+∂∂+∂∂= 由波义尔定律得: 0=+Vdp pdV (T,n 恒定)此即: pV p V n T -=∂∂,)( 同理,由盖.吕萨克定律和阿伏加得罗定律可得: T V T V n p =∂∂,)(和 nV n V T p =∂∂,)( 代入全微分式得:dn nVdT T V dp p V dV ++-=)(此式即: ndn T dT p dp V dV +=+ 或 )ln()ln(nT d pV d =亦即: 0)ln(=nT pV d ,积分可得: 常数=nTpV又据阿伏加德罗定律知,当气体的p,V 一定时,体系的(V/n )为与气体各类无关的常数,故上式中的常数对任何气体都应具有相同的值,如用R 表示,则上式变为: nRT pV =这就是理想气体状态方程.2.理想气体凡在任何温度、压力下均服从方程nRT pV =的气体称理想气体. 按照上述定义,理想气体必须具备下列两个微观特征: (1).气体分子本身不占有体积,是没有大小的质点.因在T 恒定时,常数=m pV ,当0→p 时,必有0→m V (2).分子间无相互作用力.分子可近似被看作是没有体积的质点。
1前言状态方程是物质p-V-T关系的解析式。
从19世纪的理想气体方程开始,状态方程一直在发展和完善之中。
状态方程可以分为下列三类。
第一类式立方型状态方程,如van der Waals、RK、SRK、PR等;第二类是多常数状态方程,如virial、BWR、MH等;第三类是理论型状态方程。
第一类和第二类状态方程直接以工业应用为目标,在分析和探讨流体性质规律的基础上,结合一定的理论指导。
由半经验方法建立模型,并带有若干个模型参数,需要从实验数据确定。
一般来说,状态方程半酣的流体性质规律愈多,方程就愈可靠,描述流体性质的准确性越高,适用范围越广,模型越有价值。
即使是经验型状态方程也不是简单的拟合实验数据,与研究者的理论素质、经验和技巧密切相关。
物质的宏观性质决定于其微观结构,科学工作者一直致力于从微观出发建立状态方程。
第三类的状态方程就是分子间相互作用力与统计力学结合的结果。
但是,微观现象如此复杂,目前情况下,其结果离实际使用仍有差距。
从简单性、准确性和所需要的输入数据诸方面考察,目前,第一,第二类的经验型状态方程一般较第三类方程更具优势。
状态方程的建立过程大多数是从纯物质着手,通过引入混合法则,再应用于混合物的热力学性质计算。
状态方程的建立过程大多数是从纯物质着手,但现已有有许多状态方程不仅能用于气相,而且可以用到液相区,甚至还在向固相发展,这给一个模型计算多种性质提供了条件。
方向的准确性和简单性一直是状态方程发展中的一对矛盾。
虽然当今的计算机已十分发达,但工业应用中仍渴望着形式简单和准确度高的状态方程,目前还没有一个状态方程能在整个的p-V-T范围内对物质的热力学性质准确地做出描述。
对于那些分子间的相互作用力可忽略不计,气体分子本身的体积可忽略不计的理想气体其状态方程为pV=RT。
理想气体EOS是f(p,V,T)=0中最简单的一种形式,真实气体对理想气体的偏离程度可以用压缩因子Z来表达:Z=pV/RT。
. .理工大学化工热力学论文(大作业)题目:热力学第一定律的应用姓名:专业:化学工程学号: 31307022 指导教师:乃文摘要热现象是人类最早接触到的自然现象之一。
人类从远古时期开始就已经开始知道了如何利用摩擦、燃烧、爆炸等热现象来达到生产和生活的目的。
在过去的一个多世纪里面,经典热力学的发展取得了巨大的进步,从最初的模糊的热的概念逐步演变发展成为一门科学、严谨、庞大的学科。
经典热力学的发展历史是人类对热的本质及能量转换规律的认识、掌握和运用的历史。
经典热力学是一实验为基础的宏观理论,具有高度的可靠性和普遍性。
它研究的容决定了物理、化学反应进行的方向和限度,对于化工生产的发展意义重大。
它决定设计分离过程、化学反应器所需要的化学反应平衡和平衡的数据、参数和状态。
能够判断化工生产中一些新的合成工艺是否可行,以及在什么条件下可行,节省了化工开发过程中的人力、物力和研发时间;同时在化工设计、生产过程中的多元平衡数据都需要通过热力学的方法来确定。
它在冷凝、汽化、闪蒸、液相节流、蒸馏、吸收、萃取和吸附等单元操作中应用也十分普遍。
可以说经典热力学是化工设计、化工生产的基础。
热力学第一定律即能量守恒及转换定律,它是自然界的一条普遍定律,是19世纪的三大发现(进化论、细胞学说和能量守恒及转化定律)之一,在学科的各个领域均得到广泛的应用。
热力学第一定律的文字表述是:自然界一切物质都具有能量,能量有各种不同的形式,可以从一种形式转化为另外一种形式,从一个物体传递到另外一个物体,在传递与转化中能量的数量不变。
从中可知,能量既不会消失也不会无中生有,转化的过程中具有不灭性,而做功必须由能量转化而来,所以,永动机是不可能实现的。
能量守恒和转化定律的发现是人类认识自然的一个伟大进步,它揭示自然界是一个互相联系、互相转化的统一体,第一次在空前广阔的领域里把自然界各种运动形式联系起来。
在理论上,这个定律的发现对自然科学的发展和建立辩证唯物主义自然观提供了坚实的基础。
气体p-V-T关系的编程计算摘要本文运用c语言编程的方法,解决化工热力学中的气体p-V-T关系的计算。
在化热力学气体p-V-T关系的计算过程中,有很多复杂的计算,有些需要进行复杂的小数计算,还有谢问题需要通过反复迭代才能得到结果。
在解决这些问题时通过编程计算成为大家选择的最佳途径之一。
本文系统的对这些程序做了汇集、汇编、整理,得到了可以直接应用的程序。
本程序充分考虑了人机语言转换的障碍,在人机交流的过程中会自动提示使用者进行操作:在输入数据时,会有输入格式说明等提示;在结果输出时,会把运算公式、计算迭代过程以及运算结果一并输出,方便使用者解决问题。
程序中使用的是C语言做计算,程序中使用了if,for,switch语句等基础函数语句和函数调用的基本方法,函数之间结合比较简单,使用者也可以按自己的需求自行改动函数语句。
本程序的主函数部分如下:#include<stdio.h>#include<math.h>void main( ){char fch,jg,sql;float p,V,T;int i,n;printf("欢迎进入物质p-V-T关系计算环境,程序正在编写中,欢迎交流学习!");printf("\n请输入所用方程和所求量。
\n公式代号说明:1 理想气体状态方程;2 维里方程;3 范德华方程;4 RK方程;5 SRK(RKS)方程。
\n所求量为p,V,T");printf("\n请输入所选方程代号fch=");scanf("%s",&fch);printf("\n请输入所求量sql=");scanf("%s",&sql); xzfch(fch,sql);}本文运用本文成功的解决了计算中遇到的大部分题。
在数值计算、迭代计算等复杂问题中得到了方便的应用。
程序能解决的问题如表一:表一:程序能解决的计算1.符号说明本程序在编写过程中使用了C 语言中通用的符号,在定义子函数及变量过程中使用的是汉语拼音中的生母标注法,具体标注如下:变量定义:p,V ,T,R--------气体的压强,体积,温度以及系数R ; sql--------------所求量; fch-------------使用的方程; 函数的定义:shrp(),shrV (),shrT ()---------在已知p,V ,T 的时候的输入函数;LX(),VL(),VDW(),RK(),SRK()--理想气体状态方程, 维里方程,范德华方程,RK 方程, SRK (RKS )方程。
2.程序汇编思路在程序编写过程中,遵循下列路径:3.使用要求及方法要求电脑安装Microsoft Visual C++程序软件。
使用时直接打开程序,依次点击运行按钮,按提示输入相关方程及数据即可。
运行界面如下:4.补充说明程序仍在开发编辑中,使用过程中如果发现任何问题,欢迎学习交流!附件:完整的程序如下:#include<stdio.h>#include<math.h>float p,V,T,R;R=8.314;/*输入函数库*/void shrp(){printf("\n请输入已知量V=");scanf("%f",&V);printf(" T=");scanf("%f",&T);}void shrV(){printf("\n请输入已知量p=");scanf("%f",&p);printf(" T=");scanf("%f",&T);}void shrT(){printf("\n请输入已知量p=");scanf("%f",&p);printf(" V=");scanf("%f",&V);}/*计算函数库*//*理想气体状态方程*/void LX(char sql){switch(sql){case'P':case'p':shrp();p=R*T/V;printf("\n计算公式为p=R*T/V\n所求量p=%f\n",p);break;case'V':case'v':shrV();V=T*R/p;printf("\n计算公式为V=T*R/p\n所求量V=%f\n",V);break;case'T':case't':shrT();T=p*V/R;printf("\n计算公式为T=p*V/R\n所求量T=%f\n",T);break;default:printf("\n\n输入所求量错误\n");}}/*维里方程*/void VL(char sql){float B,C,Z;float f[20],g[20];int i;f[0]=1;printf("\n请输入维里系数B=");scanf("%f",&B);printf("\n请输入维里系数(如果没有C请输入0) C=");scanf("%f",&C);if(C==0)switch(sql){case'P':case'p':shrp();Z=1+B/V;p=Z*R*T/V;printf("\n计算公式为\n Z=1+B/V;\np=Z*R*T/V;\n系数Z=%f\n所求量p=%f\n",Z,p);break;case'V':case'v':shrV();Z=1+B*p/R/T;V=Z*T*R/p;printf("\n计算公式为\n Z=1+B*p/R/T;\nV=Z*T*R/p; \n系数Z=%f\n所求量V=%f\n",Z,V);break;default:printf("\n\n输入所求量错误\n ");}if(C!=0)switch(sql){case'P':case'p':shrp();Z=1+B/V+C/V/V;p=Z*R*T/V;printf("\n计算公式为\n Z=1+B/V+C/V/V;\np=Z*R*T/V;\n系数Z=%f\n所求量p=%f\n",p);break;case'V':case'v':shrV();for(i=0;i<20;i++){g[i]=R*T/p*f[i];f[i+1]=1+B/g[i]+C/g[i]/g[i];if(f[i+1]-f[i]>-1e-6&& f[i+1]-f[i]<1e-6)break;}Z=f[i+1];V=Z*T*R/p;printf("\n第%d次计算后,\nZ%d=%f;\nV%d=%f;",i,i,f[i+1],i,g[i]);printf("\n计算公式为\n V[i]=R*T/p*Z[i];\nV[i]=R*T/p*Z[i];Z[i+1]=1+B/g[i]+C/g[i]/g[i]; \n系数Z=%f\n所求量V=%f",Z,V);break;default:printf("\n\n输入所求量错误\n");}}/*范德华方程*/void VDW(char sql){float a,b;printf("\n请输入相关参数a=");scanf("%f",&a);printf("\n请输入相关参数b=");scanf("%f",&b);switch(sql){case'P':case'p':shrp();p=R*T/(V-b)-a/V/V;printf("\n计算公式为\n p=R*T/(V-b)-a/V/V;\n所求量p=%f\n",p);break;case'V':case'v':printf("\n\n无相关公式");break;default:printf("\n\n输入所求量错误");}}/*RK方程*/void RK(char sql){float Tc,Pc,Z,a,b,A,B;float f[20],g[20];int i;f[0]=1;printf("\n请输入相关参数Tc=");scanf("%f",&Tc);printf("\n请输入相关参数Pc=");scanf("%f",&Pc);a=0.42748*R*R*Tc*Tc*sqrt(Tc)/Pc;b=0.08664*R*Tc/Pc;switch(sql){case'P':case'p':shrp();p=R*T/(V-b)-a/sqrt(T)/V/(V+b);printf("\n计算公式为\n p=R*T/(V-b)-a/sqrt(T)/V/(V+b);\n所求量p=%f\n",p);break;case'V':case'v':shrV();A=a*p/R/R/T/T/sqrt(T);B=b*p/R/T;for(i=0;i<20;i++){g[i]=B/f[i];f[i+1]=1/(1-g[i])-A/B*g[i]/(1+g[i]);printf("\n第%d次计算后,\nZ%d=%f;\nh%d=%f;",i,i,f[i+1],i,g[i]);if(f[i+1]-f[i]>-1e-6&& f[i+1]-f[i]<1e-6)break;}Z=f[i+1];V=Z*T*R/p;printf("\n计算公式为\n h[i]=B/Z[i];\nZ[i+1]=1/(1-h[i])-A/B*h[i]/(1+h[i]);\n系数A=%f\n系数B=%f\n系数Z=%f\n所求量V=%f\n",A,B,Z,V);break;default:printf("\n\n输入所求量错误\n");}}/*SRK(KRS)方程*/void SRK(char sql){float Tc,Pc,Tr,a,b,A,B,w,m,K;float f[20],g[20];int i;f[0]=1;printf("\n请输入相关参数Tc=");scanf("%f",&Tc);printf("\n请输入相关参数Pc=");scanf("%f",&Pc);printf("\n请输入相关参数w=");scanf("%f",&w);a=0.42748*R*R*Tc*Tc*sqrt(Tc)/Pc;b=0.08664*R*Tc/Pc;switch(sql){case'P':case'p':shrp();Tr=T/Tc;m=0.480+1.574*w-0.176*w*w;K=a*(1+m*(1-sqrt(Tc)))* (1+m*(1-sqrt(Tc)));p=R*T/(V-b)-K/V/(V+b);printf("\n计算公式为\n p=R*T/(V-b)-a/ V/(V+b);\n系数a=%f\n系数b=%f\n系数Tr=%f\n系数K=%f\n所求量p=%f\n",a,b,Tr,K,p);break;case'V':case'v':shrV();A=a*p/R/R/T/T;B=b*p/R/T;/*for(i=0;i<20;i++){g[i]=B/f[i];f[i+1]=1/(1-g[i])-A/B*g[i]/(1+g[i]);if(f[i+1]-f[i]>-1e-6&& f[i+1]-f[i]<1e-6)printf("\n第%d次计算后,\nZ%d=%f;\nh%d=%f;",i,i,f[i+1],i,g[i]);break;}Z=f[i+1];V=Z*T*R/p;*/printf("\n计算公式为\n h[i]=B/Z[i];Z[i+1]=1/(1-h[i])-A/B*h[i]/(1+h[i]);\n所求量V=%f\n",V);break;default:printf("\n\n输入所求量错误\n");}}/*主函数*/void main( ){char fch,jg,sql;int i,n;printf("欢迎进入物质p-V-T关系计算环境,程序正在开发中,欢迎交流学习!");printf("\n请输入所用方程和所求量。