转自: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来查看某段程序的执行时间。