优化matlab程序的技巧

优化matlab程序的技巧

ID:1792260

大小:41.50 KB

页数:3页

时间:2017-11-13

优化matlab程序的技巧_第1页
优化matlab程序的技巧_第2页
优化matlab程序的技巧_第3页
资源描述:

《优化matlab程序的技巧》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、优化MATLAB程序的技巧已有76次阅读2012-10-1922:57

2、个人分类:MATLAB

3、系统分类:科研笔记

4、关键词:的学习技巧其实是转载的,转载地址是:http://blog.sina.com.cn/s/blog_62983bd50100fyvn.html但是直接转载没法进行学习笔记的标注,因此现在拷贝到这里进行学习。原文内容如下:这是薛定宇老师的建议,原文在大观园的首页:因为MATLAB语言是一种解释性语言,所以有时MATLAB程序的执行速度不是很理想。这里将依照作者十多年的实际编程经验给出加快

5、MATLAB程序执行速度的一些建议和体会。要点1:尽量避免使用循环:循环语句及循环体经常被认为是~MATLAB编程的瓶颈问题。改进这样的状况有两种方法:(1)尽量用向量化的运算来代替循环操作。我们将通过如下的例子来演示如何将一般的循环结构转换成向量化的语句。〖例3.19〗考虑下面无穷级数求和问题:如果我们只求出其中前有限项,比如100,000项之和(要精确地求出级数的和,无需求100000项,几十项往往就能得出满意的精度。这里主要是为了演示循环运算向量化的优越性。),则可以采用下面的常规语句进行计算>>t

6、ic;s=0;fori=1:100000s=s+(1/2^i+1/3^i);endtocs=1.5000elapsed_time=1.9700如果采用向量化的方法,则可以得出下面结果。可以看出,采取向量化的方法比常规循环运算效率要高得多。>>tic;i=1:100000;s=sum(1./2.^i+1./3.^i);toc;s=1.5000elapsed_time=0.3800(2)在必须使用多重循环的情况下,如果两个循环执行的次数不同,则建议在循环的外循环执行循环次数少的,内环执行循环次数多的。这样也可

7、以显著提高速度。〖例3.20〗考虑生成一个5x10000的Hilbert长方矩阵,该矩阵的定义是其第i行第j列元素为h(i,j)=1/(i+j-1)。我们可以由下面语句比较先进行i=1:5的循环和后进行该循环的耗时区别,其效果和前面分析的是一致的。>>ticfori=1:5%外侧为循环次数少的循环forj=1:10000H(i,j)=1/(i+j-1);endendTocelapsed_time=8.6800>>ticforj=1:10000%外侧为循环次数多的循环fori=1:5J(i,j)=1/(i+

8、j-1);endendtocelapsed_time=25.7000要点2:大型矩阵的预先定维给大型矩阵动态地定维是个很费时间的事。建议在定义大矩阵时,首先用MATLAB的内在函数,如zeros()或ones()对之先进行定维,然后再进行赋值处理,这样会显著减少所需的时间的。再考虑例3-20中的问题,如果输入下面的命令>>ticH=zeros(5,10000);fori=1:5forj=1:10000H(i,j)=1/(i+j-1);endendTocelapsed_time=1.0400则采用预先定维的

9、方法,再结合向量化的方法,我们可以给出下面的MATLAB语句。>>ticH=zeros(5,10000);%余弦定维的方法fori=1:5%向量化的方法H(i,=1./[i:i+9999];endTocelapsed_time=0.060可见,预先定维后,所需要的时间显著地减少了。可以看出,同样一个问题,由于采用了有效的措施,所需的时间就可以从25.7秒减少到0.06秒,亦即效率提高了428倍。对二重循环这样的特殊问题,我们还可以使用meshgrid()函数构造两个5x10000矩阵i和j,从而直接得出H

10、矩阵,更进一步地加快速度。>>tic[i,j]=meshgrid(1:5,1:10000);H=1./(i+j-1);Tocelapsed_time=0要点3:优先考虑内在函数矩阵运算应该尽量采用MATLAB的内在函数,因为内在函数是由更底层的编程语言C构造的,其执行速度显然快于使用循环的矩阵运算。要点4:采用有效的算法在实际应用中,解决同样的数学问题经常有各种各样的算法。例如求解定积分的数值解法在MATLAB:中就提供了两个函数quad()和quad8(),其中后一个算法在精度、速度上都明显高于前一种方

11、法。所以说,在科学计算领域是存在“多快好省”的途径的。如果一个方法不能满足要求,可以尝试其他的方法。要点5应用Mex技术虽然采用了很多措施,但执行速度仍然很慢,比如说耗时的循环是不可避免的,这样就应该考虑用其他语言,如C或Fortran语言。按照Mex技术要求的格式编写相应部分的程序,然后通过编译联接,形成在MATLAB可以直接调用的动态连接库(DLL)文件,这样可以显著地加快运算速度。要点6函数比脚本运行更快这是因为,MAT

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。