- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Imatlab效率提升独孤九剑附fft优化的详细例子
matlab效率提升独孤九剑
作者:信科@滨
matlab效率提升葵花宝典 1
一. 引言 2
二. 优化措施 2
三. 调试和性能分析工具 5
附录:自编fft函数的优化详解 6
参考资料: 11
一. 引言
要提升程序的效率,无非在两个方面:天生的和后天的。
第一个方面是算法本身的复杂度。比如插入排序复杂度为O(N2),而快速排序算法是O(NlnN),当然在大数据量时快速排序就比插入排序快很多了,这就是算法天生的优越性。所以世界并不是决定公平的啊,有的人就可以成为快速排序,而其他人只能成为插入排序,呵呵。
第二个方面是算法具体实现的问题。实现算法的方式不同,写程序的人不同,使用的语言不同,优化方式的不同,是否多线程,是否并行,都会使得同一算法的不同实现时间相差十倍以上,我们称之为后天的。所以当起跑线差不多时,就看谁更拼命了,所以最终有人就是冠军而有的就只能千年老二。这也是造成社会不公平的原因。
有时候就算有的高手实现插入排序都比菜鸟写的快速排序快上不少,我们可以称之为“屌丝的逆袭”,屌丝不遗憾,就看有没有一颗拼搏的心了。
而这篇文章详细介绍第二方面的算法具体实现的效率问题。这是我这三年来编写matlab程序的一些经验和教训的总结,外加网上各路人马的观点,由于写测试例子太费时费力,不重要的就不写了。
二. 优化措施
我们先看看matlab2007之前传统的一些优化观点:
观点 传统 现代 向量化编程,避免使用循环 YES NO 多使用MATLAB的内置函数能用逻辑索引解决的就不用数值索引尽量不用Cel型数组矩阵含有大量0元素, 采用稀疏矩阵 N0 YES 列向量存储 YES YES
对向量化:由于matlab2007之后的JIT和加速器技术,使得for和向量化的差别不明显了。注意向量化可能会占用大量的内存,有时候for循环更好读。
逻辑索引:采用逻辑索引比数值索引(find)快30%左右。
cell:我一般用结构体代替,但是有时候用cell更方便,需要看情况而定,可能cell更方便,直观,程序可读性更好。一般瓶颈也不在这儿值得商榷。
预分配:比如后面的循环要用到一个1000的数组,先预分配x=zeros(1,1000);
稀疏矩阵:稀疏矩阵一般有专门的稀疏算法,可能效率更高,更省内存。由于平时没怎么用过,不发表意见。
刚才看到一个减少变量赋值的次数的技术:
inplace operation:
就是如果输入参数要返回的话,就让输出参数和输入参数同名,减少赋值次数。
举个例子:
function y=f1(x)
y=x+1;
end
我们可以改写成
function x=f2(x)
x=x+1;
end
经过测试发现f2比f1快了110%,很是明显。
使用mex文件:用其他语言来实现需要的功能,避开matlab的瓶颈。
用乘法代替除法进行向量运算:
b=a/1.5;改成b=a*(1/1.5);经过测试速度快了三倍!神奇啊!这也是我无意之中发现的,看来乘法跟除法还是差别大啊。
尽量用列向量进行操作:
因为matlab的矩阵是按列存放的,对其进行存取的速度比行的方式要快20%。
三. 调试和性能分析工具
调试和性能分析工具:
断点的熟练运用,便于找到程序的错误和疏忽的地方。
用profiler进行性能分析,找出性能瓶颈,其实很多时候上面提到的注意事项并不是最花时间的,有时候就一两句话就花了差不多80%的时间,注意2/8原则。
附录:自编fft函数的优化详解
下面我以这两天我写的fft快速傅里叶变换作为上述优化方法的应用。我是参考北京大学张平文写的《数值分析》中的算法来实现的。
x=FFT(x,cnt),这儿就无意之中用到了inplace operation技术,呵呵。
大概流程:
重新排列x的顺序
预先计算wnk的值,以备后用
迭代进行计算
分析:fft也可以采用递归的方式进行求解,但是速度跟迭代的方式没法比,而且内存占用高。
第一步:重新排列x的顺序的具体实现
function [order]=fftorder(cnt,n)
%得到次序
order=zeros(1,cnt);
order(1:2)=[1,cnt/2+1];
i_2=cnt/2;
num=1;
for i=1:n-1
num=num*2;
i_2=i_2/2;
order(num+1:num*2)=order(1:num)+i_2;
end
end
评注:此处我用了预分配技术,向量化操作。这个没啥好说的,而且时间也不是花在这儿。不过我感觉我的这种实现方法很是精妙,哈哈。
第二步:计算wnk
版本1.
function w=wn(n,cnt)
w=ones(cnt/2,n);
i_2=1;
您可能关注的文档
- IIPAD2应用办公文件传输方法.doc
- IiH5高级教程:H5小游戏必学制作打飞机.docx
- I2013军事理论复习提纲&答案.docx
- I2013分析题必背知识点简洁版.doc
- I2013低碳经济考试试题及答案满分通过.doc
- I2013农村发展项目.doc
- I2013冀教版六年级科学下册复习资料及实验.doc
- IiPhone4S优化指南.docx
- IIPguardV3解决方案.doc
- IiPhone4S是苹果公司推出的一款触摸屏智能手机.doc
- (高清版)DB4420∕T 63-2024 五桂山红茶生产技术规范.pdf
- (高清版)DB4420∕T 69-2024 香山新街市运营管理规范.pdf
- (高清版)DB4414∕T 29-2024 金桔栽培技术规程.pdf
- (高清版)DB4415∕T 18-2022 牛大力种植技术规程.pdf
- (高清版)DB4420∕T 6-2020 中山书房服务规范.pdf
- (高清版)DB4420∕T 15-2022 知识产权质押融资贷款风险补偿管理规范.pdf
- (高清版)DB4420∕T 18-2022 鲜食菊花栽培技术规程.pdf
- (高清版)DB4415∕T 49-2025 稻薯轮作主要病虫害综合防控技术规程.pdf
- (高清版)DB4414∕T 37-2024 肉牛家庭农场养殖技术规范.pdf
- (高清版)DB4414∕T 39-2024 野漆树栽培技术规程.pdf
最近下载
- 出师表格理解性默写.doc VIP
- 电力用直流电源系统蓄电池组远程核容典型接线图、自动核容报告、双向DCDC装置、换流器技术要求.docx VIP
- 路面铣刨摊铺施工方案.pdf VIP
- 首届档案职业技能竞赛考试题库(含答案).docx VIP
- 建筑工程施工技术课件.ppt VIP
- 医院智慧服务分级评估二级实证材料通用模板(选择项部分)(2024版) .doc VIP
- 黑色冶金行业标准YB/T4001.1-2007(钢格栅板).docx VIP
- 旅游景区开发运营项目指标评估报告.docx VIP
- 2024北京市密云区辅警考试真题及答案.docx VIP
- 高速公路服务设施设计规范-2016-7-26标准.pdf VIP
文档评论(0)