最近需要用到这个变量,正好之前看到一篇文章里提到用露点温度和平均温度可以计算,于是搜了一下,发现有关的内容比较少,且众说纷纭,就自己琢磨了下,大概有两种方法,先大致介绍一下第一种:
露点温度 :露点温度是空气达到饱和(相对湿度100%)并开始凝结成露珠的温度。它是一个衡量空气湿度的指标,而不是直接测量空气温度。
平均温度 :这是指一段时间内的平均气温,但在相对湿度的情况下,它通常是当前的气温。
相对湿度:相对湿度是空气中水蒸气的实际量与空气在该温度下可以容纳的最大量之比,以百分比表示。我们可以用露点温度和平均温度通过以下方法计算它:

Dp - 露点温度( ℃ ), RH - 相对湿度, T - 平均温度(以 °C 为单位), β = 17.625 ; λ = 243.04 °C 根据 Alduchov 和 Eskridge 的研究对Magnus 系数进行优化
代入这些值可以得到相对湿度的公式:

放到R中代码也很简单,随便创建一个数据集举例:
data <- data.frame(
T = c(25, 30, 20, 28),
Td = c(15, 18, 10, 16)
)
calculate_rh <- function(T, Td) {
a <- 17.625
b <- 243.04
e <- exp(a * Td / (b + Td))
es <- exp(a * T / (b + T))
rh <- 100 * (e / es)
return(rh)
}
data$RH <- mapply(calculate_rh, data$T, data$Td)
data$RH
如果嫌麻烦可以试试这个Relative Humidity Calculator
第二种可以试试R包 humidity
不过它计算饱和蒸气压的方法与第一种不同,来自Murray(1967),具体的公式推导可以看看文档介绍,
devtools::install_github("caijun/humidity", build_vignettes = TRUE)
browseVignettes("humidity")
library(humidity)
data <- data.frame(
T = c(25, 30, 20, 28),
Td = c(15, 18, 10, 16)
)
data$T <- as.numeric(data$T)
data$Td <- as.numeric(data$Td)
RH(data$T, data$Td, isK = FALSE)
按照最后的结果来看,大概有一点几的出入,这或许是饱和蒸汽压的计算公式差异带来的系统误差。
References:
https://mp.weixin.qq.com/s/2nxHVw0gLPqjg80QGQq6wQ
https://www.omnicalculator.com/physics/relative-humidity
https://bmcnoldy.earth.miami.edu/Humidity.html
Alduchov, O. A., and R. E. Eskridge, 1996: Improved Magnus' form approximation of saturation vapor pressure. J. Appl. Meteor., 35, 601–609.
August, E. F., 1828: Ueber die Berechnung der Expansivkraft des Wasserdunstes. Ann. Phys. Chem., 13, 122–137.
Magnus, G., 1844: Versuche über die Spannkräfte des Wasserdampfs. Ann. Phys. Chem., 61, 225–247.
Comments NOTHING