python實現空氣焓值,溼球溫度的計算

因爲對熱力學概念公式完全不懂,本文參考自以下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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章