尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
彭曼公式推导全解析:从能量平衡到饱和水汽压斜率,一次算清开放水面蒸发
简介这份资源围绕彭曼公式的完整推导过程展开面向水文、气象、农业灌溉及水资源管理方向的学习者与研究人员帮助读者从能量守恒与质量守恒出发理解开放水面蒸发量估算公式的来龙去脉。内容从短波与长波净辐射、水体与大气对流热交换、汽化潜热与水体密度等基本项入手逐步推导能量平衡方程并引入饱和水蒸气压随温度变化的斜率Δ借助Magnus公式与经验公式估算Δ值最终将蒸发问题转化为可由太阳辐射、气温、风速和相对湿度等常规气象参数直接计算的形式。资源包共1个docx文件约24KB以文档形式完整呈现公式推导步骤与参数说明便于对照阅读和笔记整理。目前已有3740人学习下载适合希望系统掌握彭曼公式原理、补齐推导细节并应用于作物需水估算、水库蒸发损失评估等场景的读者参考。1. 彭曼公式推导从能量平衡到饱和水汽压斜率一次把开放水面蒸发算明白做灌溉调度或者水库蒸发损失评估时绕不开的一个东西就是开放水面蒸发量。仪器直接测当然最准但蒸发皿数据要么缺、要么代表性差很多时候还是得靠公式算。彭曼公式就是干这个的——它把能量平衡和质量传输两条线拧在一起用净辐射、风速、气温、相对湿度这几个常规气象站就能拿到的量估算出开放水面的蒸发速率。这套推导过程在不少教材里被压缩成几行“显然可得”但真到自己动手复现时饱和水汽压斜率 Δ 怎么来的、对流热交换系数 KH 和 KE 的比值为什么能简化成干湿表常数 γ、Monteith 后来加的冠层导度到底改了什么这些细节才是决定你能不能把公式用对的关键。下面我把这份推导从头到尾拆一遍适合水文、气象、农业工程方向需要落地计算蒸散发的从业者。2. 能量平衡方程怎么列K、L、H 三项的物理含义与符号约定2.1 从水面能量收支出发推导的起点是一个很朴素的想法开放水面在单位时间内吸收的能量要么存起来要么散出去。忽略水体与周边环境比如皿壁、土壤的热交换只盯着水面和大气之间的交换能量平衡可以写成K L - H E · lv · rw这个式子里K 是短波净辐射输入L 是长波净辐射输入单位都是 cal/cm²·day。H 是水体向大气的对流热交换同样用 cal/cm²·day。等式右边是蒸发消耗的能量E 是蒸发量cm/daylv 是汽化潜热cal/gmrw 是水的密度g/cm³。把右边展开E 乘上 lv 再乘 rw量纲正好落到 cal/cm²·day和左边三项对齐。这里有个容易翻车的地方很多人第一次看这个方程会把 K 和 L 当成“总辐射”直接代进去。实际上 K 是净短波也就是入射短波减去反射短波L 是净长波是大气向下长波减去水面向上长波。如果你手头只有总辐射表读数得先按反照率折算不然算出来的 E 会偏大。常见做法是开放水面反照率取 0.050.08具体取值看水质和太阳高度角。2.2 对流热交换 H 与水面温度 Ts 的困境H 这一项描述的是水体和大气之间的显热交换形式很直接H KH · va · (Ts - Ta)KH 是对流热交换系数va 是风速Ts 是水面温度Ta 是大气温度。物理意义很清楚水面和大气温差越大、风越大显热交换越猛。但问题在于Ts 这个量在常规气象观测里基本拿不到。气象站测的是百叶箱气温 Ta水面温度得靠红外测温或者浮标长期连续数据很少。这就逼着推导往下走一步用饱和水汽压斜率 Δ 把 Ts - Ta 替换掉。替换的逻辑是饱和水汽压 e* 是温度的函数在 Ta 附近做一阶近似斜率 Δ 可以写成 (es - ea) / (Ts - Ta)。这里 es 是水面温度 Ts 对应的饱和水汽压ea 是气温 Ta 对应的饱和水汽压。把这个关系反解Ts - Ta (es - ea) / Δ代回 H 的表达式就得到H KH · va · (es - ea) / Δ这一步是整个推导的枢纽。它把“需要水面温度”变成了“需要饱和水汽压差”而饱和水汽压差可以用气温和相对湿度算出来。Δ 本身也有经验公式后面会单独说。提示Δ 的近似只在 Ts 和 Ta 差别不太大时成立。如果水面温度比气温高出好几度比如夏季午后浅水塘这个线性近似会引入误差算出来的 H 偏小E 偏大。3. 饱和水汽压斜率 Δ 的两种算法查表法和经验公式法3.1 Δ 的定义与量纲Δ 的定义是饱和水汽压对温度的导数单位是 kPa/°C 或者 mbar/°C取决于你用哪套单位制。在这份推导里Δ 出现在分母上用来把饱和水汽压差换算成温度差。它的数值随温度升高而增大也就是说同样一个饱和水汽压差在高温时对应的温度差更小显热交换更弱。实际计算时Δ 有两种拿法。一种是查表气象手册里通常有 Ta 从 0°C 到 40°C、步长 1°C 的 Δ 表直接插值就行。另一种是用经验公式算适合写进代码里批量处理。3.2 经验公式的实现与参数说明推导原文给了一个 Δ 的计算式Δ 2508.3 / (T 237.3)² · exp(17.3 · T / (T 237.3))这个式子里 T 是气温单位 °C。2508.3 和 237.3 这两个常数来自 Magnus 形式的饱和水汽压公式17.3 也是同一套系数里的。不同文献里这组系数略有差异比如有的用 17.27 和 237.7算出来的 Δ 在小数点后第三位才会有差别对蒸发量估算的影响可以忽略。用 Python 实现的话大概是这样import math def delta_svp(T): 计算饱和水汽压斜率 Δ T: 气温单位 °C 返回: Δ单位 kPa/°C近似 # Magnus 形式系数与推导原文一致 numerator 2508.3 denominator (T 237.3) ** 2 exponent 17.3 * T / (T 237.3) delta (numerator / denominator) * math.exp(exponent) return delta # 示例气温 25°C 时的 Δ T_air 25.0 print(fΔ at {T_air}°C {delta_svp(T_air):.4f} kPa/°C)这段代码里numerator和denominator对应公式里的分子分母exponent是指数项。注意math.exp里的参数不能写成17.3 * T / (T 237.3)之外的形式括号位置错了结果会差很多。我一般会在函数里加一个温度范围检查T 低于 -20°C 或者高于 50°C 时给个警告因为 Magnus 公式在这个范围外精度下降。注意如果你用的气象数据里气温是开尔文先减 273.15 再传进来。直接传开尔文进去分母会变成 (T237.3)² 里 T 是 298 而不是 25算出来的 Δ 完全不能用。4. 从 H 到彭曼公式质量传输方程与干湿表常数的引入4.1 质量传输方程搭桥有了 H 的替换形式下一步是把蒸发量 E 和对流热交换 H 联系起来。推导里用了一个质量传输形式的蒸发方程E KE · va · (e*s - ea)这里 KE 是质量传输系数ea 是实际水汽压。这个式子的逻辑是蒸发速率和风速、饱和差成正比。把它改写一下把 (e*s - ea) 单独拎出来(e*s - ea) E / (KE · va)然后把这个表达式代回 H 的式子里。H 的表达式里有一项是 KH · va · (es - ea) / Δ把 (es - ea) 换成 E / (KE · va)就得到H (KH / Δ) · (E / KE) - (KH · va / Δ) · (e*a - ea)这一步的代数操作看着绕但目的很明确把 H 表示成 E 的线性函数这样代回能量平衡方程后E 就只出现在等式两边可以解出来。4.2 干湿表常数 γ 与 KH/KE 比值的简化推导到后面会出现 KH / KE 这个比值。原文通过扩散系数比值的假设把它简化成KH / KE γ · lv · rw其中 γ 就是干湿表常数定义为γ ca · P / (0.622 · lv)ca 是空气热容量P 是大气压0.622 是水汽和干空气的分子量比。这个简化成立的前提是假设大气稳定、水汽扩散系数和动量扩散系数之比为 1。实际大气里这个比值在 0.8 到 1.2 之间波动但大多数工程计算里取 1 就够了。把 KH / KE γ · lv · rw 代进去经过几步整理就得到彭曼公式的常见形式E [Δ · (K L) / (lv · rw) γ · KE · va · (e*a - ea)] / (Δ γ)这个式子里分子第一项是辐射项第二项是空气动力学项。分母 Δ γ 是权重因子温度越高 Δ 越大辐射项的权重就越大风速越大空气动力学项的贡献就越明显。用 Python 把整个计算流程串起来def penman_evaporation(K, L, T_air, RH, va, P101.3): 用彭曼公式估算开放水面蒸发量 K: 短波净辐射cal/cm2/day L: 长波净辐射cal/cm2/day T_air: 气温°C RH: 相对湿度0-1 va: 风速m/s P: 大气压kPa 返回: Ecm/day lv 597.3 - 0.57 * T_air # 汽化潜热cal/gm随温度微调 rw 1.0 # 水的密度g/cm3 ca 0.24 # 空气热容量cal/g/°C gamma ca * P / (0.622 * lv) # 干湿表常数 delta delta_svp(T_air) # 饱和水汽压斜率 # 饱和水汽压 e*a用 Magnus 公式 e_star 0.6108 * math.exp(17.27 * T_air / (T_air 237.3)) # kPa ea RH * e_star # 实际水汽压 # 质量传输系数 KE 的简化取值实际应用中常合并到空气动力学项 KE 0.26 # 经验系数随下垫面和风速范围调整 radiation_term delta * (K L) / (lv * rw) aero_term gamma * KE * va * (e_star - ea) E (radiation_term aero_term) / (delta gamma) return E # 示例计算 K_val 300.0 # cal/cm2/day L_val -50.0 # 长波净辐射夜间为负 T_val 25.0 RH_val 0.6 va_val 2.0 E_val penman_evaporation(K_val, L_val, T_val, RH_val, va_val) print(f估算蒸发量 E {E_val:.4f} cm/day)这段代码里lv用了随温度线性变化的近似比固定 597.3 更准一点。gamma的计算直接套定义式注意 P 的单位是 kPa和 ca 的单位要匹配。KE这里给了一个经验值 0.26实际应用中这个系数和风速测量高度、下垫面粗糙度有关不同文献取值在 0.2 到 0.35 之间。如果你有蒸发皿实测数据可以用它反推一个适合当地条件的 KE。提示空气动力学项对风速很敏感va 的测量高度如果是 2m直接代入如果是 10m需要按对数风廓线折算到 2m否则算出来的 E 偏大。5. Monteith 修正与冠层导度从水面蒸发到植被蒸腾5.1 大气导度 Cat 的引入彭曼公式原本是针对开放水面的但农业上更关心的是作物蒸腾。Monteith 的修正思路是把传输过程用导度来表示。大气导度 Cat 定义为Cat va / (6.25 · {ln[(zm - zd)/zo]}²)zm 是风速测量高度zd 是零平面位移取 0.7 倍植被高度zo 是粗糙度高度取 0.1 倍植被高度。这个式子把风速和地表粗糙度挂上了钩植被越高、越粗糙Cat 越小同样的风速下传输效率越低。KH 和 KE 都可以用 Cat 表示代入之后对流热交换 H 变成H ca · ra · Cat · (Ts - Ta)这里 ra 是空气密度。这一步简化假设了热量扩散系数和动量扩散系数之比为 1。5.2 冠层导度 Ccan 与 Penman-Monteith 方程植被蒸腾和开放水面蒸发最大的区别在于水汽从叶片气孔出来要先穿过冠层内部的阻力再进入大气。冠层导度 Ccan 描述的就是气孔这一侧的传输能力。总导度 Ct 是大气导度和冠层导度的串联Ct Cat / (1 Cat / Ccan)把这个关系代进蒸发方程经过和彭曼公式类似的整理步骤得到 Penman-Monteith 方程ET [Δ · (K L) / (lv · rw) ca · ra · Cat · (e*a - ea)] / [Δ γ · (1 Cat / Ccan)]和彭曼公式比分母里多了一个 (1 Cat / Ccan) 因子。当 Ccan 远大于 Cat 时比如水分充足、气孔全开这个因子接近 1方程退化成彭曼形式当 Ccan 变小时干旱胁迫、气孔关闭分母变大ET 被压低。这就是 Penman-Monteith 能反映水分胁迫的机制。用相对湿度表达的话ea - ea (1 - Wa) · eaWa 是相对湿度。代入后ET [Δ · (K L) / (lv · rw) ca · ra · Cat · (1 - Wa) · e*a] / [Δ γ · (1 Cat / Ccan)]这个形式在写代码时更顺手因为相对湿度是常规观测项。5.3 输入数据要求与时间尺度的影响Penman-Monteith 需要的输入包括气温、净辐射、风速、植被高度、相对湿度。其中 Δ、ca、ra 这些参数可以从气温和气压推出来不需要额外观测。但时间尺度很关键用小时数据算出来的 ET 和用日平均数据算出来的可能差 20% 以上。原因是蒸发过程中辐射、风速、湿度之间有非线性交互日平均会把夜间高湿低辐射和白天低湿高辐射平均掉丢失信息。原文里提到一个案例某玉米带用水模型用小时尺度气象数据驱动 Penman-Monteith再拿 ET 去推土壤水分最后做干旱严重程度指标。这个链条里如果时间尺度降到日土壤水分模拟的误差会明显放大。我自己的经验是做灌溉决策至少要用小时数据做长期水平衡可以用日数据但要对结果做偏差校正。6. 避坑与排查彭曼公式落地时最容易翻车的五个地方6.1 净辐射 K L 的符号和单位现象算出来的 E 是负数或者大得离谱。原因K 和 L 的符号约定不统一。有的数据集里长波净辐射 L 已经是“净”值夜间为负有的给的是向下长波和向上长波分开需要自己相减。单位也可能是 MJ/m²/day 而不是 cal/cm²/day1 MJ/m²/day ≈ 23.9 cal/cm²/day。解决先确认数据字典里 K 和 L 的定义。如果是 MJ/m²/day统一乘 23.9 转成 cal/cm²/day。夜间 L 为负是正常的但 K L 不能长期为负否则检查反照率取值。6.2 Δ 的计算温度用错现象Δ 值偏大或偏小导致辐射项和空气动力学项权重失衡。原因把开尔文温度直接代进 Magnus 公式或者用了华氏温度没转换。解决在函数入口加断言T 必须在 -20 到 50 之间。如果数据源是开尔文先减 273.15。6.3 风速高度未折算现象用 10m 风速代入算出来的 E 比蒸发皿实测高出一大截。原因彭曼公式里的 va 默认是 2m 高度风速。10m 风速通常比 2m 高 20%30%直接代入会放大空气动力学项。解决用对数风廓线折算va2 va10 · ln(2/zo) / ln(10/zo)zo 取 0.010.03m水面或短草。6.4 干湿表常数 γ 的单位不匹配现象γ 算出来是 0.066 还是 66拿不准。原因ca 的单位可能是 cal/g/°C 也可能是 J/g/°CP 的单位可能是 kPa 也可能是 mbar。解决统一用 cal/g/°C 和 kPa算出来的 γ 大约在 0.060.07 kPa/°C。如果 γ 是 66 这个量级说明 P 用了 mbar 而 ca 用了 cal差了一个 10 的因子。6.5 冠层导度 Ccan 取值过于随意现象Penman-Monteith 算出来的 ET 在干旱期没有明显下降。原因Ccan 给了固定值没有随土壤水分或叶水势变化。解决Ccan 应该是一个动态量。常见做法是用土壤水分胁迫系数乘潜在冠层导度或者用叶水势经验关系。如果只是做潜在蒸散发估算Ccan 取 0.010.02 m/s 量级如果做实际蒸腾必须引入水分限制。7. 把推导变成可复用的计算模块参数标定与验证的一个习惯推导看懂了代码跑通了接下来最实际的一步是拿本地蒸发皿数据标定 KE 或者 Ccan。我一般会这么做先找一段有蒸发皿实测 E_pan 和同步气象数据的时段用彭曼公式算 E_calc然后看 E_calc / E_pan 的比值。如果比值稳定在 0.7 左右说明公式系统性偏高可能是 KE 取大了如果比值随季节漂移那多半是辐射项的参数需要按季节调整。标定的时候把 KE 或者 Ccan 当成一个待拟合参数用最小二乘或者简单的网格搜索。下面这段代码演示了用网格搜索标定 KE 的过程import numpy as np def calibrate_KE(K_arr, L_arr, T_arr, RH_arr, va_arr, E_pan_arr): 用蒸发皿实测数据标定质量传输系数 KE 输入均为等长数组 返回最优 KE 和对应的 RMSE best_KE None best_rmse float(inf) for KE in np.arange(0.10, 0.50, 0.01): E_calc [] for i in range(len(T_arr)): E penman_evaporation(K_arr[i], L_arr[i], T_arr[i], RH_arr[i], va_arr[i]) # 注意penman_evaporation 里 KE 是硬编码的 # 实际使用时把 KE 作为参数传进去 E_calc.append(E) rmse np.sqrt(np.mean((np.array(E_calc) - E_pan_arr) ** 2)) if rmse best_rmse: best_rmse rmse best_KE KE return best_KE, best_rmse这段代码的逻辑很直白遍历 KE 的候选值每个值算一遍蒸发量和实测比 RMSE取最小的那个。实际用的时候要把penman_evaporation函数改成接受 KE 参数不然网格搜索不起作用。标定出来的 KE 只适用于和标定期气象条件相似的时段换季节或者换地点要重新标。验证环节我习惯做两件事一是画散点图看 E_calc 和 E_pan 的偏离是否随某个变量比如风速或者温度有系统趋势二是算纳什效率系数如果 NSE 低于 0.6说明公式结构或者参数还有问题不能直接拿去用。从那以后我每次部署蒸散发计算模块都强制走一遍“标定—验证—残差诊断”的流程哪怕只是换个数据集也不敢跳过。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

