【发布时间】:2011-04-22 13:07:23
【问题描述】:
我想了解 Simulink 仿真引擎的工作原理。它是否使用离散事件模拟机制(那么如何处理连续时间?)?它是否依赖于基于静态循环的代码生成?还是?
【问题讨论】:
标签: matlab simulation simulink
我想了解 Simulink 仿真引擎的工作原理。它是否使用离散事件模拟机制(那么如何处理连续时间?)?它是否依赖于基于静态循环的代码生成?还是?
【问题讨论】:
标签: matlab simulation simulink
在第一个循环之前,它会计算出块的执行顺序(从不需要任何其他块输入的块开始)
每个周期,它根据输入和块的代码计算每个块的输出。每个块的代码都是静态的,它大部分在你把模型放在一起之前就已经存在了。 (我不知道块选项是否真的改变了代码,或者它们是否只在运行时评估,在每次迭代时。)
如果模拟步骤是可变的,则每个循环都会计算下一步的大小,主要基于模型变量的变化速度。它们变化得越快,步长应该越小,因此不会假定短暂的高导数持续时间长于应有的时间。 (我不知道这个计算的细节,也许其他人可以解释一下?)所以,“连续”模拟,或可变步长,仅意味着 Simulink 将在每个循环中对什么步长足够小进行有根据的猜测将时间量化误差保持在可接受的水平。在完全数字化的硬件(例如计算机的处理器)上,真正的连续模拟实际上是不可能的。
【讨论】:
我当然不是专家,但答案很可能是“视情况而定”。
Simulink 肯定会在某些事情上使用数值积分,而对于某些积分器,您最终会得到离散的时间步长。对于其他积分器,可以在模拟运行时更改时间步长 - 这对于模拟“刚性”方程组尤为重要。
【讨论】: