Simulin金宝appk上的Guy

金宝appSimulink &基于模型的设计

调试可变步长求解器性能最有用的命令

今天,我想分享一个我经常用来确定可变步长模拟是否运行得足够快的技巧。

可视化模型所采取的步骤

首先,保存模拟时间数据。这可以从数据导入/导出窗格模型配置的。

测井模拟时间数据

一旦模拟完成,绘制时间数据的导数。这可以用下面这行代码完成:

semilogy(兜售(1:end-1), diff(宣传)

我喜欢在y轴上使用对数刻度,因为所采取的时间步骤可以在一个非常大的范围内变化。

现在让我们看几个例子,看看我们可以从这个图中提取什么样的信息。

公差超过

当将此技术应用于示例演示时vdp.mdl时,得到如下图:

演示vdp.mdl的符号学(tout(1:end-1),diff(tout))

利用这个图表,我们可以确定两件主要的事情。

首先,我们可以看到,大多数时候,求解器所采取的步骤对应于最大步长在模型配置中指定。这意味着您可以增加求解器的最大步长,并允许求解器采取更大的步骤,减少完成模拟所需的总步骤数。

其次,我们看到在某些时刻,时间步长平滑地减小。这意味着求解器采取尽可能大的步骤来尊重指定的宽容

为了确认上面的问题,让我们改变求解器的最大步长,看看它是如何影响步长的:

演示vdp.mdl的符号学(tout(1:end-1),diff(tout))

在这个例子中,效果非常小。但我们可以看到,如果我们增加最大步长,模拟需要更大的步长。

请注意,我建议在增加求解器最大步长或公差时要谨慎。花点时间做一个收敛研究,以确保结果仍然提供你需要的准确性。

零交点

使用这种技术可以识别的另一个重要模式是过零对模拟的影响。

让我们以这个简单的模型为例,由连接到饱和块的正弦波构成。

生成过零事件的示例模型

在本例中,饱和块每次进入或退出饱和时都会生成一个过零事件。正如我们所看到的,这迫使Simulink求解器采取非常小的步骤金宝app来准确地捕获这个事件。

过零对时间步长的影响

过零机构通过采取小步骤提供精度。知道了这是求解器的行为,就由您来判断块是否需要过零。

结论

如果您的模型运行速度比您预期的慢,该技术可以帮助您确定是否是因为它所采取的步骤比所需的步骤更小。

在我的调试工具箱中,这是我在研究模拟的性能时首先尝试的事情之一。

现在轮到你了

你有什么技巧可以分享,以帮助确定一个可变步长模拟是否运行得尽可能快?请留言分享这里的评论

|

コメント

コメントを残すには,ここをクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。