声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2150|回复: 0

[综合讨论] matlab运行效率的提高

[复制链接]
发表于 2016-5-17 10:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
这几天了,看了几本MATLAB书,想加快自己编写程序的效率和速度。通过阅读,发现还是有很多方法的,下面就讲述一些有关知识和体会。
     想了解自己编写程序的执行效率和速度怎么样,在MATLAB中提供了几种方法,最简单的就是检查程序运行时间:  执行 tic; 要检验的程序名;toc 就可以给出程序运行花费的时间。如果要想获得有关程序更详细的运行资料,就需要使用Profiler工具,在“Start”菜单的“MATLAB”子菜单中单击“Profiler”选项,就可以弹出Profiler工具界面,它会帮你监测运行时间,哪个命令或函数费时最多、调用最多,等等。具体看帮助,有本书也介绍的不错:《MATLAB高级编程》(苏金明等电子工业出版社,2005)。
     想要提高编程效率的一个基本思路就是进行矢量化编程。因为MATLAB是矩阵语言为矢量和矩阵操作设计的。要尽可能把要进行的计算编写成用矢量和矩阵运算的形式。多用MATLAB中经过矢量化处理的函数,如
all  diff  ipermute permute reshape squeeze any find logical prod shiftdim  sub2ind 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
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-24 16:50 , Processed in 0.068923 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表