概述
Simulink Derivative of state...Integrator....is not finite
报错全文如下:
Derivative of state '1' in block 'Subsystem/Integrator1' at time 0.0 is not finite. The simulation will be stopped. There may be a singularity in the solution. If not, try reducing the step size (either by reducing the fixed step size or by tightening the error tolerances)
--------------------------分割------------------------------------
一. 最近做 关于电机+螺旋桨的Simulink仿真,模拟含电机环的螺旋桨推力扭矩。Solver为变步长,auto。仿真模型如下:
搭建模型之后仿真,出现报错:
二. 查阅资料,最初以为是出现了代数环,考虑添加Delay模块:
仿真正常运行了,
****----------------------------------****
三. 本以为解决了问题,但是当修改变步长为fixed时候(步长设0.001),又报错:
仿真终止在Delay结束的时候。(因为Delay设置为0.01s)
通过log selected signals,查看0~0.01s内的变量变化。发现在第 0 s时候,推力T与扭矩Q都是NaN。推测是因为:NaN作为输入,导致积分变量出现not finite。
回头查看公式,发现进速系数J的计算中:
在 0 s,积分器取初始值,默认值零;
则角速度为零-->转速n为零-->出现了进速系数J0分母为零,J0为NaN-->T、Q为NaN。
J0
四 . 最终解决办法:
在角速度的那个 积分器初始值取一个极小数(如0.0001),不影响全局。
这样最开始添加的 Delay不用,也可以。
总结:
- 仿真出现故障时候,可通过log selected signals,分析查看信号的具体变化过程。
- 出现Simulink Derivative of state...Integrator....is not finite时候,检查在该时刻下,是否出现了分母为零?或者零比零的情况。
- Simulink仿真时候,是有计算优先级的。一般含有闭环系统,会先从积分器开始,积分器有Initial condition。
---------------------------------
更新:
Simulink仿真中,由于初始条件一般为0。当存在除法时候,很容易出现NaN。
一个更加通用的解决办法是:给分母加上eps。(eps是matlab内置的函数,表示浮点相对精度。)
参考:
施法前摇:漫谈Simulink:真假代数环
最后
以上就是迷路微笑为你收集整理的matlab nan变成0_Matlab/Simulink 仿真出现积分状态变量数据奇异-解决办法的全部内容,希望文章能够帮你解决matlab nan变成0_Matlab/Simulink 仿真出现积分状态变量数据奇异-解决办法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复