Simulink模型仅自动选求解器可运行,指定求解器报错求助
问题场景
我有一个复杂的Simulink模型,仅在选择自动求解器时可正常运行。为保证不同实验的一致性,需要固定求解器,但指定求解器时出现如下错误:
包含<>的代数环中的代数状态在时间10.39000000000012处计算结果为Inf或NaN。解决方案中可能存在奇点。
若模型本身无误,请尝试减小步长(减小固定步长或收紧误差容限)或调整代数环变量的初始猜测值。
具体解决步骤
调整求解器步长与误差容限
若用固定步长求解器,直接减小Fixed step size数值(例如从0.1修改为0.01);若用变步长求解器,收紧Relative tolerance和Absolute tolerance参数(比如把相对容限从1e-3调至1e-5),让求解器更精细处理代数环的迭代计算。优化代数环初始猜测值
定位报错代数环涉及的模块,手动设置初始输出值:右键模块→Mask→Edit Mask(封装模块),或在模块参数中找到初始条件选项,输入接近稳态值的初始猜测,帮助求解器快速收敛到合理结果。检查并简化代数环
用Simulink的Model Advisor运行“Identify algebraic loops”诊断,定位具体代数环结构。若可行,添加Memory模块打破不必要的代数环;或用Algebraic Constraint模块替代直接反馈,提升求解器处理约束的效率。切换兼容的固定求解器类型
自动求解器会匹配模型特性选求解器,固定时优先尝试同类型求解器:若自动求解器选变步长ode45,可先试固定步长的ode4;若模型是离散连续混合类型,选择ode14x(固定步长变阶求解器)可能更适配。
内容的提问来源于stack exchange,提问作者Varun Kotian

