因爲對熱力學概念公式完全不懂,本文參考自以下blog,感謝其貢獻
版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/LWLGZY/article/details/77469664
原博客C++語言編寫,由於需要,本文將其改寫爲python版本
# 已知室外溫度、溼度,計算溼焓值
def calculateHZ_S(tw):
mm0 = tw / 234.5
mm1 = tw * (18.678 - mm0) / (tw + 257.14)
mm2 = np.exp(mm1)
hw = 1.01 * tw + 0.6219 * (2500 + 1.84 * tw) * 611.2 * mm2 / (101326 - 611.2 * mm2)
return hw
# 計算空氣焓值,輸入參數:series,list(矩陣運算)或者 單個值,輸入溫度、溼度
def calculateHZ(temper, humidity):
t1 = (18.678 - temper / 234.5) * temper / (temper + 257.14)
pv = 611.2 * np.exp(t1)
d = 0.6219 * (0.01 * humidity * pv / (101326 - 0.01 * humidity * pv))
h = 1.01 * temper + (2500 + 1.84 * temper) * d
return h
# 輸入溫度、溼度
def calWbt(temper, humidity):
nums = 0 # 迭代次數
val = 0. # 溼球溫度迭代初值
ii = 0
e = e_1 = e_2 = ee_1 = ee_2 = 0
if 0 <= temper < 60:
e = np.abs(calculateHZ_S(val) - calculateHZ(temper, humidity))
while e > 0.02:
e = calculateHZ_S(val) - calculateHZ(temper, humidity)
e_2, e_1 = e_1, e
ii += e
ee_2, ee_1 = ee_1, (e_1 - e_2) # 微分
if e > 0:
val -= 0.1 * abs(e) + 0.001 * ii + 0.01 * ee_1
else:
val += 0.1 * abs(e)
if e_1 - e_2 < 0:
val += 0.005
else:
val -= 0.005
e = np.abs(calculateHZ_S(val) - calculateHZ(temper, humidity))
nums += 1
if nums > 2000:
if e > 3:
e = calculateHZ_S(val) - calculateHZ(temper, humidity)
if e < 0:
val += -0.1 * e
if val > temper:
val = temper * 0.99
return val
return val
# 計算溼球溫度,溼球溫度需要用到空氣焓值,輸入溫度、溼度
def calculateWbt(temper, humidity):
if len(temper) != len(humidity):
logger.info('溼球溫度計算 - 輸入數據有誤!')
return None
res_val = []
for i in range(len(temper)):
res_val.append(calWbt(temper[i], humidity[i]))
return res_val