Matlab中计算程序运行时间的三种方法
Matlab 算法时间比较

matlab程序的编写也要注意执行效率,下面以三段程序为例,讲讲如何提高程序的效率matlab中有tic和toc命令来记录一段程序的cpu使用时间,可以用help tic命令查看相应的说明
先看第一段程序
clear all
clc
tic
for a=0:1:10000
b(a+1)=a^2-a+1;
end
toc
执行结果如下:
Elapsed time is0.244107seconds.
>>
再看第二段程序
clear all
clc
tic
b(1:10001)=0;
for a=0:1:10000
b(a+1)=a^2-a+1;
end
toc
与第一段程序的区别在于预先分配了b向量的空间大小,执行结果如下:
Elapsed time is0.000459seconds.
>>
最后看第三段程序
clear all
clc
tic
a=0:1:10000;
b=a.^2-a+1;
toc
这段程序与前面的区别在于不采用循环的方式运算
执行结果如下:
Elapsed time is0.000311seconds.
>>
从上面的实例可以明显的看出这三种方式编程的优缺点所在,最后一种向量运算方式最为节约CPUtime,而第二段程序由于事先分配了空间,相比于第一段程序执行效率明显的提高,而第三种方式在数据量更大的情况下,将会比第二种方式表现出更强的优越性。
matlab最大公约数 三种算法

算法设计与分析11信本余启盛 118632011004一、上机目的及内容1.上机内容求两个自然数m和n的最大公约数。
2.上机目的(1)复习数据结构课程的相关知识,实现课程间的平滑过渡;(2)掌握并应用算法的数学分析和后验分析方法;(3)理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。
二、实验原理及基本技术路线图(1)至少设计出三个版本的求最大公约数算法;(2)对所设计的算法采用大O符号进行时间复杂性分析;(3)上机实现算法,并用计数法和计时法分别测算算法的运行时间;(4)通过分析对比,得出自己的结论。
三、所用仪器、材料(设备名称、型号、规格等或使用软件)1台PC及VISUAL C++6.0软件matlab .2008四、实验方法、步骤(或:程序代码或操作过程)实验采用三种方法求最大公约数1、连续整数检测法。
2、欧几里得算法3、蛮力法(短除法)根据实现提示写代码并分析代码的时间复杂度:算法一:连续整数检测法。
CommFactor1输入:两个自然数m和n输出:m和n的最大公约数1.判断m和n哪个数小,t=min(m,n)2.如果m%t==0&&n%t==0 ,结束2.1 如果t不是m和n的公因子,则t=t-1;3. 输出t ;根据代码考虑最坏情况他们的最大公约数是1,循环做了t-1次,最好情况是只做了1次,可以得出O(n)=n/2;算法二:欧几里德算法CommFactor2输入:两个自然数m和n输出:m和n的最大公约数1. r = m % n;2. 循环直到r 等于02.1 m = n;2.2 n = r;2.3 r = m % n;3. 输出n ;根据代码辗转相除得到欧几里得的: O(n)= log n算法三:蛮力法(短除法)CommFactor3输入:两个自然数m和n输出:m和n的最大公约数1.factor=1;2.循环变量i从2-min(m,n),执行下述操作:2.1 如果i是m和n的公因子,则执行下述操作:2.1.1 factor=factor*i;2.1.2 m = m / i; n = n / i;2.2 如果i不是m和n的公因子,则i=i+1;3. 输出factor;根据代码考虑最坏情况他们的最大公约数,循环做了i-1次;最好情况是只做了1次,可以得出: O(n)=n/2;MATLAB程序代码:main.mx=fix(rand(1,1000)*1000);y=fix(rand(1,1000)*1000);for i=1:1000A(i)=CommFactor2(x(i),y(i));endx=x';y=y';算法一:function r=CommFactor1(m,n)tic;if m>n)t=n;else t=m;while(t)if(m%t==0&&n%t==0)break;else t=t-1;endendr=ttoc;算法二:function r=CommFactor2(m,n)tic;r=mod(m,n);while r~=0m=n;n=r;r=mod(m,n);endr=n;toc;算法三:function factor=CommFactor3(m,n)tic;factor=1;themax=max(m,n);for i=2:1:themaxwhile (mod(m,i)==0)&&(mod(n,i)==0) factor=factor*i;m=m/i;n=n/i;endendtoc;三种算法时间复杂度比较:(c++语言)#include"iostream.h"#include"stdio.h"#include"stdlib.h"#include"time.h"#define N 100int w,w2,w3;//用于计数int f1(int m,int n){int t;if(m>n)t=n;else t=m;while(t){if(m%t==0&&n%t==0)break;else t=t-1;w++;}return t;}int f2(int m,int n){int r;r=m%n;w2=1;while(r!=0){m=n;n=r;r=m%n;w2++;}return n;}int f3(int m,int n){int i, factor = 1;for (i = 2; i <= m && i <= n; i++){while (m % i == 0 && n % i == 0) //此处不能用if语句{factor = factor * i;m = m / i; n = n / i;w3++;}}return factor;}int main(void){int m,n;printf(" 请输入m,n :\n");scanf("%d%d",&m,&n);int k;k=f1(m,n);printf(" 方法一最大公约数为:%d\n",k);k=f2(m,n);printf(" 方法二最大公约数为:%d\n",k);k=f3(m,n);printf(" 方法三最大公约数为:%d\n",k);printf("\n--------------------\n");printf("\n计数器显示结果:\n\n\n");printf("方法一:%d \n",w2);printf("方法二:%d \n",w);printf("方法三:%d \n",w3);printf("\n--------------------\n");float a,i;clock_t start,finish;double usetime;i=0;start= clock();while (i<1000000){f1(m,n);i++;}finish=clock();usetime= finish-start;printf(" 方法一用时%.f*10^(-6) 豪秒\n", usetime);i=0;start= clock();while (i<1000000){f2(m,n);i++;}finish=clock();usetime= finish-start;printf(" 方法二用时%.f*10^(-6) 豪秒\n", usetime);i=0;start= clock();while (i<1000000){f3(m,n);i++;}finish=clock();usetime= finish-start;printf(" 方法三用时%.f*10^(-6) 豪秒\n", usetime); }结果:(示例)。
matlab中表示日期时间有三种格式

