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

使用Sundials求解化工厂大型DAEs时遇收敛失败问题

问题描述

我尝试用Sundials求解大规模微分代数方程组(DAEs),系统包含代数变量和微分变量。为获取初始条件,我用Ipopt和JuMP求解不含微分项的方程组:代数变量初始条件由Ipopt给出,微分变量初始条件设为0。Ipopt成功求解,提示:

EXIT: Optimal Solution Found.

但用Sundials求解时失败,报错如下:

[IDAS ERROR]  IDASolve
  At t = 0 and h = 6.67572e-010, the corrector convergence failed repeatedly or with |h| = hmin.

retcode: ConvergenceFailure
Interpolation: 3rd order Hermite
t: 1-element Vector{Float64}:
 0.0
u: 1-element Vector{Vector{Float64}}:
 [1.2206393830204552, 665.4567421778746, 665.4567421778746, 665.4567421778746, 0.2392717933819864, 0.23927179338198643, 0.2392717933819864, 30.000000114765616, 30.000000114765616, 30.000000114765616  …  1.9999743918584891, 1.9999743918584985, 15.038245336256479, 15.038245336256479, 15.038245336256479, 15.038245406882618, 15.038245406882618, 15.038245406882618, 2.9999986304798587, 308.2267147190701]

已确认微分方程定义正确,单罐模型的小系统能正常求解,但增加一个罐后无法运行,求解决思路。

可行的解决方向
  • 验证初始条件相容性:Ipopt得到的代数变量初始值和设为0的微分变量可能不满足DAEs的相容性约束。DAEs要求初始状态不仅满足代数方程,还要满足对代数方程求导后结合微分方程得到的隐式条件。可以用DAE求解器自带的相容性检查工具,或者手动推导相容性条件,让Ipopt同时求解满足该条件的初始值(包括微分变量)。
  • 调整Sundials求解参数:
    • 手动设置更大的初始步长,避免求解器一开始就尝试极小步长导致收敛失败;
    • 调整相对容差(rtol)和绝对容差(atol),适当放宽容差可能帮助收敛;
    • 更换线性求解器,比如将默认求解器换成KLU、SuperLU_DIST这类更适合大规模系统的选项。
  • 处理系统刚性:多罐系统的刚性通常比单罐更强,确认IDAS是否启用了适配刚性系统的预条件器,或者切换到更适合刚性DAE的求解配置。
  • 变量缩放:观察到系统中变量数量级差异极大(如0.2和600+),这种差异会影响数值稳定性。对变量进行缩放,让所有变量的数量级趋近一致,能有效改善求解器的收敛表现。
  • 检查DAE指标:确认系统的微分指标,若指标高于1,IDAS默认配置难以处理,需要将系统降阶到指标1,或者使用支持高指标DAEs的求解策略。

内容的提问来源于stack exchange,提问作者Raggen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 01:13:00