我是靠谱客的博主 笨笨哑铃,最近开发中收集的这篇文章主要介绍“Derivative of state ‘1‘ in block ‘X/Y/Integrator‘ at time 0.55 is not finite“类问题解决办法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在MATLAB的simulink仿真时有时会遇到如下报错:

Derivative of state ‘1’ in block ‘X/Y/Integrator’ at time 0.55 is not finite.

这种报错是指在某个时间点处,某个值的运算达到了无穷大(或十分接近无穷大),以至于MATLAB将其视为数学上的“无意义”,不再予以计算。

解决这类问题的办法一般是:
1)查看建模——仿真设置,将“变步长”改成“定步长”(fixed-step),并将步长设置为小于0.001;
2)在求解器选项里把“自动”改为其他的求解器予以求解。

有些情况下这种“趋于无穷”的情况是由于步长过大、运算不精细造成的,所以方法1)有时会有效。但对于方法2),只有少数情况下修改了求解器能够解决问题,但大多数情况下出现无穷数值的情况决不仅仅是通过改变求解器就能解决的。

因此本文提出一种笔者新发现的解决方法:

点击simulink报错处的蓝色字体,将会自动定位至出现无穷大值的模块处。此时:
1)仔细观察并推导该模块所代表的物理量,如果其数学公式已知,则从表达式上推理是其中哪一项造成了无穷大的值;
2)针对造成无穷大的值的该项,上溯至该项的计算模块,即看看到底是哪一个模块是计算产生该项的;
3)在该项产生之后立即添加一个saturation模块进行限幅,所限制的上下限视实际硬件决定(可以先行估计)。

由于对模块添加了限幅,因此即使该项到达了无穷值,也依然会被限幅,不会再出现趋于无穷大的情况。

但该方法有使用条件:
1)显而易见,对该值进行限幅后,必须对整个系统影响不大,因此系统必须具有一定的鲁棒性;
2)限幅上下限的确定可以和实际相结合。

PS:有时simulink报错为“计算中出现奇点”,原理依然是分母除以了一个趋近于0的值,亦即系统中存在趋近于无穷的值。依然可以采用本文的方法解决。

此种方法的实际意义:在系统实际运行中,数学上有可能计算出无穷大的值,但由于实际硬件限制,往往存在限幅现象,因此实际上该限幅具有实际意义,能较好地反应实际硬件限制下的系统鲁棒性。

最后

以上就是笨笨哑铃为你收集整理的“Derivative of state ‘1‘ in block ‘X/Y/Integrator‘ at time 0.55 is not finite“类问题解决办法的全部内容,希望文章能够帮你解决“Derivative of state ‘1‘ in block ‘X/Y/Integrator‘ at time 0.55 is not finite“类问题解决办法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部