matlab中表示日期时间有三种格式:(1)日期字符串(20-oct-2008等)有很多格式可以选择,date函数返回的就是该格式(2)连续日期数值(7.337417231638542e+005)以公元元年1月1日为起点计算经过的天数,now函数返回的就是该格式(3)日期向量(1.0e+003*[2.0070 0.0100 0.0280 0.0160 0.0210 0.0016])[年月日时分秒],clock返回的就是该函数一、获取当前日期时间函数1.date:按照日期字符串格式返回当前系统日期2.now:按照连续的日期数值格式返回当前系统时间3.clock:按照日期向量格式返回当前系统时间>>date,now,clockans =29-Nov-2008ans =7.3374e+005ans =1.0e+003 *2.0080 0.0110 0.0290 0.0160 0.0410 0.0259matlab中分别使用year,month,day,hour,minute,second从上面讲到的字符串和连续型日期时间格式中提取年月日时分秒等信息>>[year(date),year(now)]ans =2008 2008注意:上面的函数是没法从向量型日期时间格式中正确读取上述信息的>>year(clock)ans =5 0 0 0 0 0二、日期格式转换1.datestr(D,F):将任意格式的日期时间D按指定格式F转成日期字符串格式2.datenum:将任意格式的日期时间D转成连续日期格式3.datevec:将任意格式的日期时间D转成时间向量格式注意上面三种时间格式之间的任意转换有很多格式选择,根据需要自己调整,具体那些格式可以看帮助系统三、程序中应用的计时函数在编写程序时,经常需要获知代码的执行实际时间,这就需要在程序中用到计时函数,matlab 中提供了以下三种方法:1.cputime(单位不明)返回matlab启动以来的CPU时间,可以在程序执行钱保存当时的CPU时间,然后在程序执行结束后用cputime减去运行前保存的数值,就可以获取程序的实际运行时间>>t0=cputime;pause(3);TimeCost=cputime-t02.tic/toc(单位s)tic用在程序的开始,作用是启动一个计时器,然后在程序尾部放一个toc,表示终止计时器,并返回tic启动以来的总时s间3.etime(单位s)etime(t1,t2)用来计算两个日期向量t1和t2之间的时间差,结合前面讲到的clock函数也可以用来确定程序代码的运行时间>>t0=clock;pause(3);TimeCost=etime(clock,t0)在三种计时中建议使用第二种,相对来说最精确。
matlab中程序运算时间计算