C++模拟ATM取款机源码解析:面向对象设计与现代改造指南

C++模拟ATM取款机源码解析:面向对象设计与现代改造指南

简介:这份使用C语言编写的模拟ATM取款机系统源代码,面向需要完成面向对象课程设计、或对银行系统模拟感兴趣的C初中级学习者。程序围绕ATM和consumer两个核心类展开,完整实现用户登录、密码核对与修改、取款、余额查询、退出系统以及多次输错…

📅 2026/10/24 18:28:21
Java实验环境搭建全攻略:JDK版本、Applet兼容与经典排错

Java实验环境搭建全攻略:JDK版本、Applet兼容与经典排错

简介:这是一份面向高校Java课程教学的实验指导书,紧紧围绕《Java语言》课程68学时的上机实践安排,将内容划分为Java基础、Java核心和企业级应用选学三大模块,便于不同阶段学习者按需选用。全书共有八个实验,前六个实验…

📅 2026/10/24 18:28:21
离散数学第三版核心内容解析:集合、图论与逻辑的计算机应用

离散数学第三版核心内容解析:集合、图论与逻辑的计算机应用

简介:《离散数学(西电第三版)》教材 PDF 及配套课后习题参考答案,主要面向计算机科学与技术、软件工程、信息技术等专业学生,以及需要夯实离散数学基础的考研人群。内容覆盖集合论、关系与函数、图论、组合数学、数理逻…

