1

我想通过使用 S-Function 中的命令为每个求解器步骤设置可变步长,例如:

dT= ...   % calculate the dT from the inputs of Block and the parameters of S-function
set_param(gcs,'...',num2str(dT));

但是,Matlab 没有为我们提供像“Step”这样的可分配参数,用于通过使用上面的命令“set_param()”来指定求解器步长。求解器步长的 callable 和 assignalbe 参数只有“MaxStep”和“MinStep”。因此,以下两个命令在 Simulink 中是可接受和可执行的:

set_param(gcs,'MaxStep',num2str(dT1));
set_param(gcs,'MinStep',num2str(dT2));

因此,我试图将相同的值分配给 dT1 和 dT2 以获得特定的步长,但立即出现错误报告,指示最大值。步和分钟。步骤不能相同。

所以我的问题是如何在 S-Function 的脚本中为求解器指定步长?

4

1 回答 1

1

求解器设置(由可变步长和固定步长模块使用)是在初始化时设置的,不能使用仿真进行更改。而且我假设评论中的固定步长求解器建议对您不起作用,因为您似乎表明您想在模拟期间更改步长。

通常,您没有真正的机制来控制(逐步)Simulink 在仿真期间采用的步长。名义上,这就是 Simulink 求解器根据初始化期间的设置自动为您做的事情。

如果所有块都是 S-Function 并且具有可变步长,则可以逐块执行此操作。您可以通过在单个时间步上运行模拟、保存 SimState、确定下一个采样时间、运行一个时间步、保存 SimState 等来做到这一点,但这将非常低效。

于 2014-04-17T16:23:45.573 回答