3、cputime函数来完成
使用方法和etime相似,只是这个是使用cpu的主频计算的,和前面原理不同,使用格式如下
t0=cputime
。。。。。。。。。。。。。
t1=cputime-t0
复制代码
上面说到了三种方法,都是可以进行程序运行时间计算的,但是Matlab官方推荐使用tic/toc组合,When timing the duration of an event, use the tic and toc functions instead of clock or etime.
复制代码
2、etime(t1,t2)并和clock配合
来计算t1,t2之间的时间差,它是通过调用windows系统的时钟进行时间差计算得到运行时间的,应用的形式
t1=clock;
。。。。。。。Βιβλιοθήκη 。。。 t2=clock;
etime(t2,t1)
复制代码
至于例子我就不举了,因为在上面的例子中使用了etime函数了
% by dynamic of Matlab技术论坛
% see also
% contact me matlabsky@
% 2009-08-18 12:08:47
clc
tic;%tic1
t1=clock;
for i=1:3
etime计算程序从开始到现在运行的时间:2.562
======================================
toc计算第2次循环运行时间:2.8108
etime计算第2次循环运行时间:2.813
etime计算程序从开始到现在运行的时间:5.375
MATLAB实验指导书

实验一MATLAB集成环境使用与运算基础一、实验目的1.熟悉启动和退出MA TLAB的方法。
2.熟悉MATLAB命令窗口的组成。
3.掌握建立矩阵的方法。
4.掌握MATLAB各种表达式的书写规则以及常用函数的使用。
二、实验原理1.MA TLAB的启动MATLAB系统的启动有三种常见方法:1)使用Windows“开始”菜单。
2)运行MATLAB系统启动程序MA TLAB.exe。
3)利用快捷方式。
2.MA TLAB系统的退出要退出MA TLAB系统,也有三种常见方法:1)在MA TLAB主窗口File菜单中选择Exit MATLAB 命令。
2)在MA TLAB命令窗口输入Exit或Quit命令。
3)单击MATLAB主窗口的“关闭”按钮。
3.MA TLAB帮助窗口进入帮助窗口可以通过以下三种方法:1)单击MATLAB主窗口工具栏中的help按钮。
2)在命令窗口中输入helpwin、helpdesk或doc。
3)选择help菜单中的“MA TLAB help”选项。
4.MA TLAB帮助命令1)help命令在MA TLAB命令窗口直接输入help命令将会显示当前帮助系统中所包含的所有项目,即搜索路径中所有的目录名称。
同样,可以通过help加函数名来显示该函数的帮助说明。
2)lookfor命令help命令只搜索出那些关键字完全匹配的结果,lookfor命令对搜索范围内的m文件进行关键字搜索,条件比较宽松。
3)模糊查询用户只要输入命令的前几个字母,然后按tab键,系统就会列出所有以这几个字母开头的命令。
5.赋值语句1)变量=表达式2)表达式6.矩阵的建立1)直接输入法:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分开,不同行的元素之间用分号分开。
2)利用m 文件建立矩阵3)利用冒号表达式建立一个向量 e1:e2:e3 4) 利用linspace 函数产生行向量 linspace(a,b,n).三、实验仪器和设备1.计算机1台。
matlab数据类型及其简单的使用方法

