Simulink仿真求助:状态导数非有限值报错问题排查
解决Simulink仿真中Transfer Fcn模块导数非有限值的报错
先来看你遇到的报错信息:
此前报错:‘时间2.084275时,模块‘project/Subsystem/Transfer Fcn’中状态‘1’的导数非有限值……’
近期报错:‘仿真运行时发生错误,仿真已终止。原因:时间3.3375时,模块‘project/Subsystem/Transfer Fcn’中状态‘1’的导数非有限值,仿真将停止。解中可能存在奇异点,若不存在,请尝试减小步长(减小Fixed-step size或收紧误差容限)’
结合你给出的系统配置和发现的传递函数问题,我可以明确告诉你:传递函数的符号错误是引发这个问题的核心原因。你提到子系统里的传递函数应该是-14/(s+14),但当前用的是+14/(s+14)——这种符号翻转会彻底改变系统的动态特性,很容易引入不稳定或者数值奇异的情况,直接导致仿真时状态导数出现无穷大/NaN,触发报错。
给你一步步的解决建议:
优先修正传递函数符号
打开project/Subsystem/Transfer Fcn模块,把分子从14改成-14,确保传递函数为-14/(s+14)。这是最关键的一步,根源问题解决了,大部分情况下报错就会消失。验证系统稳定性(可选但推荐)
修正后可以先做个简单的理论分析:这个传递函数的极点在s=-14,是稳定极点,系统本身是稳定的,理论上不会出现发散的情况,这也能帮你确认修正后的系统逻辑是对的。调整求解器参数(如果修正后仍报错)
要是改完传递函数还是遇到类似问题,再按照报错提示调整求解器设置:- 减小Fixed-step size:比如从当前的
0.01改成0.005或者更小,让仿真步长更精细,避免因步长过大导致的数值计算跳变; - 收紧误差容限:如果你的固定步长求解器支持误差控制,适当收紧容限参数,提升数值计算的精度。
- 减小Fixed-step size:比如从当前的
另外再帮你核对一下现有配置的合理性:
- 信号发生器的0.5振幅、0.1Hz方波输入没问题;
- PID控制器设置的10%超调量,建议修正传递函数后再验证一下参数是否适配新的系统动态;
- 20s的停止时间对于0.1Hz的方波来说,足够覆盖多个周期,配置合理。
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

