如何加快Simulink模型的仿真速度?

68 views (last 30 days)
MathWorks Support Team
MathWorks Support Team on 29 May 2014
我想知道为什么我的Simulink模型仿真很慢。

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 23 Feb 2020
Edited: MathWorks Support Team on 23 Feb 2020
有几种原因可能导致仿真运行速度很慢:
1. 模型中有一个 MATLAB 函数块 :当存在 MATLAB Fcn 模块时,在每个采样时间都会调用 MATLAB 解释器。这会大大降低仿真速度。所以,应尽可能使用内置Simulink模块。
2. MATLAB S函数(S-Function):在每个时间步长都会计算 S-Function。把MATLAB代码转为MEX文件,这样性能可以得到显著提高。此外,如果可能,应尽量使用内置模块建模。
3. 较小的步长或采样时间(或者彼此间不是倍数关系的采样时间):为了在仿真期间捕获重要事件,有时必须设置最够小的步长;反过来,步长太小会导致产生不必要的输出点,从而减慢仿真速度。
4. 最大步长太小:如果您更改了最大步长,请尝试用默认值(设置为自动)来运行仿真。
5. 您要求的精度可能过高:默认相对容差(0.1% 精度)通常就足够了。对于状态趋于零的模型,如果绝对容差参数太小,则仿真可能在近零状态值附近采用过多步长。有关容错度的详细信息,请参阅《使用 Simulink 手册》第 5-13 页。请记住,所有要输入的容差值都是绝对值。所以,默认相对容差值设置为 1e-3 时,意味着相对容差是 0.001,或者 0.1%(采用百分比形式)。
6. 时间尺度可能太长:减少时间间隔。
7. 您的模型中包含一个 Memory 模块:使用 Memory 模块会导致在每个步长上变阶求解器(ode15s 和 ode113)被重置回阶数 1。
8. Extras 库中有包含以上三项之一(即Graph Scope、Autoscaling Scopes、Spectrum analyzer等)的Mask模块:Unmask模块来看看它们是否调用 S-Function。
9. 使用了Scope模块:尽管它们的影响很可能不明显。
10. 代数环:为了解代数环,会在每个步长上都执行迭代计算。因此,它大大降低了速度。有关代数环的详细信息,请参阅《使用 Simulink 手册》第 3-18 页。
11. 不要在积分函数中引入白噪声模块:对于连续系统,使用 Extras/Sources 库中的带限白噪声模块。
12. 这可能是个刚性(stiff)问题,而您使用的是非刚性(non-stiff)求解器:尝试使用 ode15s
13. 您可能碰到了连续过零,导致仿真逐渐“停滞”,时间很长(并且可能是无限长时间):要解决此问题,可以禁用过零检测。这可以通过在“Simulation 参数”(Simulation Parameters) 对话框的“高级”(Advanced) 窗格中选择“禁用过零检测”(Disable zero crossing detection) 选项来实现。在 R11 中,可通过转到模型的“仿真”(Simulation) ->“参数”(Parameters) ->“诊断”(Diagnostics) 部分来实现此目的。
有关过零检测的详细信息,请参阅《使用 Simulink 手册》第 5-44 页。
14. 您也可能想要尝试设置“模型参数配置”(Model Parameter Configuration) 对话框以便您的 Simulink 模型使用“内联参数”(Inline Parameters) 选项:选择此选项可使 Simulink 能够将指定参数视为常量,从而加快仿真速度。请参阅《使用 Simulink 手册》第 5-30 页了解更多信息。
15. Simulink Accelerator 仿真模式可以加快仿真时间。Profiler可以分析模型性能瓶颈来提高仿真速度。
<http://www.mathworks.com/help/simulink/ug/what-is-acceleration.html>
16. 如果模型非常复杂(涉及大量模型引用和子系统)且包含大量数据记录,仿真速度也会受到影响:禁用数据记录功能也能提高仿真速度。
除此之外,仿真速度受系统(即处理器、RAM、正在发生的交换量等)的制约。
关于仿真速度有还有几点需要考虑:
- 图形引擎速度
- CPU 速度
- 内存量
为此,下面是几点提示:
- 如果在仿真过程中有打开的scope或其他可视化输出设备,这些都会降低性能
- 性能与 CPU 速度成正比
- 如果在仿真过程中存储的变量大于系统上的 RAM 量,则性能会很差。解决办法是运行较小的仿真或增加内存

More Answers (0)

Tags

No tags entered yet.

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!