我是靠谱客的博主 羞涩万宝路,最近开发中收集的这篇文章主要介绍提高simulink仿真速度(转),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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仿真速度(转)的全部内容,希望文章能够帮你解决提高simulink仿真速度(转)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部