为什么在Simulink中对解释的MATLAB功能块进行两次评估?

时间:2012-08-02 11:52:52

标签: matlab simulation simulink

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

Simulink subsystem with interpreted MATLAB function

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

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

然而,在调试器中,我观察到bm_train_adapter函数在每个模拟时间步长被调用两次。这会产生可怕的错误结果,因为该功能包括副作用。

为什么Simulink每个时间步执行多次调用我的解释MATLAB函数?我该如何防止这种情况?

2 个答案:

答案 0 :(得分:1)

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

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

此行为对于模拟连续动力学非常有用,但在与离散元素交互时可能会造成混淆。

答案 1 :(得分:1)

原因是我的模型具有由子系统中的单位延迟块引起的代数循环。为了解决这些循环,求解器别无选择,只能不止一次地评估一些块。

解决方案是从子系统中移除所有单位延迟。