matlab数据类型及其简单的使用方法2008-11-05 16:56matlab中有15种基本数据类型,主要是整型、浮点、逻辑、字符、日期和时间、结构数组、单元格数组以及函数句柄等。
Matlab主要数据类型的结构图如下所失:整型:通过intmax(class)和intmin(class) 函数返回该类整型的最大值和最小值,例如intmax(‘int8’)=127浮点浮点数:REALMAX('double')和REALMAX('single')分别返回双精度浮点和单精度浮点的最大值,REALMIN('double')和REALMIN ('single')分别返回双精度浮点和单精度浮点的最小值。
逻辑Logical:下例是逻辑索引在矩阵操作中的应用,将5*5矩阵中大于0.5的元素设定为0:A = rand(5);A(A>0.5)=0字符Matlab中的输入字符需使用单引号。
字符串存储为字符数组,每个元素占用一个ASCII字符。
如日期字符:DateString=’9/16/2001’实际上是一个1行9列向量。
构成矩阵或向量的行字符串长度必须相同。
可以使用char函数构建字符数组,使用strcat函数连接字符。
例如,命令name = ['abc' ; 'abcd'] 将触发错误警告,因为两个字符串的长度不等,此时可以通过空字符凑齐如:name = ['abc ' ; 'abcd'],更简单的办法是使用char函数:char(‘abc’,’abcd’),Matlab自动填充空字符以使长度相等,因此字符串矩阵的列纬总是等于最长字符串的字符数,例如size(char(‘abc’,’abcd’))返回结果[2,4],即字符串’abc’实际存在的是’abc ’,此时如需提取矩阵中的某一字符元素,需要使用deblank函数移除空格如name =char(‘abc’,’abcd’); deblank(name(1,:))。
Matlab中处理日期与时间的函数

Matlab中处理⽇期与时间的函数Matlab⽤三种格式来表⽰⽇期与时间(1)双精度型⽇期数字:⼀个⽇期型数字代表从公元0年到某⼀⽇期的的天数,例如,2008年8⽉26⽇夜时0点钟被表⽰为733646,⽽这同⼀天的中午12点就被表⽰为733646.5,也就是说任何⼀个时刻都可以⽤⼀个双精度型数字表⽰。
(2)不同形式的⽇期字符串:Matlab定义了28种标准⽇期格式的字符串。
(3)数值型的⽇期向量:⽤⼀个6元数组来表⽰⼀个⽇期时间,例如,[2008 8 26 12 5 0]表⽰2008年8⽉26⽇12点05分0秒;⽤⼀个3元数组来表⽰⼀个⽇期,例如,[2008 8 26]表⽰2008年8⽉26⽇。
⽤⽇期数字表⽰⽇期使计算机更容易计算,但是不直观,因此Matlab提供了许多函数来实现三种⽇期格式之间的转化。
(1)datestr:实现将⽇期数字和⽇期向量转化为⽇期字符串,可以在Matlab命令窗⼝中输⼊help datestr来查看关于datestr的⽤法。
(2)datenum:实现将⽇期字符串和⽇期向量转化为⽇期数字,可以在Matlab命令窗⼝中输⼊help datenum来查看关于datenum的⽤法。
(3)datevec:实现将⽇期数字和⽇期字符串转化为⽇期向量,可以在Matlab命令窗⼝中输⼊来help datevec查看关于datevec的⽤法。
Matlab中其他常⽤的函数:(1)clock:将当前时间和⽇期返回到⼀个(6元)数组中。
>> T = clockT =2008 8 26 12 31 32.75注:直接输出clock时,可能会以科学计数法的⽅式输出,clockans =1.0e+003 *2.0100 0.0010 0.0280 0.0190 0.0280 0.0296⽤fix(clock) 则能输出易于阅读的形式fix(clock)ans =2010 1 28 19 28 48(2)now:将当前时间和⽇期以⼀个双精度型⽇期数字返回。
提高MATLAB程序运算速度的几个窍门

