Python 计算湿球温度

553 阅读1分钟

参考来源:blog.csdn.net/Hu_hellowor…

直接上代码:

import numpy as np

# 已知室外温度、湿度,计算湿焓值
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):
        print('湿球温度计算 - 输入数据有误!')
        return None

    res_val = []
    for i in range(len(temper)):
        res_val.append(calWbt(temper[i], humidity[i]))
    return res_val

if __name__=='__main__':
    '''
    #命令行参数方式运行
    print('干球温度:',sys.argv[1])
    print('湿度:',sys.argv[2])
    if len(sys.argv)!=3:
        print('参数错误')
        exit(0)
    #t=[18,19,20,17]
    #h=[10,15,20,25]
    #s=calculateWbt(t,h)
    s=calWbt(int(sys.argv[1]),int(sys.argv[2]))
    print('湿球湿度:',s)
    '''
    t=[18,19,20,17]
    h=[10,15,20,25]
    s=calculateWbt(t,h)
    #s=calWbt(19,25)
    print(s)