Main Content

提高仿真速度

有几个因素可能会减慢仿真速度。请检查您的模型是否存在以下情况。

  • 该模型包括 Interpreted MATLAB Function 模块。当模型中包含 Interpreted MATLAB Function 模块时,每个时间步都会调用 MATLAB® 执行引擎,从而导致仿真速度大大降低。尽可能使用 Math Function 模块。

  • 模型中包含 MATLAB 文件 S-Function。MATLAB 文件 S-Function 也会在每个时间步调用 MATLAB 执行引擎。请考虑将 S-Function 转换为子系统或 C-MEX 文件 S-Function。

  • 模型中包含 Memory 模块。使用 Memory 模块会导致变阶求解器(ode15sode113)在每个时间步都重置回 1 阶。

  • 最大步长太小。如果您更改了最大步长,请尝试使用默认值 (auto) 再次运行仿真。

  • 准确性要求太高。默认的相对容差(0.1% 精度)通常就已足够。对于状态会变为零的模型,如果绝对容差参数太小,仿真可能会围绕接近零的状态值执行太多步。请参阅Maximum order中有关此错误的讨论。

  • 时间太长。缩短时间间隔。

  • 您的模型表示刚性的系统,但您使用的是非刚性求解器。尝试使用 ode15s。有关详细信息,请参阅刚性系统

  • 您的模型使用的采样时间不是互为倍数。混合不是互为倍数的采样时间会导致求解器采用足够小的步长,以确保计算所有采样时间的采样时间命中点。

  • 模型包含代数环。代数环的解在每个时间步迭代计算。因此,它们大大降低了性能。有关详细信息,请参阅代数环概念

您可以检查模型模块的以下情况:

  • 模型将 Random Number 模块馈送给 Integrator 模块。对于连续系统,请使用 Sources 库中的 Band-Limited White Noise 模块。

  • 模型中包含的波形查看器显示太多数据点。尝试调整可能影响性能的查看器属性设置。有关详细信息,请参阅 Scope Viewer

  • 您需要对模型进行迭代仿真。您可以在迭代之间更改可调参数,但不要对模型进行结构性更改。每次迭代都需要重新编译模型,因此增加了整体仿真时间。请使用快速重启执行迭代仿真。在此工作流中,模型仅编译一次,而且迭代仿真仅限于单个编译阶段。有关详细信息,请参阅How Fast Restart Improves Iterative Simulations

相关示例

详细信息