人在仿真软件金宝app

金宝appSimulink &基于模型的设计

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

今天,我想和大家分享一个技巧,我经常使用它来确定一个可变步长的模拟是否能以应有的速度运行。

可视化模型所采取的步骤

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

测井模拟时间数据

一旦模拟完成,绘制时间数据的导数。这可以通过下面的行来完成:

符号学(tout(1:end-1),diff(tout))

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

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

公差超过

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

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

利用这个图,我们可以确定两个主要方面。

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

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

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

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

在本例中,效果非常小。但是我们可以看到,如果我们增加最大步长,模拟会采取更大的步长。

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

过零

使用此技术可以识别的另一个重要模式是零交叉对模拟的影响。

让我们看一个简单的模型,由一个连接到饱和块的正弦波组成。

生成过零事件的示例模型

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

过零对时间步长的影响

过零机构通过小步进提供准确度。知道这是解算器的行为后,您就可以判断块是否需要过零。

结论

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

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

现在轮到你了

您是否有任何技巧可以分享,以帮助确定可变步长模拟是否尽可能快地运行?请留下一张便条来分享评论这里

|

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。