使用Python求解熱力學第一定律


熱力學第一定律與能量守恆有關,即如果某種形式的能量消失,則該能量將以其他形式出現。在熱力學中,我們主要關注熱量、功和內能。熱量和功是能量的形式,也稱為“能量傳遞”,因此它們是路徑函式。系統不能儲存它們,而內能是系統的屬性,系統可以儲存內能。

對於封閉系統,第一定律寫成:

$$\mathrm{\Sigma Q=\Sigma W}$$

但這僅適用於經歷迴圈的封閉系統。對於一個過程,可以寫成:

$$\mathrm{Q_{1-2}=\triangle U+W_{1-2}}$$

在我們開始建模之前,應該知道如何為不同的過程建模功和熱量。讓我們首先做到這一點。

如果系統對外部環境的唯一影響可以簡化為重量增加,則稱系統進行了熱力學功。在實際情況下,重量可能不會被提升,但效果仍然可能是提升重量。功可能是由系統完成的,也可能是作用於系統的,這取決於方向。前者被認為是正功,後者被認為是負功。

功是路徑函式,因為它取決於兩個狀態之間的路徑以及初始狀態和最終狀態。在本文中,我們將關注非耗散/位移功。它指的是封閉系統 p-v 圖下的區域。

對於由過程 $pv^{n}$=常數表示的通用多方過程,所做的功取決於指數 𝑛。下表將根據指數 𝑛 說明不同的過程。

n

過程

p−v 關係

0

等壓過程 (p=常數)

p = c

1

理想氣體的等溫過程 (T=常數)

pv =c

1.4

絕熱過程 (無熱量交換)

$\mathrm{pv^{y}\:=c}$

等容過程 (體積恆定)

v = c

為了匯出如公式 (3) 所示的功相互作用,典型的方法是從起始狀態到最終狀態積分過程。

$$\mathrm{W=\int ^{2}_{1}pdv}$$

因此,下表包含不同過程功相互作用的列表。

過程

p-v 關係

等壓過程 (p = c)

$\mathrm{p(v_{2}-v_{1})}$

理想氣體的等溫過程 (pv=c)

$\mathrm{p_{1}v_{1}\mathbb{I}n\frac{v_{2}}{v_{1}}=p_{1}v_{1}\mathbb{I}n\frac{p_{1}}{p_{2}}}$

多方過程 ($pv^{n}=c)$

$\mathrm{\frac{\mathrm{p_{1}v_{1}-p_{2}v_{2}}}{n-1}}$

絕熱過程 ($pv^{y}=c$)

$\mathrm{\frac{\mathrm{p_{1}v_{1}-p_{2}v_{2}}}{\gamma -1}}$

等容過程 (v=c)

0

熱傳遞定義為由於溫度差異而發生的系統與其周圍環境之間的能量轉移。傳導、對流和輻射是其三個主要分類。

進入系統的熱量被認為是正的,而離開系統的熱量被認為是負的。當系統不與周圍環境交換熱量時,則稱其經歷絕熱過程。將單位質量物質的溫度提高一度所需的熱量稱為比熱。

比熱的表示式如公式 (4) 所示。物質的熱容用符號 𝐶 (𝐶=𝑚𝑐) 表示,它是質量和比熱的乘積。對於固體和液體,比熱不受過程的影響;但是,對於氣體,必須根據方法限定比熱。因此,對於氣體的恆壓和恆容過程,它有所不同。

$$\mathrm{Q=mc\Delta t}$$

潛熱 (L) 是每單位質量改變物質相所需的熱量。潛熱轉換不會導致溫度或壓力的變化。

相變過程中單位質量物質的總熱量相互作用由下式給出:

$$Q=mL$$

使用Python程式設計評估熱量和功

下表顯示了查詢功和熱量相互作用的不同Python函式。此外,它們還將用於繪製過程及其下方的面積。

from pylab import *

