【问题标题】:Why would an interpreted MATLAB function block be evaluated twice in Simulink?为什么解释的 MATLAB 功能块会在 Simulink 中计算两次?
【发布时间】:2012-07-31 09:18:22
【问题描述】:

我有一个包含以下子系统的 Simulink 模型。

bm_train_adapter 块将调用同名的 MATLAB 函数,将所有输入参数传递到单个向量中。

子系统的采样时间为 900(秒),这就是为什么所有信号都以红色着色(对于离散信号)。

但是,在调试器中,我观察到 bm_train_adapter 函数在每个模拟时间步被调用两次。这会产生非常错误的结果,因为该函数包含副作用。

为什么 Simulink 在每个时间步内多次调用我的解释型 MATLAB 函数?我怎样才能防止这种情况发生?

【问题讨论】:

    标签: matlab simulation simulink


    【解决方案1】:

    我认为这是因为您的求解器设置。在您的Configuration Parameters 窗口中,查看Solver Options 窗格。

    我相信 discreteode1 求解器每个时间步都会调用一次。 ode2 将在每个时间步调用两次,ode4 将在每个时间步调用 4 次,等等。

    这种行为对于模拟连续动态非常有帮助,但在与离散元素交互时可能会令人困惑。

    【讨论】:

      【解决方案2】:

      原因是我的模型存在由子系统中的单元延迟块引起的代数环。为了解决这些循环,求解器别无选择,只能对某些块进行多次评估。

      解决方案是从其子系统中消除所有单元延迟。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多