📅 2026/10/24 18:28:21
MORE NEWS

更多资讯

📰

从制度到行动:业务连续性管理办法的RTO/RPO与演练实践

简介:这是一份可直接落地的业务连续性管理办法文档,主要面向金融类服务平台、企业风险管理与运维团队,用于构建覆盖事前预防、事中处置、事后恢复的完整机制。压缩包内仅含1个docx文件,体积约27KB,轻量实用&#xff0c…

📰

Now Playing 检测不到歌曲?5 大音频设备与平台切换排查技巧

【免费下载链接】now-playing-service 一款全能的「正在播放」歌曲展示工具。支持检测 20 款音乐软件的歌曲信息,内置精美歌曲组件、歌词组件、播放器,提供 API 接口。适配 OBS 等直播软件以及日常桌面使用。 项目地址: https://gitcode.com/…

📰

网络分析仪校准全解析:12项误差模型与Smart Cal实践

简介:面向射频与微波测试工程师、仪器操作人员及相关专业师生的校准操作文档,围绕Keysight E5080B网络分析仪展开,并兼顾多系列统一界面下的基本校准流程。内容从扫描类型、频率范围、扫描点数、中频带宽与输出功率等基本设置切入&#xff0c…

📰

WorkBuddy_新建任务与工作模式13_Plan模式的完整流程

Plan模式的完整流程 摘要 Plan模式是当前主流AI编程助手(如Cursor、Claude Code、Cline等)中一种非常重要的工作机制:在真正动手修改代码之前,先让AI产出一份可审阅的执行方案,由人类确认或调整后再落地执行。本文将围…

📰

基于SSM的机房管理系统源码:设备台账与IP资源全流程管理

简介:这份资源面向计算机相关专业学生与数据库课程设计者,提供一套完整的学院机房管理系统数据库设计方案,帮助解决从需求分析到SQL落地的全流程实践问题。压缩包共3个文件,包含2个doc文档与1个sql脚本,整体约155KB&am…

📰

Stewart平台MATLAB仿真:逆解、动力学与实时可视化全流程实现

简介:本资源是一份面向机器人控制与并联机构研究者的MATLAB实践指南,聚焦Stewart六自由度并联平台的运动学逆解建模、牛顿-欧拉法动力学方程推导及Simscape Multibody三维联合仿真,有效解决奇异位形识别、轨迹规划失稳、雅可比矩阵计算偏差等…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