调试变量步进求解器性能的最有用的命令
今天,我想分享一个技巧,我经常用来确定变量步骤仿真是否尽可能快地运行。
可视化模型采取的步骤
首先,保存仿真时间数据。这可以从数据导入/外口窗格模型配置。
仿真完成后,绘制时间数据的导数。这可以通过以下行完成:
半学(Tout(1:End-1),diff(Tout))
我喜欢在y轴上使用对数刻度,因为所采取的时间步骤在很大的范围内会有所不同。
现在,让我们看一些示例,显示我们可以从该图中提取哪种信息。
公差超过
将此技术应用于示例演示时vdp.mdl,我们获得以下数字:
使用此数字,我们可以识别2件事。
首先,我们可以看到大多数情况下,求解器所采取的步骤对应于最大步长大小在模型配置中指定。这意味着您可能能够增加求解器最大步长大小,并允许求解器采取更大的步骤,从而减少完成模拟所需的总数。
其次,我们看到,在某些瞬间,时间步长平稳地减少。这意味着求解器采取尽可能大的步骤来尊重指定的宽容。
要确认上述内容,让我们更改求解器最大步长大小,看看它如何影响步骤大小:
在此示例中,效果很小。但是我们可以看到,如果增加最大步长,则模拟会采取更大的步骤。
请注意,我建议在增加求解器最大步长或公差时保持谨慎。花时间进行融合研究,以确保结果仍然提供您需要的准确性。
零交叉
可以使用该技术识别的另一个重要模式是零口字对模拟的影响。
让我们以连接到饱和块的正弦波制成的简单模型。
在此示例中,每次进入或退出饱和度时,饱和块都会生成零交叉事件。如我们所见,这迫使Simulink求解器采取非常小的步骤以准确金宝app捕获此事件。
零交叉机制通过采取小步骤提供准确性。知道这是求解器的行为,您必须判断一个块是否需要零交叉。
结论
如果您的模型运行速度比您预期的要慢,则此技术可以帮助您确定是否需要比需要的小步骤。
在我的调试工具箱中,这是我研究模拟性能时尝试的第一件事。
现在轮到你了
您是否有任何技巧可以共享以帮助确定可变的仿真是否尽可能快地运行?请离开在这里评论。
注释
要发表评论,请单击这里登录您的数学帐户或创建一个新帐户。