You need to enable JavaScript to run this app. Python实现Hardy Cross法求解管网结果不满足带出流节点水量守恒
优惠活动
大模型
产品
解决方案
定价
更多

Python实现Hardy Cross法求解管网结果不满足带出流节点水量守恒

管网不满足节点出流守恒的定位与修复方案
  • 最核心的bug是你给所有修正后的管段流量强制套了abs()取绝对值。Hardy Cross法的计算基础是带方向的流量值,管段流量的正负直接代表流向,所有环校正量的叠加、水头损失的符号计算都依赖这个正负值。你把修正后可能出现的负流量全部拍平为正值,等于强行把所有管段的流向固定成初始设定的方向,完全抹掉了环校正过程对流向的修正作用,从根源上破坏了节点水量平衡的计算基础。
  • 符号逻辑存在冗余错位。检查你环方程的水头损失项:比如a4的计算式开头多层嵌套负号,本质上是符号规则没有统一——Hardy Cross的环水头闭合方程要求,同一环内的管段水头损失,凡是流向和环定义的顺时针方向同向的取正,反向的取负,不需要在整个分子项外面额外套多层负号,很容易把符号搞反,最后导致环校正量算错,传递到节点上就会出现进出流量不匹配。
  • 缺少迭代过程的节点守恒校验。从迭代启动的第一步开始,你就没有对带出流的节点做过水量平衡校验:初始流量分配必须严格满足“节点所有管段的带符号流量之和 = 节点出流/入流流量”,后续每次迭代修正管段流量后,也应该同步核对节点平衡误差,现在你只把环校正量的大小作为迭代终止条件,哪怕环的闭合差够小,也可能因为流量符号错误导致节点出流不守恒。

具体修复步骤

  1. 删除所有管段流量赋值后的abs()函数,给每个管段提前定义统一的正向流向,反向流量直接保留负号参与后续计算,不要人为截断流量的方向信息。
  2. 重写所有环的水头损失分子项:严格按照统一的环方向规则判定每项的符号,去掉多层嵌套的冗余负号;同步核对每个公共管段的校正量叠加逻辑——比如同时属于环1和环2的BE管,两个环对它的校正量方向相反,需要按环的方向标记分别加减,这个部分你代码的叠加逻辑本身是对的,只是因为之前的abs()把符号搞乱了。
  3. 补上迭代终止的双校验条件:除了要求所有环的校正量绝对值小于0.001的阈值,还要遍历所有带出流的节点,计算节点的带符号流量和与节点出流值的差值,当这个差值也小于允许误差时再终止迭代。
  4. 修正代码里的语法笔误:你的打印语句print("P_AB = ",GIVEN[0][3]*1000,"L/s"缺少一个右括号,运行时会触发语法报错。

注:Hardy Cross法本身是靠环的水头闭合差迭代逼近解,只要全程保留流量的方向信息,初始分配满足节点守恒,最终结果自然会同时满足环闭合和节点出流平衡的要求,不需要强制把流量转成正值。

内容的提问来源于stack exchange,提问作者John Rey Cuaresma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 11:06:08