我想通过使用S函数中的命令为每个求解器步骤设置一个变量步长:
dT= ... % calculate the dT from the inputs of Block and the parameters of S-function
set_param(gcs,'...',num2str(dT));
但是,Matlab没有为我们提供一个可指定的参数,如'Step',用于通过上面的命令“set_param()”指定求解器步长。求解器步长的可调用和assignalbe参数仅为'MaxStep'和'MinStep'。因此,以下两个命令在Simulink中是可接受和可执行的:
set_param(gcs,'MaxStep',num2str(dT1));
set_param(gcs,'MinStep',num2str(dT2));
因此,我试图为dT1和dT2分配相同的值以获得特定的步长,但是立即出现了一个错误报告,指出最大值。步骤和分钟。步骤不能相同。
所以我的问题是如何在S-function脚本中为求解器指定步长?
答案 0 :(得分:1)
求解器设置(由变量步和固定步块使用)在初始化时设置,不能使用模拟进行更改。 我假设评论中的固定步骤求解器建议对您不起作用,因为您似乎表示您希望在模拟期间更改步长。
一般来说,没有真正的机制可以让您对模拟过程中Simulink所采用的步长进行定义(逐步)。 根据初始化期间的设置,名义上是Simulink解算器为您自动执行的操作。
如果所有块都是S函数并且步长可变,则可以逐块进行。 你可以通过在一个时间步骤上运行模拟,保存SimState,确定下一个采样时间,运行一个时间步,保存SimState等来实现它,但这样效率非常低。