matlab simulink中积分器的积分区间下限t0是怎么设定的?
但结果就像图里的一样,大于1了。
看了help,说积分器的积分区间是t0到t,并不是想象的从0到t。想问一下这t0是指什么,怎么设定? 展开
楼上的回答有点想当然了(说的比较直接,抱歉)。
这个问题是由浮点数的表示精度引起的。尽管理论上积分结果不会大于1,但会很接近1,由于浮点数的表示精度所限,在t较大时,就会等于1,而只要等于积分器的饱和值,Saturation port就会输出1。
积分器的积分区间t0的问题:是指模型仿真参数设置中,开始时间你设的不是0。
附加讨论:关于何时Saturation port会输出1:
照理说,应该是exp(t)<=eps,这样算出来t大约为36秒,但从仿真结果看,在十几秒的时候就饱和了。我的理解,这可能受到仿真参数中误差限制的影响——默认绝对误差为1e-6,这样求出来-log(1e-6)大约是13.8秒。当然,结果还会受到相对误差的影响,更深入的分析您感兴趣的话可以继续,我只给提供一点思路,抛砖引玉。
试了一下,你说的结果大于1的情况确实会出现。这是数值计算不能避免的事,可以使用我上面所说的误差控制将其控制在很小的范围(例如10^-14量级)。
如果关注的不是可以将误差控制到多么小,而是在意误差的极性,那就只能建议你采用更好的表达方式了——例如,对于现在研究的这个问题,你既然知道积分得到的结果是1-e^(-t),那么不妨直接用fcn模块实现这个表达式。
前面所说的开始时间t0,不是指Ramp模块的,而是整个模型的仿真时间中的Start time。尽管这个t0对解决你的问题没有什么作用,但既然你的提问是关于t0的,那就有必要再说明一下。