加速吧!Simulink君!(一)
如果名字太二请各位谅解,因为我是不会改的。
Simulink在仿真过程中,大家往往都会遇到仿真速度过慢的问题。由于此类问题发生的砸鼠标,键盘,甚至显示器的事件也是屡见不鲜。为了防止上述事件的持续发生,我们作为Modeler 有什么可以做的吗? 当遇到Simulation很慢的时候往往需要具体模型具体分析,从而因地制宜。下面我们来介绍一些经验,也欢迎大家一起讨论。
首先,建议你换台电脑试试。
其次,我们来介绍一下连续系统(Continuous Model)在求解器上有哪些加速的方法。假设我们的用的是一个连续系统,那么在Solver的选择上面我们有两个选择:
1. Variable-step
2. Fixed-step
先讲讲variable-step。
variable-step 在求解过程中会根据用户的设定来动态的决定步长(主要是根据每一步的数值解是否满足tolerance,tolerance的选择属于个人“喜好”)。variable-step 在求解过程中会分为major time step 和 minor time step, 每一个major time step由多个minor time step组成,如图。
那么Major time step受到max step size的限制,而minor time step 的大小和数目是由min step size 控制。 默认的最大步长是 (stop_time - start_time)/ 50, 默认最小步长是无限小,也就是说如果解不满足tolerance的要求的话可以算无限步。
semilogy(tout(1:end-1),diff(tout)); % aeroblk_HL20 for 5 sec simulation
这里我们还可以进一步了解模型需要的最小步长:
min(diff(tout))
根据最小步长来分析系统在什么状态下是需要小布长来进行计算,从而也可以调整系统的参数或者模块的初始状态来加快运算。
接下来说说fixed-step solve。
一句话:绝大多数情况下,variable-step要比fixed-step要快。(因为步长可长可短比较合理)
那么除了调整time step,对于solver的选择也是一个很让人困扰的问题。
15b之后, Simulink 提供了 auto solver selection, 会跟据model 的属性自动选择solver,根据doc里写的,heuristic是如下的table :
那么我在向各位读者提出几个问题:
simScape的local solver在哪里设置?设置local solver和选用global solver的区别是什么?求选择local solver后global solver的心理阴影面积。
但然除了对time step和model进行调整外,还有两大法宝来加速模拟:
Run Simulation in Accelerator mode
Run Parallel Simulations
大家更想听听哪一个呢?