【未解决】在时间 0.020000000000004774 处,模块 ‘xxx‘ 中状态 ‘1‘ 的导数不是有限值。仿真将停止。解中可能存在一个奇异点。如果没有,请尝试减小步长

文章讲述了在使用Simulink进行仿真时遇到的导数非有限值错误,探讨了多种可能的解决方法,如调整步长、更换求解器、添加特殊模块等,但强调了这些方法并未从根本上解决问题,需要深入检查模型结构和公式准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行仿真时出错,仿真终止

原因:

  • 在时间 0.020000000000004774 处,模块 'S1_6block/Integrator' 中状态 '1' 的导数不是有限值。仿真将停止。解中可能存在一个奇异点。如果没有,请尝试减小步长(通过减小固定步长或通过收紧误差容限) 

组件:Simulink | 类别:Block 错误

【解决方法】

1、从0.001开始仿真——可能在最开始处有一个极小值或分母为0。

不是该原因未解决。

2、减小步长——通过减小固定步长或通过收紧误差容限。

收紧误差后,甚至报错时间提前。

未解决。

3、更换求解器。

不是该原因未解决。

4、这两种方法都是治标不治本。

4.1、加入 memory / delay 模块 ; 或 “ Saturation ” 模块 ;或“ Avoid division by zero ” 模块。

未解决。

4.2、add eps ; 或积分模块初始值改为eps。

未解决。

5、检查模型是否有错误。

5.1、模型输入输出是否漏连。

未解决。

5.2、模型中公式以及其中单位换算是否正确。

未解决。

### Simulink 仿真状态导数非有限值问题解决方案 当遇到像 `freedom3_own/Subsystem3/Subsystem2/Integrator1` 这样的模块,在时间状态导数不是限值时,仿真的确会停止运行。这可能是由于解中奇异点引起的问题[^1]。 对于此类情况,可以采取以下措施来解决问题: #### 修改步长设置 将仿真设置由“变步长”更改为“定步长”,并设定较小的步长值(建议小于0.001)。此操作有助于提高数值稳定性,从而避免因过大的计算跨度而导致的结果异常[^4]。 ```matlab set_param('freedom3_own', 'Solver', 'FixedStep'); set_param('freedom3_own', 'FixedStep', 'auto'); % 自动选择合适的固定步长 % 或者手动指定一个小于0.001的具体步长值 ``` #### 调整求解器配置 除了改变步长外,还可以考虑调整求解器的选择。在求解器参数选项内,可尝试切换至其他类型的求解算法而非默认的自动模式。不同的求解器可能对特定模型有更好的适应性和收敛性能。 ```matlab set_param(gcs,'Solver','ode45') % 切换到 ode45 求解器作为示例 ``` #### 收紧误差容限 适当减小相对误差和绝对误差容忍度也能帮助改善模拟精度,减少出现无限大或NaN的可能性。不过需要注意的是,过度严格的误差控制可能会增加运算时间和复杂度。 ```matlab set_param(gcs,'RelTol','1e-6') set_param(gcs,'AbsTol','auto') ``` 通过上述方法之一或多者的组合应用,通常能够有效缓解乃至彻底消除Simulink仿真过程中遭遇的状态导数不为有穷值的情况,进而保障整个系统的稳定运作。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值