因为对热力学概念公式完全不懂,本文参考自以下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
版权声明:本文为Hu_helloworld原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。