Python 中的斯特林循环和埃里克森循环建模
斯特林循环
斯特林循环由四个过程组成——两个可逆等容过程和两个可逆等温过程。在相同的温度范围内,理想的再生斯特林循环的效率等同于卡诺循环。整个循环中都会发生热量交换,而功交换仅发生在过程 1-2 和 3-4 中。
下图显示了该循环的示意图。

在对循环进行建模时,考虑的输入变量包括最大压力 (pmax)、最小压力 (pmin)、最大体积 (vmax)、压缩比 (r) 和绝热指数 (γ)。以下列出了斯特林循环各个阶段中涉及的多个过程的热力学计算 -
过程 1-2
p1=pmin
v1=vmax
首先,将根据点 1 处的体积使用压缩比 (r) 计算点 2 处的体积,如下所示 -
v2=v1r
然后,计算过程 1-2 沿线的等温常数,如下所示 -
c1=p1×v1
可以计算点 2 处的压力,如下所示 -
p2=c1v2
一旦已知 c1,则计算沿线 1-2 的压力变化,如下所示 -
p=c1v
过程 2-3
p3=pmax
由于该过程是等容的,因此体积保持不变,因此 -
v3=v2
因此,可以轻松计算 2 和 3 之间的压力变化。
过程 3-4
设 c2 为沿线 3-4 的常数。由于已知压力和温度点 3,因此可以计算等温线沿线的常数,如下所示 -
c2=p3×v3
并且由于 v4=v1,因此可以计算点 4 处的压力,如下所示 -
p4=c2v4
因此,可以计算沿线 3-4 的压力变化,如下所示 -
p=c2v
过程 4-1
由于 p1 和 p4 已知,因此可以轻松计算 v4= 常数线的压力变化。
斯特林循环的 Python 程序
斯特林循环的 Python 函数如下所示 -
示例
from pylab import* from pandas import* #~~~~~~~~~~~~~~~~~~~~~ # Stirling Cycle #~~~~~~~~~~~~~~~~~~~~~ def stirling(p_min,p_max,v_max,r,gma): font = {'family' : 'Times New Roman','size' : 40} figure(figsize=(20,15)) rc('font', **font) '''This function prints Stirling cycle arguments are as follows: p_min: minimum pressure p_max: Maximum pressure v_max: Maximum volume r: compression ratio gma: Adiabatic exponent The order of arguments is: p_min,p_max,v_max,r,gma ''' #~~~~~~~~~~~~~~~~~~~~~~~~~ # Process 1-2 #~~~~~~~~~~~~~~~~~~~~~~~~~ p1=p_min v1=v_max c1=p1*v1 v2=v1/r p2=c1/v2 v=linspace(v2,v1) p=c1/v plot(v,p/1000,'r',linewidth=2) #~~~~~~~~~~~~~~~~~~~~~~~~~ # Process 2-3 #~~~~~~~~~~~~~~~~~~~~~~~~~ p3=p_max v3=v2 v=zeros(100)+v3 p=linspace(p2,p3,100) plot(v,p/1000,'b',linewidth=2) #~~~~~~~~~~~~~~~~~~~~~~~~~ # Process 3-4 #~~~~~~~~~~~~~~~~~~~~~~~~~ c2=p3*v3 v4=v1 p4=c2/v4 v=linspace(v3,v4,100) p=c2/v plot(v,p/1000,'g',linewidth=2) #~~~~~~~~~~~~~~~~~~~~~~~~~ # Process 4-1 #~~~~~~~~~~~~~~~~~~~~~~~~~ p=linspace(p1,p4,100) v=zeros(100)+v1 plot(v,p/1000,'m',linewidth=2) title('Stirling Cycle',size='xx-large',color='k') xlabel('Volume (m$^3$)') ylabel('Pressure (kPa)') #axis([0.01,v4+0.01,p_min/1000-100,p_max/1000+100]) #grid(linestyle='--',color='k') text(v1,p1/1000-80,'1') text(v2-0.01,p2/1000,'2') text(v3-0.01,p3/1000-20,'3') text(v4,p4/1000+30,'4') data={'p':[p1,p2,p3,p4], 'v':[v1,v2,v3,v4], 'c':[c1,'' ,c2,"" ], 'State': [1,2,3,4]} df=DataFrame(data) savefig('stirling_final.jpg') return df.set_index('State') sc=stirling(10**5,20*10**5,0.5,5,1.4) show()
输出
对于 pmin=105Pa,pmax=20×105Pa,vmax=0.5m3,r=5andy=1.4,程序的结果如下所示 -

Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.
埃里克森循环
埃里克森循环由两个可逆等压过程和两个可逆等温过程组成。在相同的温度范围内,理想的再生埃里克森循环的效率与卡诺循环相同。该循环中的所有过程都与热量和功相互作用。下图显示了该循环的示意图。

