找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3884|回复: 0
打印 上一主题 下一主题
收起左侧

matlab之代码运行效率

[复制链接]
跳转到指定楼层
楼主
ID:65608 发表于 2014-9-3 23:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      matlab是一款数学工具,所以使用这个工具,可以帮助解决大多数的科学问题。马克思说,如果一门科学还没有用到数学,那它不能称之为科学(大意是这样的,哈哈)。这是本人第一次写博文,文字功底实在有限(不是自谦,我是一个骄傲的人,嘿嘿),请见谅。看过很多专业性的文章,都会涉及很多专业名词,第一眼就看上去就很牛B,但因此也有了距离感(不敢继续往下读)。本人的目的是用浅显的语言,清晰的结构,与有共同爱好的人,一起沟通学习,一起进步。下面就开始言归正传,说说Matlab。



    Matlab是一个运行程序的平台,那首先得清楚程序运行的基准,也就是时钟(这个跟学习单片机里的时钟是一样的),或者称之为时间轴。时钟频率当然是CPU内核频率(保证在全速运行的情况下),这貌似跟一个Programmer无关,而更加关心的可能是‘代码实际执行的时间’和‘如何提交代码效率’。matlab已经提供了计时函数(在MCU里叫做计时器,本人从事过嵌入式,所以不免将其对比学习,这也不失为一种好的方法,哈哈)。

  1’tic/toc函数,tic用在程序的开始,作用是启动一个计时器,实际是保存了当前的时间值,toc放在程序尾部,表示终止计数器,返回从计时器开启到此刻的流逝时间(elapsed time).这就可以测量代码试行时间,注意返回值单位已换算成seconds(秒);

x = rand(800000, 1);

t1 = tic;  fft(x);  toc(t1)             % Recommended
Elapsed time is 0.097665 seconds.

2’clock/etime函数,clock函数,返回一个1*6的double类型的当前时间值,年月日时分秒,etime(t2,t1)用来计算两个日期向量t1,t2的时间差,单位也是seconds。

t = clock;  fft(x);  etime(clock, t)
ans =
    0.1250

3' cputime函数,返回matlab启动以来CPU时间,没有单位。在程序前后保证cpu时间,然后比较大小。这种方法个人不是很好用,毕竟我们都是生活在标准时钟下,如果不以秒作为计量单位,有些不知所措的感觉。因为不知道过了多长时间,当前的时间又是什么,是不是很可怕,哈哈···。

以上就是测量代码执行时间的几种方法,推荐是使用第一种方法,简单、准确。如果有更好的方法,欢迎提出来,一起学习。关于'如何提高代码效率',写出优质的代码,这是一个非常值得研究的问题了,也是一个优秀的程序员一生都在思考的。在这里我提升到几条原则,与其说明哪条程序该怎么写,效率更高,这样永远也说不完的话题,还不如提炼出实用的编程原则,作为编写程序时的方向指导。哲学家不就是这样吗,用几句精髓的句子,概括了芸芸众生苦苦寻觅的生活,蓦然回首,那人已在灯火阑珊处。

1’ 把相同的事情一起做了。比如说定义特别大的数组或矩阵,matlab进行动态内容分配和取消时,可能产生内存碎片,导致大量内存闲置,程序必然会耗时,在程序开头预分配这样的大数组,则避免了这个问题。

2‘自己手里有的,干嘛还向别人借呢。尽可能使用matlab内部提供的函数,它提供的函数绝对是各种问题的最优算法,那些可都是大师级人物写出来的,程序肯定是相当高效,有现成的为什么不用呢。基于模型设计,自动生成可执行的嵌入式代码,也是这样的道理。

3’借力用力。matlab语言是为矩阵操作而设计,这方面有独到的优势,但也不是万能,可以说任何一种语言都是为解决某一需求而孕育的,不是为了拯救世界和平,消除所有问题。自己不擅长的事情,就交给别人去做吧。MEX 工具可编译C、C++、Fortran等多种计算语言,生成MEX文件(.mexw32/.mexw64格式的文件),类似windows 的dll文件,能够动态链接到程序中。比如循环操作,用C编写岂不是小儿科。

今天就写这么多吧,希望有同志一起交流学习,并继续关注以后的博文,

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表