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

使用GEKKO模拟index-1 DAE方程组出现Solution Not Found错误求助

问题排查

  • 代码逻辑错误:m.solve(disp=False)执行后新增了m = GEKKO(remote=False),会直接覆盖已构建的模型实例,该行完全无效,若需要本地求解需在创建模型初始就指定remote=False参数。
  • 初始值设置不合理:l_0、l_1、l_2、u_0等变量初始值设为0,导致多个代数方程初始时刻左右两端残差极大,比如第二个方程左端初始值为0,右端因I初始为30计算结果为正数,初始约束矛盾,求解器无法找到可行初始点。
  • 方程存在强非线性与格式问题:第6个方程中微分项u_0.dt()与多个变量相乘,多个方程存在大量变量乘积项,非线性极强,且部分方程括号不匹配,需确认公式书写是否正确,同时需确认DAE实际指数是否为1,高指数DAE无法直接用IMODE4求解。
  • 参数尺度差异过大:动力学参数跨度过大,k_i为1e15量级,k_trM为1e-6量级,数值稳定性差,容易导致求解器数值溢出。
  • 求解器配置不合理:未开启调试输出无法定位具体错误,默认求解器、收敛容差配置不匹配强非线性DAE求解需求。

解决建议

  • 修正代码逻辑:删除solve后的m = GEKKO(remote=False)代码,若需要本地求解,将模型创建行修改为m = GEKKO(remote=False)。
  • 重新设置变量初始值:通过初始时刻的已知参数手动估算合理初始值,不要全设为0。比如初始时刻M=70,可先计算p初始值为70/M0,再代入第二个方程反算l_0的初始值,其余代数变量同理通过初始约束估算初始值,大幅降低初始残差。
  • 核对方程正确性:逐一核对每个方程的项、系数、符号是否与理论公式一致,修正括号等语法问题,若DAE指数高于1,需先通过变量替换等方式降为指数1再求解。
  • 做无量纲化处理:对变量、参数做无量纲缩放,将所有量的量级控制在1e-3到1e3之间,避免数值不稳定问题。
  • 调整求解器配置:
    • 先将solve的disp参数设为True,查看具体报错信息定位问题
    • 切换求解器,可尝试m.options.SOLVER = 1(APOPT求解器)或m.options.SOLVER = 3(IPOPT求解器)
    • 适当放宽收敛容差,例如设置m.options.RTOL = 1e-3、m.options.ATOL = 1e-6,跑通后再逐步收紧容差
    • 若仍无法求解,可先使用稳态模式计算初始点:先设置m.options.IMODE = 7求解稳态,再切换为IMODE=4求解动态过程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:45:03