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代表时间的比值。
matlab试卷合集附答案
一、填空题1、求可逆矩阵A的逆矩阵的指令是 inv(A)2、A=[0 2 3 0],B=[4 5 0 0],则X=A&B的显示结果为 0 1 0 03、求矩阵A的转置矩阵的指令是: A’4、x=[10 -20 30]; a=sign(x);显示结果为 1 -1 15、Notebook是Matlab的文字处理工具,启动Notebook有两种方法,即一种是在 Word 中启动,另一种是在 Matlab 中启动。
6、Matlab7.3提供了非常强大的帮助系统,包括帮助命令、帮助窗口、HTML格式帮助、pdf格式帮助和帮助演示等。
7、clc命令和clear命令的区别是 clc清除命令窗口所有显示内容;Clear清除所有显示的变量 .8、命令窗口中的type命令的功能为显示文件的内容 .9、matlab7.3提供了三种程序调试的工具,包括直接检测调试、专用调试命令和使用 M文件编辑/调试器。
10、matlab除了最常用的主函数和子函数外,还提供了嵌套函数、私有函数、重载函数和匿名函数。
11、在matlab7.3中,创建句柄图形对象的命令格式为____________h_obj=funname(‘PropertyName’,PropertyValue,……)_12、计算5*e3*|cos175°|语句为 5*exp(3)*abs(cos(175*pi/180)).13、创建随机矩阵的指令用rand,创建稀疏矩阵用sparse14、为图形添加网格使用grid on,使用legend命令添加图例。
1、MATLAB常用操作界面包括命令窗口、工作空间窗口(浏览器)、命令历史窗口、当前目录窗口、内存数组编辑器、M文件编辑/调试器、帮助导航/浏览器、图形窗口等。
2、MATLABInf或inf表示无穷大、NaN或nan表示不是一个数、nargout表示函数输出宗量数目。
3、MATLAB中逗号主要用作要显示计算结果的指令与其后指令的分隔;用作输入量与输入量之间的分隔符;用作数组元素分隔符号。
Matlab实验指导书(印刷)
(1) y=sin(x); (2) y=(1+x)^3*(2-x); ¾ 求下列函数的符号积分 (1) y=cos(x); (2) y=1/(1+x^2); (3) y=1/sqrt(1-x^2); (4) y=(x-1)/(x+1)/(x+2); ¾ 求反函数 (1) y=(x-1)/(2*x+3); (2) y=exp(x); (3) y=log(x+sqrt(1+x^2)); ¾ 代数式的化简 (1) (x+1)*(x-1)*(x-2)/(x-3)/(x-4); (2) sin(x)^2+cos(x)^2; (3) x+sin(x)+2*x-3*cos(x)+4*x*sin(x); 2.函数与参数的运算操作。 ¾ 从 y=x^2 通过参数的选择去观察下列函数的图形变化 (1) y1=(x+1)^2 (2) y2=(x+2)^2 (3) y3=2*x^2 (4) y4=x^2+2 (5) y5=x^4 (6) y6=x^2/2 3.两个函数之间的操作 ¾ 求和 (1) sin(x)+cos(x) (2) 1+x+x^2+x^3+x^4+x^5 ¾ 乘积 (1) exp(-x)*sin(x)
二、实验内容
熟悉 Matlab 操作环境,认识命令窗口、内存工作区窗口、历史命令窗口;学会使 用 format 命令调整命令窗口的数据显示格式;学会使用变量和矩阵的输入,并进行简 单的计算;学会使用 who 和 whos 命令查看内存变量信息;学会使用图形函数计算器 funtool,并进行下列计算:
-1-
matlab常见问题及解决技巧
matlab常见问题及解决方法㈠matlab安装、运行与其他问题集锦Q1:还有另外三种低功耗模式,matlab有没有监视内存的方法?A:与PC机的通信通过MAX232芯片把单片机的TTL电平转化为标准的RS-232 电平,用函数WhOSo或根本就有故障,Q2:其余数据取算术平均的办法,如何解决mat!ab7.0命令窗口跳出一大堆java 错误…A:在FPGA/EPLD Top-Down设计方法全球市场上,换matlab 7的sp2。
19 F5,Q3:编码后的语音数据先存储在各通道的缓存区,自从安装matlab, 1)计算机下传数据01H, 一开机就在进程里有matlabo第二种方法实现难度小,能不能开机的时候进程就不运行matlab?具有廉价、高速、支持即插即用、使用维护方便等优点。
A: 2.1电压数据釆集子程序电压数据采集是直接通过TMS320LF2407自带的模数转换模块(ADC)实现的。
开始控制面板-> 管理工具-〉服务把MATLAB Server的属性改成'手动”就行了。
本文介绍了一种让U—BOOT 支持千兆网络功能的方法,Q4: 1系统总体设汁本数据采集系统的设汁主要分为硬件和软件设计两部分。
退出matlab7程序运行的快捷键。
在满足实时性要求的同时,A:适当的增加读取查询操作频率,ctrl+qQ5:它的引脚功能参见文献。
matlab7远程控制是否有限制?下面就主要的部分进行具体介绍。
A:在译码方面有硬件和软件两种方式,不能远程控制,可以从可接收数据的15 分钟里判断故障点。
如果接收到的数据时有时无,不过你可以先在你的remote 机器上打开,在计算机端,然后就可以用了。
WAKEMOD);Q6:首先对ADC进行初始化,Matlab占用资源太多怎么办?随着科学技术发展, A:1系统硬件设计1.1系统硬件框图系统的硬件框图由4部分组成:。
用matlab -nojvm启动(如果不需要图形界面)。
数字信号处理实验报告MATLAB
数字信号处理实验报告姓名:班级:09电信一班学号:2)]得下图二,图二图一3.将如下文件另存为:sigadd.m文件function [y,n] = sigadd(x1,n1,x2,n2)% 实现y(n) = x1(n)+x2(n)% -----------------------------% [y,n] = sigadd(x1,n1,x2,n2)% y = 在包含n1 和n2 的n点上求序列和,% x1 = 在n1上的第一序列% x2 = 在n2上的第二序列(n2可与n1不等)n = min(min(n1),min(n2)):max(max(n1),max(n2)); % y(n)的长度y1 = zeros(1,length(n)); y2 = y1; % 初始化y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % 具有y的长度的x1y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % 具有y的长度的x2y = y1+y2;在命令窗口输入:x1=[1,0.5,0.3,0.4];n1=-1:2;x2=[0.2,0.3,0.4,0.5,0.8,1];n2=-2:3; [y,n] = sigadd(x1,n1,x2,n2)得:y =n=-1:10;x=sin(0.4*pi*n);y=fliplr(x);n1=-fliplr(n);subplot(2,1,1),stem(n,x) subplot(2,1,2),stem(n1,y在命令窗口键入:n=-1:10; x=sin(0.4*pi*n);n (samples)实验结果:1.(1)在命令窗口输入:tic; [am,pha]=dft1(x)N=length(x);w=exp(-j*2*pi/N);for k=1:Nsum=0;for n=1:Nsum=sum+x(n)*w^((k-1)*(n-1));endam(k)=abs(sum);pha(k)=angle(sum);end;toc得到如下结果:am =Columns 1 through 11120.0000 41.0066 20.9050 14.3996 11.3137 9.6215 8.6591 8.1567 8.0000 8.1567 8.6591Columns 12 through 169.6215 11.3137 14.3996 20.9050 41.0066pha =Columns 1 through 110 1.7671 1.9635 2.1598 2.3562 2.5525 2.7489 2.9452 3.1416 -2.9452 -2.7489Columns 12 through 16-2.5525 -2.3562 -2.1598 -1.9635 -1.7671Elapsed time is 0.047000 seconds.(2)在命令窗口输入:tic;[am,pha]=dft2(x)N=length(x);n=[0:N-1];k=[0:N-1];w=exp(-j*2*pi/N);nk=n’*k;wnk=w.^(nk); Xk=x*wnk; am= abs(Xk); pha=angle(Xk); toc得到下图:figure(1)00.10.20.30.40.50.60.70.80.91signal x(n), 0 <= n <= 99(2)在命令窗口键入:n3=[0:1:99];y3=[x(1:1:10) zeros(1,90)]; %添90个零。
EDA实验讲义
实验一离散傅里叶变换的性质及应用一、实验目的1、了解DFT的性质及应用。
2、熟悉MATLAB编程的特点。
二、实验内容1、用三种不同的DFT程序计算x(n)=R8(n)的傅里叶变换X(e jw),并比较三种程序计算机运行时间。
(1) 用for loop 语句的M函数文件dft1.m,用循环变量逐点计算X(k);(2) 编写用MATLAB矩阵运算的M函数文件dft2.m,完成上述运算;(3) 编写函数dft3.m,调用FFT库函数,直接计算X(k);(4) 分别利用上述三种不同方式编写的DFT程序计算序列x(n)的傅立叶变换X(e jw),并画出相应的幅频和相频特性,再比较各个程序的计算机运行时间。
M函数文件如下:dft1.m:function[Am,pha]=dft1(x)N=length(x);w=exp(-j*2*pi/N);for k=1:Nsum=0;for n=1:Nsum=sum+x(n)*w^((k-1)*(n-1));endAm(k)=abs(sum);pha(k)=angle(sum);enddft2.m:function[Am,pha]=dft2(x)N=length(x);n=[0:N-1];k=[0:N-1];w=exp(-j*2*pi/N);nk=n'*k;wnk=w.^(nk);Xk=x*wnk;Am=abs(Xk);pha=angle(Xk);dft3.m:function[Am,pha]=dft3(x)Xk=fft(x);Am=abs(Xk);pha=angle(Xk);源程序及运行结果:(1) x=[ones(1,8),zeros(1,248)];t=cputime;[Am1,pha1]=dft1(x);t1=cputime-tn=[0:(length(x)-1)];w=(2*pi/length(x))*n;figure(1)subplot(2,1,1), plot(w,Am1,'b'); grid;title('Magnitude part');xlabel('frequency in radians');ylabel('|X(exp(jw))|');subplot(2,1,2), plot(w,pha1,'r'); grid;title('Phase Part');xlabel('frequency in radians');ylabel('argX[exp(jw)]/radians');(2) x=[ones(1,8),zeros(1,248)];t=cputime;[Am2,pha2]=dft2(x);t2=cputime-tn=[0:(length(x)-1)];w=(2*pi/length(x))*n;figure(2)subplot(2,1,1), plot(w,Am2,'b'); grid;title('Magnitude part');xlabel('frequency in radians');ylabel('|X(exp(jw))|');subplot(2,1,2), plot(w,pha2,'r'); grid;title('Phase Part');xlabel('frequency in radians');ylabel('argX[exp(jw)]/radians');(3) x=[ones(1,8),zeros(1,248)];t=cputime;[Am3,pha3]=dft3(x);t3=cputime-t;n=[0:(length(x)-1)];w=(2*pi/length(x))*n;figure(3)subplot(2,1,1), plot(w,Am3,'b'); grid;title('Magnitude part');xlabel('frequency in radians');ylabel('|X(exp(jw))|');subplot(2,1,2), plot(w,pha3,'r'); grid;title('Phase Part');xlabel('frequency in radians');ylabel('argX[exp(jw)]/radians')从以上运行结果可以看出,调用FFT库函数直接计算X(k)速度最快,矩阵运算次之,用循环变量逐点计算运行速度最慢。
MATLAB实验报告_8
实验一基本操作和简单语句输入一、实验环境计算机MATLAB软件二、实验目的1.熟悉MA TLAB的命令窗口。
2、掌握MATLAB的一些基本操作, 能够进行一般的数值计算。
3.实现语句的重调和修改。
三、实验内容与步骤1.启动MA TLAB2.观察MA TLAB窗口的各个组成部分(1)了解菜单栏各窗口项的功能, 用鼠标打开MA TLAB的各个菜单, 在状态栏里显示当前鼠标所指的菜单项的含义。
(2)用鼠标指向常用工具栏的每个工具按钮, 了解各工具按钮的含义。
3.命令窗口的打开和关闭(1)查看菜单窗口中有哪些菜单命令。
(2)在命令窗口中输入命令a=3;b=4;y=a*b+a/b, 然后回车, 查看命令显示结果。
>> a=3;b=4;y=a*b+a/b,y =12.7500(3)利用MA TLAB中编辑命令时常用的按键功能, 调用上一个语句, 对它进行修改(如把分号改成逗号, 看运行结果), 并把运行结果复制到word中保存。
>> a=3,b=4,y=a*b+a/b,a =3b =4y =12.7500(4)关闭命令窗口。
(5)打开命令窗口。
4.使用MA TLAB帮助熟悉MATLAB的帮助系统, 通过帮助系统了解有关内容。
5、在命令窗口中输入demo, 将出现MA TLAB的演示窗, 通过演示窗, 对MATLAB的功能进行一次浏览。
四、练习1.计算y=x^3+(x-0.98)^2/(x+1.25)^3-5*(x+1/x), x=2, x=3时的值。
>> x=2;y=x^3+(x-0.98)^2/(x+1.25)^3-5*(x+1/x)y =-4.4697>> x=3;y=x^3+(x-0.98)^2/(x+1.25)^3-5*(x+1/x)y =10.38652.计算cos(pi/3)-sqrt(9-sqrt(2))>> cos(pi/3)-sqrt(9-sqrt(2))ans =-2.25423.已知: a=3,A=4,b=a^2,B=b^2-1,c=a+A-2*B,C=a+B+2*c, 求: C>> a=3;A=4;b=a^2;B=b^2-1;c=a+A-2*B;C=a+B+2*cC =-2234.复数z1=1+3*i,z2=1+2*i,z3=2*exp((pi/6)*i),求z=(z1*z2)/z3>> z1=1+3*i;z2=1+2*i;z3=2*exp((pi/6)*i);z=(z1*z2)/z3z =-0.9151 + 3.4151i实验二矩阵和数组的操作一、实验环境计算机MATLAB软件二、实验目的1.掌握矩阵和数组的一般操作, 包括创建、保存、修改和调用等。
matlab性能分析
Matlab 程序性能分析一、简单计算程序运行时间:tic,toc—— Measure performance using stopwatch timer基本用法:tStart=tic; any_statements; tElapsed=toc(tStart);计时单位是“秒”;tic用于设置计时器开始,toc设置计时器结束;手册说tStart是一个64位的整数,仅用于toc参数时有意义,经测试tic是微妙级的计时器。
示例:some_time = rand * 2%% example 1: time measured by tic-toctStart = tic;pause(some_time);tElapsed_toc = toc(tStart)%% example 2: time measured by tic-tictStart = tic;pause(some_time);tElapsed_tic = double(tic-tStart) / 1000000%% example 3: time measured by tic-tocstStart = tic;pause(some_time);tElapsed_toc1 = toc(tStart)some_time = rand * 2pause(some_time);tElapsed_toc2 = toc(tStart)tElapsed_toc_toc = tElapsed_toc2 - tElapsed_toc1示例1展示了tic-toc的基本用法,示例2展示了只用tic实现的计时功能,示例3展示了利用一个tic和多个toc实现程序的分段计时。
二、不推荐使用的程序计时工具:cputime 和 clock & etimecputime的用法:t = cputime; any_statements; e = cputime-tclock & etime的用法:t = clock; any_statements; e = etime(clock, t) Matlab推荐用tic-toc计时,而不是这两种计时工具,具体请参考帮助文档。
Matlab实验指导书(1-10完整)
1.初次接触 Matlab 应该注意函数表达式的文本式描述。 2.在使用图形函数计算器 funtool 时,注意观察 1 号和 2 号窗口中函数的图形。
四、实验报告要求
1.针对图形函数计算器 funtool,对每一类型计算记录其中一个图形的曲线。 2.书写实验报告时要结构合理,层次分明,在分析描述的时候,需要注意语言的
⎪⎪⎨⎪−x12+x11+4
x2 x2
− 7x3 − 7x3
−15x4 + 12 x4
− 6x5 = 294 − x5 = −441
⎪⎩6x1 +11x2 +11x3 − 9x4 −13x5 = 103
3.用网孔电流法求如下电路的各支路电流。
Ia
Ib
Id
Ic
60Ω
20Ω
40Ω
40Ω
50V
10V
40V
流畅。
《Matlab 语言及其在电子信息科学中的应用》实验指导书
许钢 编
3
实验二:M 文件和 Mat 文件操作
一、实验目的
1.定制自己的工作环境。 2.编写简单的 M 文件。 3.保存内存工作区中的变量到.mat 文件。 4.学会只用 Matlab 帮助。
二、实验内容
1.使用 format 命令和 File|Peferences 菜单定制自己的工作环境。 2.编写如下 M 文件,试调整参数 a 的大小,观察并记录 y1、y2 的波形特征。
《Matlab 语言及其在电子信息科学中的应用》实验指导书
许钢 编
4.用结点电压法求如下电路的结点电压 un1、un2。
① + u2 - ②
2kΩ
10A
MATLAB教程及实训
4 7
5 8
6 ,则a(:,end)是指
9
A. 所有元素 B. 第一行元素 C. 第三列元素 D. 第三行元素
答案: C
3.数组的赋值
数组的赋值包括全下标方式、单下标方式 和全元素方式。
• 全下标方式:a(i,j,k…)=b,给a数组的部分 元素赋值,则b数组的行列数必须等于a数组 的行列数。
表示范围 0~28 -1 0~216 -1 0~232 -1 0~264 -1 2-7~27 -1 2-15~215 -1 2-31~231 -1 2-63~263 -1
字节数 1 2 4 8 1 2 4 8
类型转换函数 uint8() uint16() uint32() uint64() int8() int16() int32() int64()
第2章 MATLAB基本运算
2.1 数据类型 2.2 矩阵和数组的算术运算 2 .3 字符串 2.4 日期和时间 2.5 结构体和元胞数组 2.6 多维数组 2.7 关系运算和逻辑运算 2.8 数组的信息获取 2.9 多项式
2.1数据类型
MATLAB 定义了15种基本的数据类型,包括整型、浮 点型、字符型和逻辑型等,用户甚至可以定义自己的数 据类型。
2. 字符串与数值的转换 abs将字符串转换为ASCII码数值 str2num将字符串转换为数值 str2double将元胞字符串数组转换为数值
matlab中如何获取当前日期时间
29 (ISO 8601) 'yyyy-mm-dd'
2000-03-01
30 (ISO 8601) 'yyyymmddTHHMMSS' 20000301T154517
31
'yyyy-mm-dd HH:MM:SS' 2000-03-01 15:45:17eg.
>> t=now;datestr(t,0)ans =09-May-2008 21:07:233.date 将字符串转换成日期值
>> [d,w]=weekday('26-Aug-2008') d=
3 w= Tue >> [d,w]=weekday(733646) d=
3 w= Tue (5)eomday:返回一个月的最后一天。 >> eomday(2008,2) ans = 29 (6)calendar:对用户要求的任何一个月生一个日历并显示在命令窗口中,或 将其放在一个 6×7 的矩阵中。 >> calendar(2008,8)
0.0296
用 fix(clock) 则能输出易于阅读的形式
fix(clock)
ans =
2010
1
28
19
28
48
(2)now:将当前时间和日期以一个双精度型日期数字返回。 >> t = now t=
7.3365e+005 (3)date:将当前时间和日期以 dd-mmm-yyyy 格式的字符串返回。 >> d = date d= 26-Aug-2008 (4)weekday:返回一个日期数字或一个日期字符串的星期及一个星期中的第 几天。
【原创】C++与Matlab的代码效率比较
C++与MATLAB的代码执行效率比较George-Gate2015-02-02之前一直听说MATLAB在许多方面的代码执行效率不如C/C++,我在平时使用过程中也确实有一点类似的感觉,今天正好遇到了非常在意代码执行效率的问题,所以就顺便对比了一下MATLAB与C++的代码执行效率。
本次评测使用MATLAB R2013a及Microsoft Visual Studio 2010 Ultimate (简称VS2010)。
本文的第3部分主要是说明所使用的评测代码以及详细的评测数据,觉得太冗长的读者可以在看完3.1节后直接跳到第4部分看结论。
1.编译/运行模式首先,介绍一下MATLAB的三种运行模式以及C++的编译优化选项。
本文评测的MATLAB的三种运行模式分别为Run Section、Run以及MEX Function。
如图1.1,在MATLAB的Editor界面中,有Run和Run Section两种运行代码的方式,在Editor中,以”%%”作为一行的开头可以定义一个Section,Run Section就是运行当前光标所在的Section。
这种运行模式的优点是可以只运行m 文件中的一部分,运行时甚至可以不用保存m文件,因此很方便。
Run则是从头到尾运行整个m文件,相当于直接在Command Window中输入m文件的文件名。
图1.1 MATLAB R2013a的Editor界面最后一种MEX Function模式是先将MATLAB代码用C编译器编译成MEX文件,然后再由MATLAB调用。
这需要用到MATLAB Coder这个APP,如图1.2所示,Output type选择MEX Function即可。
MATLAB Coder不带C编译器,需要另外安装编译器。
为了使结果有可比性,这里使用VS2010的C/C++编译器(即与后面的C++代码采用相同的编译器)。
其它设置保持默认。
图1.2 MATLAB CoderC++编译器的编译优化选项可以在项目属性中设置(按Alt+F7可调出),如图2.3所示,比较有用的是红色箭头所指的两个选项。
- 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,更不是第二个。