- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
优化MATLAB程序的技巧
优化MATLAB程序的技巧
已有 76 次阅读2012-10-19 22:57|个人分类:MATLAB|系统分类:科研笔记|关键词:的 学习 技巧其实是转载的,转载地址是:/s/blog_62983bd50100fyvn.html
原文内容如下:
这是薛定宇老师的建议,原文在大观园的首页:
因为 MATLAB 语言是一种解释性语言,所以有时 MATLAB 程序的执行速度不是很理想。这里将依照作者十多年的实际编程经验给出加快 MATLAB程序执行速度的一些建议和体会。
要点1: 尽量避免使用循环:循环语句及循环体经常被认为是~MATLAB 编程的瓶颈问题。改进这样的状况有两种方法: (1) 尽量用向量化的运算来代替循环操作。我们将通过如下的例子来演示如何将一般的循环结构转换成向量化的语句。
〖例3.19〗考虑下面无穷级数求和问题:
如果我们只求出其中前有限项,比如 100,000 项之和 (要精确地求出级数的和,无需求 100000 项,几十项往往就能得出满意的精度。这里主要是为了演示循环运算向量化的优越性。),则可以采用下面的常规语句进行计算
tic;
s=0;
for i=1:100000
s=s+(1/2^i+1/3^i);
end
toc
s =
1.5000
elapsed_time =
1.9700
如果采用向量化的方法,则可以得出下面结果。可以看出,采取向量化的方法比常规循环运算效率要高得多。
tic;
i=1:100000;
s=sum(1./2.^i+1./3.^i);
toc;
s =
1.5000
elapsed_time =
0.3800
(2)在必须使用多重循环的情况下,如果两个循环执行的次数不同,则建议在循环的外循环执行循环次数少的,内环执行循环次数多的。这样也可以显著提高速度。
〖例3.20〗考虑生成一个 5x10000 的 Hilbert 长方矩阵,该矩阵的定义是其第 i 行第 j 列元素为 h(i,j)=1/(i+j-1)。我们可以由下面语句比较先进行 i=1:5 的循环和后进行该循环的耗时区别,其效果和前面分析的是一致的。
tic
for i=1:5 %外侧为循环次数少的循环
for j=1:10000
H(i,j)=1/(i+j-1);
end
end
Toc
elapsed_time =
8.6800
tic
for j=1:10000 %外侧为循环次数多的循环
for i=1:5
J(i,j)=1/(i+j-1);
end
end
toc
elapsed_time =
25.7000
要点2: 大型矩阵的预先定维 给大型矩阵动态地定维是个很费时间的事。建议在定义大矩阵时,首先用 MATLAB 的内在函数,如zeros() 或 ones() 对之先进行定维,然后再进行赋值处理,这样会显著减少所需的时间的。
再考虑例3-20中的问题,如果输入下面的命令
tic
H=zeros(5,10000);
for i=1:5
for j=1:10000
H(i,j)=1/(i+j-1);
end
end
Toc
elapsed_time =
1.0400
则采用预先定维的方法,再结合向量化的方法,我们可以给出下面的 MATLAB 语句。
tic
H=zeros(5,10000); %余弦定维的方法
for i=1:5 %向量化的方法
H(i,=1./[i:i+9999];
end
Toc
elapsed_time =
0.060
可见,预先定维后,所需要的时间显著地减少了。可以看出,同样一个问题,由于采用了有效的措施,所需的时间就可以从 25.7 秒减少到 0.06 秒,亦即效率提高了 428 倍。
对二重循环这样的特殊问题,我们还可以使用 meshgrid() 函数构造两个 5x10000 矩阵 i 和 j,从而直接得出 H 矩阵,更进一步地加快速度。
tic
[i,j]=meshgrid(1:5,1:10000);
H=1./(i+j-1);
Toc
elapsed_time =
0
要点3: 优先考虑内在函数 矩阵运算应该尽量采用 MATLAB的内在函数,因为内在函数是由更底层的编程语言C构造的,其执行速度显然快于使用循环的矩阵运算。
要点4: 采用有效的算法 在实际应用中,解决同样的数学问题经常有各种各样的算法。例如求解定积分的数值解法在 MATLAB:中就提供了两个函数quad()和quad8(),其中后一个算法在精度、速度上都明显高于前一种方法。所以说,在科学计算领域是存在“多快好省”的途径的。如果一个方法不能满足要求,可以尝试其他的方法。
要点5 应用 Mex 技术 虽然采用了很多措施,但执行速度仍然很慢,比如说耗时的循环是不可避免的,这样就
您可能关注的文档
最近下载
- c0504_012_系统上线运行c0504_012_01_案例xx集团上线报告.pptx VIP
- 美术九上第5课门市公开课一等奖省优质课赛课一等奖课件.pptx VIP
- 2025年贵州大数据产业集团有限公司第一次社会招聘155人备考题库及完整答案详解一套.docx VIP
- 二、构建上线-YS.2.0.3-系统上线报告.doc VIP
- 灭火器使用安全培训课件.ppt VIP
- 工程材料采购委托合同范本.docx VIP
- 山东省民航体检医师资格执业许可考试试卷与答案考试题库.docx VIP
- 美术九上第7课美丽家园市公开课一等奖省优质课赛课一等奖课件.pptx VIP
- 儿科护理学试题及答案.docx VIP
- 金蝶云星空财务共享解决方案.pptx VIP
原创力文档


文档评论(0)