Matlab提速方法

来源:互联网 发布:淘宝原厂货 编辑:程序博客网 时间:2024/05/17 04:28

转自:http://blog.sina.com.cn/s/blog_74976bc801014fjf.html

最近做实验的时候需要用matlab,确实写起来快,而且工具强大,但是有时遇到速度让人头疼,不能像c java可以利用数据结构或者什么模式来提高速度,上网搜了下,发现已经有一些现成的办法来提速,亲自测了下,确实,一个将近一分钟的程序现在只需要十秒不到了。。

从一本书上摘来的,希望大家能在回复中补充(我在别处发过)


   Matlab是一种解释性语言,程序执行速度不够理性,可采取以下措施提速:
   
   1、尽量避免使用循环
        (1)尽量使用像量化的运算代替循环操作,可明显提高执行效率;
        (2)在必须使用多冲循环时,尽量将循环次数少的放在外层,较多的在内层。

   2、大型矩阵预先定维
        给大型矩阵动态定位是很费时的事情,在定义大型矩阵时,首先用Matlab的内建函数,
        如zeros()或ones()对变量进行定维,然后赋值,可显著减少时间。

   3、二重循环的矩阵代替
        使用meshgrid()函数构造两个m×n的矩阵i,j,从而直接得出所需矩阵。如:
        [i,j]=meshgrid(1:m,1:n);%m=10,n=1000
        H=1./(i+j-1)           %此例生成了一个m×n的Hillbert长方形矩阵

   4、优先考虑内建函数
        它们是由更底层的C语言实现的,执行效率显然要快于使用循环的矩阵运算。

   5、采用更有效的算法
        你如quad()和quad8(),后者无论在速度上还是在精度上都要明显优于前者。

   6、应用Mex技术
        比如,当好事的循环不可避免时,可考虑C语言,按Mex技术要求的格式编写相应部分的程序,
      通过编译连接,形成Matlab中可直接调用的动态链接库(dll)文件。

   7、遵守PerfromanceAcceleration的规则(可以参考帮助文档,总结为以下七条)
      1、只有使用以下数据类型Matlab才会对程序加速:
         logical,char,int8,uint8,int16,int32,uint32,double,对其它类型不予加速;
      
      2、Matlab不会对超过三维的数组加速;
      
      3、当使用for循环时,只有当for循环的范围内只使用标量来表示并且每一条语句只使用支持加速的      数据类型,只是用三维以下的数组,只调用了内建函数时才予以加速;
      
      4、当使用if,elseif,while和switch时,条件测试语句只是用了标量才会予以加速;
      
      5、不要在同一行写入多条操作,这样会减慢执行速度;
      
      6、当某条操作改变了原来的数据类型和形状(大小或维数)时,会减慢速度;
      
      7、应带使用这样的复常量如x=1+2i,而x=1+2*i会减慢速度。

打击可以使用一对tic/toc来查看某段程序的执行时间。


0 0
原创粉丝点击