【问题标题】:How does Simulink simulation engine work?Simulink 仿真引擎如何工作?
【发布时间】:2011-04-22 13:07:23
【问题描述】:

我想了解 Simulink 仿真引擎的工作原理。它是否使用离散事件模拟机制(那么如何处理连续时间?)?它是否依赖于基于静态循环的代码生成?还是?

【问题讨论】:

    标签: matlab simulation simulink


    【解决方案1】:

    在第一个循环之前,它会计算出块的执行顺序(从不需要任何其他块输入的块开始)

    每个周期,它根据输入和块的代码计算每个块的输出。每个块的代码都是静态的,它大部分在你把模型放在一起之前就已经存在了。 (我不知道块选项是否真的改变了代码,或者它们是否只在运行时评估,在每次迭代时。)

    如果模拟步骤是可变的,则每个循环都会计算下一步的大小,主要基于模型变量的变化速度。它们变化得越快,步长应该越小,因此不会假定短暂的高导数持续时间长于应有的时间。 (我不知道这个计算的细节,也许其他人可以解释一下?)所以,“连续”模拟,或可变步长,仅意味着 Simulink 将在每个循环中对什么步长足够小进行有根据的猜测将时间量化误差保持在可接受的水平。在完全数字化的硬件(例如计算机的处理器)上,真正的连续模拟实际上是不可能的。

    【讨论】:

    • 谢谢。我也是这么想的。抱歉这个奇怪的问题,但你是怎么得到这个信息的?你有多大的信心?
    • @JLCC 不多。我有多年使用 Simulink 的经验,但这些信息来自推断并从文档中获取线索(那里有很多线索,但我从未找到简单的描述)。让我对我在这里所说的最有信心的是我对 s-functions 的有限知识,这些函数是你自己编写的代码块。我建议阅读这些内容,它们提供了有关正在发生的事情的见解。我所说的可变步长计算算法是非常低的置信度。但我很确定真正的连续模拟是不可能的,虽然不能参考
    【解决方案2】:

    我当然不是专家,但答案很可能是“视情况而定”。

    Simulink 肯定会在某些事情上使用数值积分,而对于某些积分器,您最终会得到离散的时间步长。对于其他积分器,可以在模拟运行时更改时间步长 - 这对于模拟“刚性”方程组尤为重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 2016-05-04
      • 2014-09-11
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多