本文最后更新于 2023年9月25日。
simulink性能优化
我的经验是,打开Solver Profiler , 从新跑一下模型,只跑很短的一段时间,Solver Profiler 会告诉你那一部分用时间最长,专注更新这一小部分,其他的不用管。
影响simulink仿真速度的原因如下:
1.模型中有使用 MATLAB Function 模块。此时,每个步长在计算时都要调用 MATLAB 去解释执行。这大大降低了仿真速度,解决方法是尽可能改用 Fcn 模块。
2.模型中有以 MATLAB 文件编写的 S 函数。解决方法是将 MATLAB 文件编译为 MEX 文件。此外,如果可能,尽量使用 Simulink 内置的模块代替 S 函数。
3.过小的步长或采样时间。在仿真过程中,保持小步长对捕获重要事件非常重要,但同时,步长过小会产生不必要的输出点,并减慢仿真速度。
4.maximum step size设置太小。请尝试将该属性设置为auto。
5.您可能对精度要求过高。默认的relative tolerance是 0.1%,能满足一般需求。
6.时间跨度(总仿真时间)可能太长。建议缩短。
7.模型中有使用 Memory 模块。该模块会导致变量阶解算器在每个时间步长计算时,被重置回一阶。
8.模型中有使用 Extras 库,例如图形、自动调整、频谱分析。
9.模型中有使用 scope 模块,尽管其影响很可能非常小。
10.代数环,请参考之前发布的更为详细的说明。
11.请不要将白噪声模块接到积分器。对于连续系统,请使用带限制白噪声块。
12.模型的刚度很大,但您使用的是非刚性解算器。请尝试使用ode15s。
13.过零检测(zero crossing),可能导致模型在某些仿真时刻“卡住”。您可以禁用该检测。更为具体的说明,请在帮助文档中搜索zero crossing。
14.在 model configuration 中勾选 inline parameters,此时可以将所有参数内置,从而提高速度。
15.使用Simulink自带的加速功能。
16.如果模型非常复杂(涉及大量模型引用和子系统),并且涉及大量数据记录,则仿真速度也会受到影响。
可以尝试以下的方法:
把solver改成fixed time step,用ode4,stepsize先试试1e-3。然后把simscape的solver改成local solver,time step也先设成1e-3,选择backward Euler。用accelerator mode 跑。
s-function
https://zhuanlan.zhihu.com/p/23301801
怎能提升simulink的运行速度
ChatGPT
以下是提升Simulink运行速度的一些方法:
-
精简模型:删除不必要的模块和信号,简化模型结构,减少计算量。
-
合理设置模拟参数:通过调整模拟参数,如步长和仿真时间,可以减少计算时间。
-
使用代码生成:将模型转换为代码,可以加速模型运行。
-
使用多核处理器:如果计算机有多个核心,可以在Simulink中配置并行计算,以利用多核处理器的能力。
-
关闭不必要的功能:关闭不必要的功能,如绘图和数据记录等,可以提高运行速度。
-
使用加速器:Simulink提供了一些加速器,如硬件加速器和软件加速器,可以提高模型运行速度。
-
使用代码优化工具:使用代码优化工具可以优化生成的代码,减少计算量,从而提高运行速度。
https://blog.csdn.net/weixin_44182878/article/details/88710960
加速simulink模型的可能方案:
禁止报出小的量化错误
禁止数据输出
编译后使用
采样时间优化
研究滤波模型的输入输出
研究sim函数