提高simulink仿真速度的方法(转)


来源:https://bbs.nwpu.edu.cn/forum.php?mod=viewthread&tid=81775&_dsign=afc253a8
 

内容:

Matlab simulink 给数学建模和解非线性方程提供了莫大的便利,但是对于大型仿真程序,smulink仿真速度使人叫苦不迭。总体来说,影响simulink仿真速度有以下几个因素,同时将解决方法奉上:

(1)参数设置问题,变步长还是定步长,定步长的大小,求解方法

(a)变步长可以大大加快仿真速度,但同时也可能带来结果不准确的问题。

(b)定步长的不长越大仿真时间与少,仿真时间的长短大致与仿真步长成比例。可以试试重新使用缺省值(auto)运行仿真。

(c)求解器不同仿真速度不同,在误差允许的情况下,采用误差大,时间少的求解器,比如将od45换成od23

(d)有时候初始参数的设置可能使系统花费大量时间才收敛

(e)加速器打开,在菜单-仿真选项中,将默认的normal改为accelerator

(f)精度要求太高了。相对容差的缺省值(0.1%的精度)通常是足够了。对于有些模型,它们的一些状态变量的取值是可以到0.如果绝对容差太小了的话,仿真就会在零状态附近取太多的时步。

(2)代数环问题

模型包含有代数循环。在每一时间步都会反复计算代数循环,因此这会大大地降低仿真的速度。因此需要减少代数环,在无法减少的情况下就要拆环,拆环的方法有状态端口法,代数约束模块法,积分模块等等

(3)输出

少开示波器窗口,实时绘图模块,减少向workspace空间存储数据。

(4)自定义函数

(a)模型中包含有MATLAB的function模块.当模型包含有MATLAB的function模块时,在仿真的每一时间步都会调用MATLAB的解释器,这将大大地减慢仿真的速度.因此应尽可能地使用内建的Fcn模块或者elementary Math模块.

(b)模型中包含有M文件形式的S函数.M文件形式的S函数也将导致在每一时间步调用MATLAB的解释器.可以考虑将s函数转换为子系统或者c-MEx文件形式的s函数。

(c)自定义函数中使用向量化编程方法,有些代码可以加速10倍。减少循环(for,switch,while),实在不行就先生成代码。

(5)系统的本身是离散的还是连续的

(a)离散系统的运行速度要快于连续系统。对系统离散化,方法为在你的gui模块里选择discretize electric model,采样时间越大仿真越快,当然采样时间的设定要与你对系统精确性相配合,因为采样时间是与准确性成反比的。

(6)其它

(a)模型使用的采样时间相互之间不成倍数关系。相互之间不成倍数的混合采样时间会导致求解器采用足够小的步长,以保证采样时间符合所有的采样时间要。因此统一采样时间。

(b)使用profile查看哪些模块占用了时间。Sldiagnostics函数获取模型的数目和编译情况。

(c)compile成code运算,会快很多

(d)使用并行计算工具箱,在多核心台式计算机或计算机集群上加快仿真速度

你可能感兴趣的:(提高simulink仿真速度的方法(转))