让你的MATLAB代码飞起来

更新时间:2023-05-23 12:37:46 阅读: 评论:0

让你的MATLAB代码飞起来
V1.0
Uabuntsu
2010.2
版权声明:作者写作本文出于兴趣,期间参考了很多免费的资料,作为向这些优秀的作者致敬,本材料免费派送,并且可以以非盈利性质任意传播。如果你对本文做出了修改,请发送邮件向作者解释你的修改,并把你的名字放在原作者后面。同时,作者欢迎真诚的交流。 
让你的MATLAB代码飞起来
跑得最快的人跑的最好。
—篡改名言MATLAB语言是一种被称为是“演算纸”式的语言,因此追求的是方便性、灵
活性以及交互性。在快速性上要比C语言这种性能强劲著称的稍逊一筹。然而,通过一些手段,我们也
能让MATLAB语言快起来,甚至和C差不多了!
声明:这不是一个初级教程,因此很多知识是假定你已经很熟悉了的;虽然我在讨论让代码飞起来,但从来不会说最快有多快,究竟有多快你要自己感觉;作者水平不是很高,难免误导你,小心甄别。
在正式讨论之前,先看看这些好习惯你有没有?
0.1使用M-Lint
M-Lint是一个代码分析检查工具,它在你写代码的过程中实时交互,发现你代码的问题,按照最佳性能和最可维护性给出修改建议。
注意:我可没说是最正确!
如果没有激活这个功能,依次使用File > Preferences > M-Lint,勾选Enable integrated M-Lint warning and error messages 。同时,还可以设定你的偏好。
激活后,在你写代码时就会实时交互了,错误的或者不推荐的部分会以红色下划线标出,鼠标经过红色下划线的语句或单词,M-Lint给出提示信息。想一下子看遍全部提示信息。使用Tools >M-Lint > (Save and) Show M-Lint Report2.
注:首次“观看”先提示先保存一下。
0.2组织
给每一个项目(project)建立一个单独的文件夹。同属于一个项目的文件保存在哪儿的都有,你找的时候就不费劲吗!
写头部注释,尤其是H1。第一行就是H1。MATLAB中的内置函数的help的内容其实就是读取的这个函数的头部注释。怎么写,参照MATLAB内置函数。 将经常用到的控制台命令存储为脚本(script)。如果有些命令反复使用,还是存为脚本吧,没别的意思,你要少敲多少次键盘啊!
0.3避免数据丢失
不要在脚本中使用clear all。不幸的是这是一个大家常用的命令,有些书上还作为一条规则确立起来,建议必须使用!要知道这个命令一执行,工作空间的数据可就不可逆转的全没了啊!
警告:小朋友注意呦! 
小心同名覆盖。如果你在一个文件中,本来你的意思是两个变量,你却给他们起了相同的名字,那么第一次的数据可就没了。比如。
result=max(a,b);  %想求a和b之较大者
result=max(c,d);  %想求c和d之较大者
result结果是什么?恐怕不是你想要的。不妨将其改为result1和result2。
类似的,也要小心文件重名的覆盖,这个后果貌似更严重些。
———下条内容未满18周岁者请在家长陪同下观赏!———— 
如何让MATLAB崩溃。尽管MATLAB是很稳定的,但是我们仍然可以让它崩溃!使用第三方的MEX函数或者耗内存的操作比如视频处理或者超大规模矩阵都可能会造成MATLAB崩溃。
——————————危险部分结束—————————— 
如果你已经有这些好习惯,那么恭喜,你要是还有其他好习惯麻烦也告诉我一声!如果没有,相信你看完之后总该有了吧?好了,我们开始!
1.使用profile
七夕的歌profile,Longman 给出的解释是:a short description that gives important details about a person, a g
roup of people, or a place。
MATLAB中内置了一个叫做profile的工具,来协助评估程序,也就是对程序运行过程的一个short description吧。主要命令有:
profile on开启
profile off 关闭
profile clear 清空数据
profile viewer 在profiler中看结果
下面我们评估一下下面这个函数:
function result =example1(count)
for k = 1:count
result(k) = sin(k/50);
英伦风格男装if result(k)<-0.9
青菜豆腐汤
result(k) = gammaln(k);
end
end
为了分析这个函数的效率,首先开启并清空profiler,然后运行这个函数,接下来看结果报告。即依次输入:
>> profile on, profile clear
最简单虾的做法>> example1(5000);
>> profile viewer
这就是profile的基本语法。也有使用鼠标操作的方法,这里就不介绍了,那样虽然直观单远不及使用,命令方便。
提示:如果你爱M¥爱的一塌糊涂,那你自便吧!
由于系统的不同,报告的结果一般是不一样的。一下是我的系统得出的结果。
1.先看profile summary:
2.点击example1链接,进入具体各小项的评估。
2.1调用函数(children)、被调用函数(parents)。本例中都没有。如果
被profile的对象有调用函数或者被调用函数的话,会给出相应的数
据。
2.2时间在哪些行被消耗(Lines where the most time was spent):
从数据中我们可以看出哪些行消耗了多少时间(总时间和相对时间),被调用了多少次,以及直观的柱形图。
2.3另一个有用的项目是M-Lint结果,给出了错误(警告、提示)所在
的行,以及对应的建议修改信息,这些建议对代码的改进是很有价值
的信息:
2.4最下面还有一个函数列表,是2.2的另一种形式。看图:
最右侧是函数代码,前有行号、每一行调用的次数和小号的时间。消耗时间最多的行被标示了出来。最红的消耗时间最多。
文学英语
profiler工具的时间分辨率不是很高,因此,如果你的代码运行的时间很短,有时候恐怕不能感知到。这时候不妨人为的加入几个循环,让程序所运行几次,然后进行分析。
必须指出,profile工具的作用主要是分析程序,获得程序运行的信息。如果想要知道程序运行的精确时间,使用计时器tic/toc。以上面程序为例,在命令行输入:
>> tic;example1(5000);toc
茄子怎么煮
输出是:
Elapd time is 0.058522 conds.
为了获得更为精准的结果,你最好把浏览器、杀毒软件、防火墙等等占用CPU时间片的程序先关了,只剩下不能关掉的系统进程。
注意:profile在新版本中不断被加强,可使用的参数也越来越多,不过大多
数根本用不着,如果你觉得那些参数很有用,我相信你根本用不找看我这个
小册子了,要真是这样,麻烦您不吝赐教,分享一些经验。
四大名旦
更详细的内容,您还是去看文档去吧!
2.预分配矩阵
MATLAB中的矩阵变量可以动态增长行和列。比如:
>>x=2
x=
2
西藏景点推荐>>x(2,3)=1
x=
2  0  0
0  0  1
看到没?MATLAB自动调整了矩阵的大小!从内部实现上看,矩阵数据存储单元被重新分配了更大的单元。如果矩阵的大小被反复的调整(比如在循环中),

本文发布于:2023-05-23 12:37:46,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/745173.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:时间   使用   函数   矩阵
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图