You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现隐式方程求解及明渠流量公式反算水深迭代代码

明渠水深隐式方程求解Python实现

问题背景

待求解隐式方程为:$y = \frac{5.172 \times (10 + 4.472y)^{0.4}}{10 + 2y}$,该式由明渠均匀流公式 $Q=\frac{1}{n}AR{2/3}S{1/2}$ 推导而来,其中流量、糙率、坡降、断面尺寸等参数为已知量,水深$y$为待求未知量,采用迭代法求解。

求解思路

  • 采用不动点迭代法,给定初始近似值$y_0$,反复代入方程右侧计算新的$y$值
  • 设置收敛阈值:当两次迭代结果的差值小于阈值时,判定为收敛,输出结果
  • 配置最大迭代次数,避免不收敛场景下出现无限循环

完整实现代码

def solve_water_depth(y0, tol=1e-6, max_iter=1000):
    """
    迭代求解明渠水深隐式方程
    :param y0: 初始水深近似值,单位与方程参数匹配即可
    :param tol: 收敛阈值,默认1e-6
    :param max_iter: 最大迭代次数,默认1000次
    :return: 收敛后的水深值,迭代次数
    """
    y_prev = y0
    for i in range(max_iter):
        # 代入隐式方程右侧计算新的y值
        numerator = 5.172 * (10 + 4.472 * y_prev) ** 0.4
        denominator = 10 + 2 * y_prev
        y_new = numerator / denominator
        # 判断是否收敛
        if abs(y_new - y_prev) < tol:
            return round(y_new, 6), i+1
        y_prev = y_new
    # 达到最大迭代次数仍未收敛
    raise RuntimeError(f"迭代{max_iter}次后仍未收敛,请尝试调整初始值或增大最大迭代次数")

# 调用示例
if __name__ == "__main__":
    # 可根据工程经验调整初始水深估计值
    initial_y = 0.5
    final_y, iter_num = solve_water_depth(initial_y)
    print(f"迭代{iter_num}次后收敛,求解得到水深为:{final_y}")

使用说明

  • 合理的初始值可大幅减少迭代次数,建议根据工程场景的常规水深范围设置initial_y
  • 若出现不收敛报错,可先检查方程参数是否匹配实际工况,再适当调大max_iter参数
  • 收敛阈值tol可根据精度需求调整,普通工程场景1e-4到1e-6即可满足要求

内容的提问来源于stack exchange,提问作者S P Vikraman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 05:54:01