# Font and size
font = {'family' :'Times New Roman','size' : 16}
rc('font', **font)

# Constant Volume Process
def w_cv(p1,p2,v):

   """
   Function for constant volume process
   Input: Pressure limits p1 & p2 (in kPa) and volume (m^3)
   Output: Work output and p-v plot
   """
   
   figure(1,figsize=(7.20,4.80))
   
   p=linspace(min(p1,p2),max(p1,p2),30)
   v=zeros(30)+v
   
   plot(v,p,'k-',linewidth=4)
   xlabel('Volume (m$^3$)')
   ylabel('Pressure (kPa)')
   
   show()
   return 0
   
# Constant Pressure Process
def w_cp(p,v1,v2):

   """
   Function for constant pressure process
   Input : Volume limits v1 & v2 (m^3) and pressure (kPa)
   Output: Work output and p-v plot
   """
   
   work = p*(v2-v1)
   figure(2,figsize=(7.20,4.80))
   v=linspace(min(v1,v2),max(v1,v2),30)
   p=zeros(30)+p
   
   plot(v,p,'k-',linewidth=4)
   fill_between(v,p,color='red',alpha=0.3)
   xlabel('Volume (m$^3$)')
   ylabel('Pressure (kPa)')
   
   show()
   return round(work,3)
# Constant Temperature Process
def w_ct(p1,v1,v2):
   """
   Function for constant temperature process
   Input : Initial pressure (kPa) and volume (m^3) and final volume (m^3)
   Output: Work output and p-v plot
   """
   
   work = p1*v1*log(v2/v1)
   figure(2,figsize=(7.20,4.80))
   
   v=linspace(min(v1,v2),max(v1,v2),30)
   c=p1*v1
   p=c/v
   
   plot(v,p,'k-',linewidth=4)
   fill_between(v,p,color='red',alpha=0.3)
   xlabel('Volume (m$^3$)')
   ylabel('Pressure (kPa)')
   
   show()
   return round(work,3)
   
# Polytropic Process
def w_pol(p1,p2,v1,v2,n):
   """
   Function for polytropic process
   Input : p1 & p2 (kPa), v1 & v2 (m^3), and n (m^3)
   If the process is adiabatic write n=1.4
   Output: Work output and p-v plot
   """
   
   work = (p1*v1-p2*v2)/(n-1)
   figure(2,figsize=(7.20,4.80))
   
   v=linspace(min(v1,v2),max(v1,v2),30)
   c=p1*v1**n
   p=c/v**n
   
   plot(v,p,'k-',linewidth=4)
   fill_between(v,p,color='red',alpha=0.3)
   xlabel('Volume (m$^3$)')
   ylabel('Pressure (kPa)')
   
   show()
   return round(work,3)
# Sensible Heat Transfer
def q_sh(m,c,T1,T2):
   """
   
   Function for the evaluation of sensible heat transfer
   Input : mass (m), sp. heat (c), initial temp (T1), final temp (T2)
   Output: heat transfer
   """
   
   return m*c*(T2-T1)
   
# Heat transfer during phase change
def q_mel_sol(m,Ti,Tf,T_pc,c_bpc,c_apc,L):
   """
   Function for the evaluation of heat transfer during phase change
   Input: mass (m), initial temp (Ti), final temp (Tf),
   phase change temp (T_pc), sp. heat below phase change (c_bpc),
   sp. heat above phase change (c_apc), latent heat (L)
   Output: heat interaction
   """
   
   if Ti>Tf:
      print('Process is either freezing or condensation')
      return m*(c_bpc*(T_pc-Ti)-L+c_apc*(Tf-T_pc))
   else:
      print('Process is either melting or vaporization')
      return m*(c_bpc*(T_pc-Ti)+L+c_apc*(Tf-T_pc))

讓我們看看如何透過兩個例子來實現這些函式。

示例 1

