Pparis 发表于 2016-5-17 10:01

matlab运行效率的提高

这几天了,看了几本MATLAB书,想加快自己编写程序的效率和速度。通过阅读,发现还是有很多方法的,下面就讲述一些有关知识和体会。
   想了解自己编写程序的执行效率和速度怎么样,在MATLAB中提供了几种方法,最简单的就是检查程序运行时间:执行 tic; 要检验的程序名;toc 就可以给出程序运行花费的时间。如果要想获得有关程序更详细的运行资料,就需要使用Profiler工具,在“Start”菜单的“MATLAB”子菜单中单击“Profiler”选项,就可以弹出Profiler工具界面,它会帮你监测运行时间,哪个命令或函数费时最多、调用最多,等等。具体看帮助,有本书也介绍的不错:《MATLAB高级编程》(苏金明等电子工业出版社,2005)。
   想要提高编程效率的一个基本思路就是进行矢量化编程。因为MATLAB是矩阵语言为矢量和矩阵操作设计的。要尽可能把要进行的计算编写成用矢量和矩阵运算的形式。多用MATLAB中经过矢量化处理的函数,如
alldiffipermute permute reshape squeeze any find logical prod shiftdimsub2ind cumsum ind2sub ndgrid repmat sort sum
      对内存的操作。因为我们用MATLAB计算,一般都是大数据量的计算。为计算用的大型数组变量预先分配内存(避免动态的分配内存操作)会极大提高程序的运行效率,而且还有助于减少内存碎片。特别是给非double矩阵预分配内存时,使用repmat会有很好的效果。
    在MATLAB计算中,要大量使用内存,如何有效使用内存是很关键的,这需要我们能合理使用一些内存管理函数,主要有这么一些:
whos pack sparse clear save load quit
   由于MATLAB是解释语言,执行效率再怎么提高也是有限,但是MATLAB提供了MEX技术,可以把我们编写的m函数编译成dll文件,可以极大提高程序运行速度,特别是对有多重循环语句的函数来说更有必要。
    对于设定的变量的赋值,注意不要在程序中更改它的数据类型和SIZE,这会增加不必要的开销。我们实际运算中多用到的是实数,MATLAB为此特意设计了一些操作实数的函数,如:reallog realpow realsqrt。要善加利用。一般情况下不要重载MATLAB的内部函数。
    我在实际编程中运用上述的一些方法,在程序运行效率上得到不小的收获。例如我编写的一个ds-uwb调制信号产生的程序,开始我使用的多重循环的方法;后来为简化程序,改用矢量convolution的方法,比起循环方法有一些提高;再后来我又使用repmat加矢量赋值的方法,比前两种方法运行快了将近10倍。
转自:http://blog.sina.com.cn/s/blog_64b046c70101bv44.html
页: [1]
查看完整版本: matlab运行效率的提高