提高MATLAB程序效率的几点原则,这些都是俺在这两年中参加四次数模编写大量m程序总结的经验,加之网上很多英雄也是所见略同。
1.“计算向量、矩阵化,尽量减少for循环。
”因为MATLAB本来就是矩阵实验室的意思,他提供了极其强大而灵活的矩阵运算能力,你就没必要自己再用自己编写的for循环去实现矩阵运算的功能了。
另外由于matlab是一种解释性语言,所以最忌讳直接使用循环语句。
但在有些情况下,使用for循环可以提高程序的易读性,在效率提高不是很明显的情况下可以选择使用for循环。
口说无凭,下面是利用tic与toc命令计算运算所用时间的方法,测试两种编程的效率。
需要说明的是没有办法精确计算程序执行时间,matlab帮助这样写到“Keep in mind that tic and toc measure overall elapsed time. Make sure that no other applications are running in the background on your system that could affect the timi ng of your MATLAB programs.”意思是说在程序执行的背后很可能有其他程序在执行,这里涉及到程序进程的的问题,m程序执行的过程中很可能有其他进程中断m程序来利用cup,所以计算出来的时间就不仅是m程序的了,在这种情况下我把那些寄点去掉,进行多次计算求他的平均时间。
n = 100;A(1:1000,1:1000) = 13;C(1:1000,1) = 15;D(1:1000,1) = 0;for k = 1:nD(:) = 0;ticfor i = 1:1000for j = 1:1000D(i) = D(i) + A(i,j)*C(j);endendt1(k) = toc;%------------------D(:) = 0;ticD = A*C;t2(k) = toc;endu = t1./t2;u(u<0) = [];plot(u)p = mean(u) t1、t2分别代表用for循环编程和矩阵化编程计算矩阵乘向量所用时间,u代表时间的比值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab中计算程序运行时间的三种方法
经常我们需要计算我们程序到底运行多长时间,这样可以比较程序的执行效率。
当然这个对于只有几秒钟的小程序没有什么意义,但是对于大程序就有很重要的意义了。
下面我们就说说Matlab中计算程序运行时间的三种常用方法吧!
注意:三种方法由于使用原理不一样,得到结果可能有一定的差距!
1、tic和toc组合(使用最多的)
计算tic和toc之间那段程序之间的运行时间,它的经典格式为
1. tic
2. 。
3. toc
复制代码
换句话说程序,程序遇到tic时Matlab自动开始计时,运行到toc时自动计算此时与最近一次tic之间的时间。
这个有点拗口,下面我们举个例子说明
1. % by dynamic of Matlab技术论坛
2. % see also
3. % contact me matlabsky@
4. % 2009-08-18 12:08:47
5. clc
6. tic;%tic1
7. t1=clock;
8. for i=1:3
9. tic ;%tic2
10. t2=clock;
11. pause(3*rand)
12. %计算到上一次遇到tic的时间,换句话说就是每次循环的时间
13. disp(['toc计算第',num2str(i),'次循环运行时间:',num2str(toc)]);
14. %计算每次循环的时间
15. disp(['etime计算第',num2str(i),'次循环运行时间:',num2str(etime(clock,t2))]);
16. %计算程序总共的运行时间
17. disp(['etime计算程序从开始到现在运行的时间:',num2str(etime(clock,t1))]);
18. disp('======================================')
19. end
20. %计算此时到tic2的时间,由于最后一次遇到tic是在for循环的i=3时,所以计算
的是最后一次循环的时间
21. disp(['toc计算最后一次循环运行时间',num2str(toc)])
22. disp(['etime程序总运行时间:',num2str(etime(clock,t1))]);
复制代码
运行结果如下,大家可以自己分析下
1. toc计算第1次循环运行时间:
2.5628
2. etime计算第1次循环运行时间:2.562
3. etime计算程序从开始到现在运行的时间:2.562
4. ======================================
5. toc计算第2次循环运行时间:2.8108
6. etime计算第2次循环运行时间:2.813
7. etime计算程序从开始到现在运行的时间:5.375
8. ======================================
9. toc计算第3次循环运行时间:2.0462
10. etime计算第3次循环运行时间:2.046
11. etime计算程序从开始到现在运行的时间:7.421
12. ======================================
13. toc计算最后一次循环运行时间2.0479
14. etime程序总运行时间:7.421
复制代码
2、etime(t1,t2)并和clock配合
来计算t1,t2之间的时间差,它是通过调用windows系统的时钟进行时间差计算得到运行时间的,应用的形式
1. t1=clock;
2. 。
3. t2=clock;
4. etime(t2,t1)
复制代码
至于例子我就不举了,因为在上面的例子中使用了etime函数了
3、cputime函数来完成
使用方法和etime相似,只是这个是使用cpu的主频计算的,和前面原理不同,使用格式如下
1. t0=cputime
2. 。
3. t1=cputime-t0
复制代码
上面说到了三种方法,都是可以进行程序运行时间计算的,但是Matlab官方推荐使用tic/toc 组合,When timing the duration of an event, use the tic and toc functions instead of clock or etime.
至于大家可以根据自己的喜好自己选择,但是使用tic/toc的时候一定要注意,toc计算的是与最后一次运行的tic之间的时间,不是第一个tic,更不是第二个。