1.5 kg 的空氣根據等溫過程從 0.2 MPa 壓縮到 1 MPa。初始點的空氣密度為 1.21 kg/m3。求所做的功,並在 p-v 圖中繪製。

解決方案

程式如下:

# Input Data
m=1.50 # kg
p1=0.2E3 # kPa
p2=1.0E3 # kPa
ρ1=1.21 # kg/m^3

# Volume at the beginning
v1=m/ρ1

# Volume at end of process
v2=(p1*v1/p2)

# Given Process is isothermal
# The function will be: w_ct
Work = w_ct(p1,v1,v2)

print('Work output = ', Work)

執行後,您將得到以下**輸出**:

Work output = -399.034

示例 2

650 kg 的金槍魚在 5°C 下冷凍並儲存在 -12°C。冰點以上和以下 (-2°C) 的比熱分別為 3.182 和 1.717 kJ/kg-K。對於 234.5 kJ/kg 的熔化潛熱,需要評估從金槍魚中去除的淨熱量。

解決方案

解決上述問題的 Python 程式如下:

# Input data
m=650 # kg
Ti=5 # deg C
Tf=-12 # deg C
T_pc=-2 # deg C
c_bpc=3.182 # kJ/kg
c_apc=1.717 # kJ/kg
L=234.5

# Function calling
Q_net=q_mel_sol(m,Ti,Tf,T_pc,c_bpc,c_apc,L)
print("Q = ",Q_net)

輸出

程式**輸出**將是:

Process is either freezing or condensation
Q = -178063.6

現在的問題是如何在程式碼中建模公式 1 和 2。由於您已經評估了熱量和功的函式,因此您可以很容易地建模第一定律。讓我們透過兩個例子來解決它。

示例 3

在示例 1 中,系統損失了 5 kJ 的熱量,然後評估系統的內能變化。

解決方案

首先,功的程式碼保持不變(如示例 1 中一樣),唯一變化的是公式 1 的實現,因此完整程式碼將是:

# Input Data
m=1.50 # kg
p1=0.2E3 # kPa
p2=1.0E3 # kPa
ρ1=1.21 # kg/m^3

# Volume calculation at point 1
v1=m/ρ1

# Calculation of volume at point 2
v2=(p1*v1/p2)

# Evaluation of W_12
# The function used is w_ct
w = w_ct(p1,v1,v2)

# Q_12
Q=-5

# Equation 1 says:
Δu=Q-w

print(f"Δu = {Δu} kJ")

輸出


程式輸出將是:

Δu = 394.034 kJ

因此,系統的內能增加了 394.034 kJ。

示例 4

一個封閉系統經歷三個熱交換和兩個功交換,如下所示:

Q (kJ)

+10

-30

-40

W (kJ)

+100

-50

?

找到缺失的能量相互作用。

解決方案

from numpy import *

nq=int(input("Enter number of heat interactions known: "))
nw=int(input("Enter number of work interactions known: "))
Q=empty(nq)
W=empty(nw)

for i in range(nq):
   Q[i]=float(input(f' Enter {i+1} heat interaction: '))
   
ΣQ=sum(Q)

for i in range(nw):
   W[i]=float(input(f' Enter {i+1} work interaction: '))
ΣW=sum(W)

# Missing Work interaction
W=ΣQ-ΣW

print(f' Missing work interaction : {W} kJ')

輸出

程式輸出將是:

Enter number of heat interactions known: 3
Enter number of work interactions known: 2
Enter 1 heat interaction: 10
Enter 2 heat interaction: -30
Enter 3 heat interaction: -40
Enter 1 work interaction: 100
Enter 2 work interaction: -50
Missing work interaction: -110.0 kJ

結論

在本教程中,我們解釋瞭如何建模和繪製功相互作用和熱量相互作用。此外,我們還透過兩個問題了解了如何對開放系統的第一定律的公式 1 和 2 進行實現。

更新於:2023年4月14日

1000+ 次瀏覽

開啟您的職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.