在对循环进行建模时,考虑的输入变量包括最大压力 (pmax)、最小压力 (pmin)、最大体积 (vmax)、恒压排热过程中的压缩比 (r) 和绝热指数 (γ)。下面描述了埃里克森循环中各个过程的热力学计算 -
过程 1-2
p1=pmin
p2=p1
v1=vmax
首先将根据点 1 处的体积使用压缩比 (r) 计算点 2 处的体积,如下所示 -
v2=v1r
由于 1-2 是等压过程,并且已知极端体积,因此可以轻松计算压力变化。
过程 2-3
可以计算等温线 2-3 沿线的常数 c1,如下所示 -
c1=p2×v2
由于 p3=pmax,因此可以计算点 3 处的体积,如下所示 -
v3=c1p3
可以计算压力变化,如下所示 -
p=c1v
过程 3-4
p4=p3
设 c2 为沿线 4-1 的常数。由于已知点 1 处的压力和体积,因此可以计算等温线 4-1 沿线的常数,如下所示 -
c2=p1×v1
因此,可以计算点 4 处的体积,如下所示 -
v4=c2p4
由于已知末端体积,因此可以轻松计算压力变化。
过程 4-1
由于 v1 和 v4 已知,并且常数 c2 也已知,因此可以计算压力变化,如下所示 -
p=c2v
埃里克森循环的 Python 程序
用于模拟埃里克森循环的 Python 函数如下所示 -
示例
from pylab import* from pandas import* #~~~~~~~~~~~~~~~~~~~~~ # Ericsson Cycle #~~~~~~~~~~~~~~~~~~~~~ def ericsson(p_min,p_max,v_max,r,gma): font = {'family' : 'Times New Roman','size' : 39} figure(figsize=(20,15)) rc('font', **font) '''This function prints Ericsson cycle arguments are as follows: p_min: minimum pressure p_max: Maximum pressure v_max: Maximum volume r: compression ratio gma: Adiabatic exponent The order of arguments is: p_min,p_max,v_max,r,gma ''' #~~~~~~~~~~~~~~~~~~~~~~~~~ # Process 1-2 #~~~~~~~~~~~~~~~~~~~~~~~~~ p1=p_min p2=p1 v1=v_max v2=v1/r p=zeros(100)+p2 v=linspace(v2,v1,100) plot(v,p/1000,'r',linewidth=2) #~~~~~~~~~~~~~~~~~~~~~~~~~ # Process 2-3 #~~~~~~~~~~~~~~~~~~~~~~~~~ c1=p2*v2 p3=p_max v3=c1/p3 v=linspace(v3,v2,100) p=c1/v plot(v,p/1000,'b',linewidth=2) #~~~~~~~~~~~~~~~~~~~~~~~~~ # Process 3-4 #~~~~~~~~~~~~~~~~~~~~~~~~~ p4=p3 c2=p1*v1 v4=c2/p4 p=zeros(100)+p4 v=linspace(v3,v4,100) plot(v,p/1000,'g',linewidth=2) #~~~~~~~~~~~~~~~~~~~~~~~~~ # Process 4-1 #~~~~~~~~~~~~~~~~~~~~~~~~~ v=linspace(v4,v1,100) p=c2/v plot(v,p/1000,'m',linewidth=2) title('Ericsson Cycle',size='xx-large',color='k') xlabel('Volume (m$^3$)') ylabel('Pressure (kPa)') + # axis([0.0,v1+0.01,p_min/1000-100,p_max/1000+100]) # grid(linestyle='--',color='k') text(v1,p1/1000-80,'1') text(v2,p2/1000-80,'2') text(v3-0.015,p3/1000-20,'3') text(v4+0.01,p4/1000-20,'4') data={'p':[p1,p2,p3,p4], 'v':[v1,v2,v3,v4], 'c':[c1,'' ,c2,"" ], 'State': [1,2,3,4]} df=DataFrame(data) savefig('Ericsson_final.jpg') return df.set_index('State') erc=ericsson(2*10**5,20*10**5,0.5,5,1.4) show() erc
输出
对于 pmin=2×105Pa,pmax=20×105Pa,vmax=0.5m3,r=5andγ=1.4,从代码中获得的结果如下图所示 -

此外,不同点沿循环的压力和体积如下表所示 -
状态 |
p |
v |
---|---|---|
1 |
200000 |
0.50 |
2 |
200000 |
0.10 |
3 |
2000000 |
0.01 |
4 |
2000000 |
0.05 |
结论
在本教程中,使用 Python 对埃里克森循环和斯特林循环进行了建模。提到了详细的算法和编程步骤,以开发这些循环的函数。