MATLAB及在电子信息课程中的应用 2_第1页
MATLAB及在电子信息课程中的应用 2_第2页
MATLAB及在电子信息课程中的应用 2_第3页
MATLAB及在电子信息课程中的应用 2_第4页
MATLAB及在电子信息课程中的应用 2_第5页
已阅读5页,还剩302页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2020/6/7,1,MATLAB及在电子信息课程中的应用,朱军junzhu,2020/6/7,2,第一篇语言篇,第1章MATLAB语言概述第2章基本语法第3章MATLAB的开发环境和工具第4章MATLAB的其他函数库,2020/6/7,3,第二篇应用篇,第5章MATLAB在电路中的应用第6章MATLAB在信号与系统中的应用第7章MATLAB在数字信号处理中应用第8章MATLAB在自动控制原理中应用第9章MATLAB工具箱简介附录A、B、C、D,2020/6/7,4,第1章MATLAB语言概述,1.1MATLAB语言的发展1.2MATLAB语言的特点1.3MATLAB的工作环境1.3.1命令窗1.3.2图形窗1.3.3文本编辑窗1.4演示程序1.5网络资源,2020/6/7,5,1.1MATLAB语言的发展,1.1.1MATLAB概述MATLAB是集数值计算、符号运算及图形处理等强大功能于一体的科学计算语言,是一种交互式的以矩阵为基础的系统计算平台,它用于科学和工程的计算与可视化。它的优点在于快速开发计算方法,而不在于计算速度。MATLAB已成为一门高校必修的课程,也是最为普遍的计算工具之一。,2020/6/7,6,1.1MATLAB语言的发展(续),1.1.2Matlab的发展MATLAB名字由MATrix和LABoratory两词的前三个字母组合而成。那是20世纪七十年代,时任美国新墨西哥大学计算机科学系主任的CleveMoler出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK矩阵软件工具包库程序的的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB。1984年由Little、Moler、SteveBangert合作成立MathWorks公司,并把MATLAB正式推向市场。从这时起,MATLAB的内核采用C语言编写,而且除原有的数值计算能力外,还新增了数据图视功能。,2020/6/7,7,1997年仲春,MATLAB5.0版问世,紧接着是5.1、5.2,以及和1999年春的5.3版。现今的MATLAB拥有更丰富的数据类型和结构、更友善的面向对象、更加快速精良的图形可视、更广博的数学和数据分析资源、更多的应用开发工具。2000年末又推出6.0版本。无论在界面的设计上还是在内容上较以前版本都有很大的进展。2004年又推出了7.0版本,2020/6/7,8,1.1MATLAB语言的发展(续),1.1.3Matlab的版本演化Matlab1.0Pcmatlab-matlab386Matlab3.5+simulinkMatlab4.0:simlink内嵌(1992)Matlab5.0:全面的面向对象Matlab5.15.3(1999)Matlab6.0(2000)Matlab6.5:购并了MATRIXxMatlab7.0:(2004),2020/6/7,9,1.2MATLAB语言的特点,友好的工作平台和编程环境简单易用的程序语言强大的科学计算及数据处理能力出色的图形处理功能应用广泛的模块集和工具箱实用的程序接口和发布平台模块化的设计和系统级的仿真,2020/6/7,10,1.3MATLAB的工作环境,1.3.1命令窗(CommandWindow)单行命令执行方式执行结果直接显示1.3.2图形窗(FigureWindow)用图形方式表示计算结果1.3.3文本编辑窗(FileEditor)多行命令组成语言组,可以文件方式存盘,下面就具体看一下MATLAB的工作环境演示。,2020/6/7,11,1.4演示程序,在MATLAB的命令窗中键入demo或demos,%pend.mplot(-0.2,0.2,0;0,color,y,linestyle,-,linewidth,10);g=0.98;l=1;theta0=pi/6;x0=l*sin(theta0);y0=-l*cos(theta0);axis(-0.75,0.75,-1.25,0);axis(off);head=line(x0,y0,color,r,linestyle,.,erasemode,xor,markersize,40);body=line(0;x0,0,y0,color,b,linestyle,-,erasemode,xor);t=0;dt=0.01;whilet=(大于或等于)、=(等于)、=(不等于)。MATLAB的关系操作符可以用来比较两个大小相同的数组,或者比较一个数组和一个标量。在与标量比较时,结果和数组大小一样。a=1:9;b=a4b=000011111c=a(a4)c=56789,2020/6/7,53,2.4.1关系操作符,矩阵查找和排序子矩阵的查找使用find命令完成,它返回关系表达式为真的下标。例如:a=10:20;find(a15)ans=7891011矩阵的排序使用sort函数,它将矩阵按照升序排列。,2020/6/7,54,2.4.2逻辑运算,逻辑操作符定义了一种与或非的关系表达式。MATLAB的逻辑操作符有y=sin(t);z1=(t2*pi).*y;w=(tpi/3,2020/6/7,63,2.4.4流程控制语句,脚本对于简单问题,使用直接输入命令简单有效;对稍复杂和多次重复的应用,直接输入命令比较麻烦。MATLAB提供了逻辑解决方案,它允许用户把多个命令放在一个简单的文本文件中,如同在MATLAB中键入命令一般,这种文件称为脚本文件,由于脚本文件以m为扩展名,它常称为M文件。脚本文件为文本形式的,对跨平台处理十分有利。使用脚本文件,可以把命令保存在磁盘上,便于以后的访问;同时对使用大的数组也带来的方便;增加注释可以为脚本中的命令作文挡以免以后忘记。,2020/6/7,64,2.4.4流程控制语句,为了便于应用,MATLAB提供了一些流程控制的命令。这些命令对脚本编写带来了一些方便,但是需要注意的是,尽量不要使用这些流程控制命令,尤其是循环控制命令。If语句很多情况下,命令的序列必须根据关系的检验有条件的执行,它由if-else-end结构提供。它的结构如下:ifexpression1commands1elseifexpression2commands2elseifelsecommandsend,2020/6/7,65,2.4.4流程控制语句,在执行过程中,MATLAB依次检查各个表达式,只执行第一个表达式为真的命令串,接下来的关系表达式不检验,跳过其余的if-else-end结构,而且,最后的else命令可有可无。,2020/6/7,66,求,2020/6/7,67,2.4.4流程控制语句,for循环for循环允许一组命令以固定的次数重复,它的一般形式是forx=arraycommandendfor和end之间的命令串按数组array的每一列执行一次,直到n次后终止。如:forj=1:2:10y=j+j.2;end,2020/6/7,68,2.4.4流程控制语句,for循环不能使用内部重新赋值循环变量而终止;for循环内部接受任何有效的MATLAB数组;for循环可以嵌套;只要有矩阵形式可以解决的问题,不要使用for循环。使用for循环的算法执行很慢,一个好的MATLAB算法不应当出现循环语句。Tic/toc循环可以使用break跳出,但只跳出所在的循环,不跳出整个嵌套结构。,2020/6/7,69,2.4.4流程控制语句,while循环与for循环以固定的次数求一组指令相反,while循环以不定的次数求一组语句的值。While循环的一般形式为:whileexpressioncommondsend只要表达式expression里的所有元素为真,就执行命令串commands。通常表达式求值给一个标量值,单数组值也同样有效。,2020/6/7,70,求,2020/6/7,71,【例】Fibonacci数组的元素满足Fibonacci规则:,;且。现要求该数组中第一个大于10000的元素,a(1)=1;a(2)=1;i=2;whilea(i)=10000a(i)break;end;Endi结果:ans=10946i=21,2020/6/7,73,2.4.4流程控制语句,Switch语句是一种均衡实现的多分支语句。SwitchexpressionCase值1commands1Case值2commands2OtherwisecommandsNend,2020/6/7,74,学生的成绩管理,用来演示switch结构的应用。,clear;fori=1:10ai=89+i;bi=79+i;ci=69+i;di=59+i;end;c=d,c;Name=Jack,Marry,Peter,Rose,Tom;Mark=72,83,56,94,100;Rank=cell(1,5);S=struct(Name,Name,Marks,Mark,Rank,Rank);,fori=1:5switchS(i).Markscase100S(i).Rank=满分;caseaS(i).Rank=优秀;casebS(i).Rank=良好;casecS(i).Rank=及格;otherwiseS(i).Rank=不及格;endenddisp(学生姓名,得分,等级);disp()fori=1:5;disp(S(i).Name,blanks(6),num2str(S(i).Marks),blanks(6),S(i).Rank);end;,2020/6/7,76,2.5基本绘图方法,2.5.1直角坐标中的两维曲线plot(y)以y的下标作为x坐标,以y值作为y坐标。plot(x,y)数组x和y的长度应匹配。每次绘制将清除以前的图形。,2020/6/7,77,2.5.1直角坐标中的两维曲线,图形的标注和图例1、title(text)%给图形加上标题2、xlabel(text)%给X轴加上说明3、ylabel(text)%给Y轴加上说明4、zlabel(text)%给Z轴加上说明5、text(x,y,string)%在图形指定位置加上说明6、gtext(string)%利用鼠标在图形加上说明7、legend(string1,string2,.)%给图形加图例8、legendoff%关闭图例,如:作y=sin(t)的二维图形t=linspace(0,3*pi,200);y=sin(t);plot(t,y);title(y=sin(t);xlabel(t/s);ylabel(y=sin(t);text(3,0.4,y=sin(t);legend(y=sin(t);gtext(y=sin(t),2020/6/7,79,2.5.2线型、点型和颜色,plot(x,y,r:)后面是颜色和线型,2020/6/7,80,2.5.3多条曲线的绘制,1、plot(x1,y1,x2,y2);2、plot(x1,y1,r,x2,y2);3、plot(x1,y1)hold是乒乓切换holdon%图形保持plot(x2,y2,r)holdoff%解除保持4、plot(t,y1,y2,y3)%自动给颜色和线型。5、plotyy(x1,y1,x2,y2)%可画2个不同纵坐标的图,t=0:0.1:3*pi;y1=sin(t);y2=cos(t);plot(t,y1,r-.,t,y2,k);xlabel(t/s);ylabel(y1=sin(t),y2=cos(t);title(y1=sin(t),y2=cos(t);text(3,0.4,y1=sin(t);text(2,0,y2=cos(t);legend(y1=sin(t),y2=cos(t);,2020/6/7,82,2.5.4屏幕控制与其他2维绘图,1.figure%打开图形窗口2.figure(n)%打开指定图形窗口3.close%关闭当前图形窗口4.closeall%关闭所有图形窗口5.close(n)%关闭指定图形窗口6.clf%清除窗口内所有内容,2020/6/7,83,2.5.4屏幕控制与其他2维绘图(续),subplot(m,n,p)%图形分为mxn个子图,并指定第p个。排号从左到右,从上到下。stem(t,y)%绘脉冲图stairs(t,y)%绘阶梯图bar(t,y)%绘条形图errorbar(t,y)%绘误差条形图hist(y)%绘直方图fill(t,y,r)%绘填充图,如y=exp(-0.1t)*sin(t)t=0:0.3:4*pi;y=exp(-0.1*t).*sin(t);figure(3)plot(t,y,k*);figure(4)subplot(2,2,1);stem(t,y,k.);title(stem(t,y);subplot(2,2,2);stairs(t,y,b);title(stairs(t,y);subplot(2,2,3);bar(t,y,g);title(bar(t,y);subplot(2,2,4);fill(t,y,r);title(fill(t,y,r);,hist(y)t=0:0.1:4*pi;y=exp(-0.1*t).*sin(t);y1=5.*y.*sin(t);plotyy(t,y,t,y1);,2020/6/7,86,2.5.4屏幕控制与其他2维绘图(续),pause%暂停gridon%增加网格gridoff%取消网格grid%乒乓增加和取消网格loglog%双对数坐标log10similogx%半对数坐标,x轴半对数similogy%半对数坐标,y轴半对数polar(theta,rho)%极坐标图,2020/6/7,87,2.5.4屏幕控制与其他2维绘图(续),23、虚数的绘图-Z为虚数plot(Z)%实部为x坐标,虚部为y轴plot(t,Z)%虚部丢失axis(xmin,xmax,ymin,ymax)%定义坐标axissquare%两轴坐标长度相等axisequal%两轴坐标刻度相同axistight%坐标区域和图形吻合set(gca,xtick,-1,3,7,11)%在x轴指定处标记刻度,clear,clft=0:2*pi/99:2*pi;x=1.15*cos(t);y=3.25*sin(t);%y为长轴,x为短轴subplot(2,3,1);plot(x,y),axisnormal,gridon,title(NormalandGridon)subplot(2,3,2);plot(x,y),axisequal,gridon,title(Equal)subplot(2,3,3);plot(x,y),axissquare,gridon,title(Square)subplot(2,3,4);plot(x,y),axisimage,boxoff,title(ImageandBoxoff)subplot(2,3,5);plot(x,y),axisimagefill,boxofftitle(ImageandFill)subplot(2,3,6);plot(x,y),axistight,boxoff,title(Tight),2020/6/7,90,2.5.5三维曲线和曲面,plot3(x,y,z,r);%画三维曲线Plot3(x1,y1,z1,r,x2,y2,z2,b)t=0:0.02*pi:2*pi;x=sin(t);y=cos(t);z=cos(2*t);plot3(x,y,z,b-,x,y,z,bd);view(-82,58);boxonlegend(链,宝石);,2020/6/7,91,2.5.5三维曲线和曲面(续),2.mesh(z)%画三维网格曲线,z为x,y的函数mesh(x,y,z)%常用画三维网格曲线mesh(x,y,z,r)%带颜色的三维图x=-8:0.5:8;y=x;X=ones(size(y)*x;Y=y*ones(size(x);R=sqrt(X.*X+Y.*Y);Z=sin(R)./R;mesh(Z);,2020/6/7,92,2.5.5三维曲线和曲面(续),3.surf(Z)%由多个小面组成表面视图surf(x,y,z)surf(x,y,z,r)x=-8:0.5:8;y=x;X=ones(size(y)*x;Y=y*ones(size(x);R=abs(X)+abs(Y)+eps;Z=sin(R)./R;surf(Z);,2020/6/7,93,2.5.5三维曲线和曲面(续),4.Meshgrid(x,y)%生成网格点坐标函数x=-4:4;y=x;X,Y=meshgrid(x,y);Z=X.2+Y.2;surf(X,Y,Z);colormap(hot)%Black-red-yellow-white颜色holdonstem3(X,Y,Z,bo);,2020/6/7,94,2.5.5三维曲线和曲面(续),5.view(方位角,俯仰角)%改变视角6.shadingflat%把曲面上的小格平滑掉shadinginterp%更平滑7.rotate3d%旋转8.contour3(Z)%画等高线9.meshc,surfc%带等高线的三维作图10.colormap(hot)%hot,cool,gray,copper,pink,jet,prism11.colorbar%画彩色条12.hiddenoff%透视被叠压的图形hiddenon%消隐被叠压的图形,2020/6/7,95,2.5.5三维曲线和曲面(续),clear,clfX0,Y0,Z0=sphere(30);%产生单位球面的三维坐标X=2*X0;Y=2*Y0;Z=2*Z0;%产生半径为2的球面的三维坐标surf(X0,Y0,Z0);%画单位球面shadinginterp%采用插补明暗处理holdon;mesh(X,Y,Z);colormap(hot);holdoff%采用hot色图hiddenoff%产生透视效果axisequal,axisoff%不显示坐标轴,2020/6/7,96,2.5.5三维曲线和曲面(续),13.Moviein,getframe,movie%动画axisequalM=moviein(16);forj=1:16plot(fft(eye(j+16);M(:,j)=getframe;endmovie(M,30);14.alpha(v)%透明度控制v0,1,clear;clf;shg,x=3*pi*(-1:0.05:1);y=x;X,Y=meshgrid(x,y);R=sqrt(X.2+Y.2)+eps;Z=sin(R)./R;h=surf(X,Y,Z);colormap(jet);axisoffn=12;mmm=moviein(n);%预设画面矩阵。fori=1:nrotate(h,001,25);%使图形绕z轴旋转25度/每次mmm(:,i)=getframe;%捕获画面。endmovie(mmm,5,10)%以每秒10帧速度,重复播放5次。,2020/6/7,98,2.6M文件及程序调试,M文件可以分为两种:一种是主程序,一种是子程序即函数文件。一个较复杂的程序往往是由这两种程序混合组成。2.6.1主程序文件主程序一般用clear,closeall开头程序主体程序存盘的文件名,2020/6/7,99,2.6.2函数文件,把一个比较大的任务分解为多个比较小的任务,它们之间通过调用实现参数传递,小任务可以是函数。格式:functionout1,out2,=函数名(in1,in2,)1、函数调用常见的函数调用形式为:out1,out2,=function(in1,in2,)一个函数可以嵌套,也可以调用其它的函数,甚至调用自己(也就是递归调用)。函数文件,函数名称和文件名一般相同。,2020/6/7,100,2.6.2函数文件,与脚本文件不同,函数文件犹如一个“黑箱”,把一些数据送进并经加工处理,再把结果送出来。MATLAB提供的函数指令大部分都是由函数文件定义的。M函数文件的特点是:从形式上看,与脚本文件不同,函数文件的笫一行总是以“function”引导的“函数申明行”。,2020/6/7,101,2.6.2函数文件,从运行上看,与脚本文件运行不同,每当函数文件运行,MATLAB就会专门为它开辟一个临时工作空间,称为函数工作空间(Functionworkspace)。当执行文件最后一条指令时,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量就立即被清除。MATLAB允许使用比“标称数目”较少的输入输出宗量,实现对函数的调用。,2020/6/7,102,2.6.2函数文件,由于从结构上看,脚本文件只是比函数文件少一个“函数申明行”,所以只须描述清楚函数文件的结构。典型M函数文件的结构如下:函数申明行:位于函数文件的首行,以关键字functio开头,函数名以及函数的输入输出宗量都在这一行被定义。笫一注释行:紧随函数申明行之后以%开头笫一注释行。该行供lookfor关键词查询和help在线帮助使用。,2020/6/7,103,2.6.2函数文件,在线帮助文本区:笫一注释行及其之后的连续以%开头的所有注释行构成整个在线帮助文本。编写和修改记录:与在线帮助文本区相隔一个“空”行,也以%开头,标志编写及修改该M文件的作者和日期等。函数体:为清晰起见,它与前面的注释以“空”行相隔。,2020/6/7,104,2.6.2函数文件,需要注意函数文件的放置位置,一般自己的函数文件放在当前目录;如果对一个专题有了足够多的函数,可以生成一个工具箱,放在一个固定的目录下,并在MATLAB中加入这个目录路径即可。使用函数可以加快计算速度。MATLAB首次执行一个函数时,它将打开的文件编译为存储器内部形式,加速了执行速度。普通的m文件不被编译,在每次编译时,文件将逐行解释执行。函数的前一部分注释为帮助行,在使用help命令是看到的为这些注释行。,2020/6/7,105,2.6.2函数文件,2、参数传递MATLAB函数的输入输出数目都可以变化,通过这个特性,可以实现一些自定义的功能。函数的输入输出参数数目可以通过变量nargin和nargout获得。函数调用中可以使用少于规定的输入输出参数数目,但是不能更多。在MATLAB中,参数具有自己的专有工作空间。函数中的参数和命令行参数不在一个空间中,它们的唯一联系为函数的输入输出变量。输入参数在函数中是可读的,但任何改动不会传递回上一级空间。使用global命令可以将变量说明为全局的,则在函数、命令行等都可以共享这些变量。在实际应用中,应当尽量避免使用全局变量。,2020/6/7,106,2.6.2函数文件,3、函数注意函数可以按少于函数M文件中所规定的输入和输出变量进行调用,但不能用多于函数M文件中所规定的输入和输出变量数目。如果输入和输出变量数目多于函数M文件中function语句一开始所规定的数目,则调用时自动返回一个错误。当调用一个函数时,所用的输入和输出的参量的数目,在函数内是规定好的。函数工作空间变量nargin包含输入参量个数;函数工作空间变量nargout包含输出参量个数。事实上,这些变量常用来设置缺省输入变量,并决定用户所希望的输出变量。在M文件函数里,变量nargout可用来检验输出参量的个数,并按要求修正输出变量的创建。,2020/6/7,107,2.6.2函数文件,函数有它们自己的专用工作空间,它与MATLAB的工作空间分开。函数内变量与MATLAB工作空间之间唯一的联系是函数的输入和输出变量。如果函数任一输入变量值发生变化,其变化仅在函数内出现,不影响MATLAB工作空间的变量。函数内所创建的变量只驻留在函数的工作空间,而且只在函数执行期间临时存在,以后就消失。因此,从一个调用到下一个调用,在函数工作空间变量存储信息是不可能的。,2020/6/7,108,2.6.2函数文件,当调用一个函数时,输入变量不会拷贝到函数的工作空间,但使它们的值在函数内可读。然而,改变输入变量内的任何值,那么数组就拷贝到函数工作空间。进而,按缺省,如果输出变量与输入变量相同,例如,函数x=fun(x,y,z)中的x,那么就将它拷贝到函数的工作空间。因此,为了节约存储和增加速度,最好是从大数组中抽取元素,然后对它们作修正,而不是使整个数组拷贝到函数的工作空间。,2020/6/7,109,2.6.2函数文件,如果变量说明是全局的,函数可以与其它函数、MATLAB工作空间和递归调用本身共享变量。为了在函数内或MATLAB工作空间中访问全局变量,在每一个所希望的工作空间,变量必须说明是全局的。实际编程中,无论什么时候应尽量避免使用全局变量。要是用了全局变量,建议全局变量名要长,它包含所有的大写字母,并有选择地以首次出现的M文件的名字开头。如果遵循建议,则在全局变量之间不必要的互作用减至最小。,2020/6/7,110,2.6.2函数文件,MATLAB以搜寻脚本文件的同样方式搜寻函数M文件。例如,输入cow,MATLAB首先认为cow是一个变量。如果它不是,那么MATLAB认为它是一个内置函数。如果还不是,MATLAB检查当前cow.m的目录或文件夹。如果它不存在,MATLAB就检查cow.m在MATLAB搜寻路径上的所有目录或文件夹。从函数M文件内可以调用脚本文件。在这种情况下,脚本文件查看函数工作空间,不查看MATLAB工作空间。从函数M文件内调用的脚本文件不必用调用函数编译到内存。函数每调用一次,它们就被打开和解释。因此,从函数M文件内调用脚本文件减慢了函数的执行。,2020/6/7,111,2.6.2函数文件,当MATLAB运行时,它缓存了存储在Toolbox子目录和Toolbox目录内的所有子目录中所有的M文件的名字和位置。这使MATLAB很快地找到和执行函数M文件。被缓存的M文件函数当作是只读的。如果执行这些函数,以后又发生变化,MATLAB将只执行以前编译到内存的函数,不管已改变的M文件。而且,在MATLAB执行后,如果M文件被加到Toolbox目录中,那么它们将不出现在缓存里,因此不可利用。所以,在M文件函数的使用中,最好把它们存储在Toolbox目录外,或许最好存储在MATLAB目录下,直至它们被认为是完备的。当它们是完备时,就将它们移到一个只读的Toolbox目录或文件夹的子目录内。最后,要确保MATLAB搜索路径改变,以确认它们的存在。,2020/6/7,112,2.6.2函数文件,MATLAB函数error在命令窗口显示一个字符串,放弃函数执行,把控制权返回给键盘。这个函数对提示函数使用不当很有用,如在以下文件片段中:iflength(val)1error(VALmustbeascalar.)end这里,如果变量val不是一个标量,error显示消息字符串,把控制权返回给命令窗口和键盘。,M函数文件示例。circle.mfunctionsa=circle(r,s)%CIRCLEplotacircleofradiirinthelinespecifiedbys.%r指定半径的数值%s指定线色的字符串%sa圆面积%circle(r)利用蓝实线画半径为r的圆周线.%circle(r,s)利用串s指定的线色画半径为r的圆周线.%sa=circle(r)计算圆面积,并画半径为r的蓝色圆面.%sa=circle(r,s)计算圆面积,并画半径为r的s色圆面.%编写于2006年4月7日,修改于2006年6月27日。,ifnargin2error(输入宗量太多。);end;ifnargin=1s=b;end;clf;t=0:pi/100:2*pi;x=r*exp(i*t);ifnargout=0plot(x,s);elsesa=pi*r*r;fill(real(x),imag(x),s)endaxis(square),2020/6/7,115,第3章MATLAB的开发环境和工具,3.1MATLAB与其它软件的接口关系3.2MATLAB的文件管理系统3.3MATLAB6.x的开发环境,2020/6/7,116,3.1MATLAB与其它软件的接口关系,3.1.1与磁盘操作系统的接口关系1、变量的存储和下载如:saveaaabc%将内存变量a,b,c内容以文件aa.mat的方式存储在磁盘中。或saveaaabcascii%以ASCII码格式存储,2020/6/7,117,3.1.1与磁盘操作系统的接口关系,loadaa表示将磁盘上存储的aa.mat数据文件内容取回到工作空间即内存中。此时内存中的变量与存储时的变量相同。此时必须注意,原来内存中不能有与提取文件中的变量相同的变量,否则原来内存中的变量内容将被取代而丢失。,2020/6/7,118,3.1.1与磁盘操作系统的接口关系,2、工作日志的记录diary命令可以把MATLAB工作过程中的全部屏幕文字和数据以文本方式记录下来,成为一个工作记录。diaryon%默认文件名diary.txtdiarybbb%文件名为bbb.txtdiaryoff%结束记录,2020/6/7,119,3.1.1与磁盘操作系统的接口关系,3、日期和时间命令t0=clock;%提取年月日时分秒数据并求差值。y=inv(rand(100,100);etime(clock,t0)t=cputime;%以开机时间为基准y=inv(rand(100,100);cputime-ttic;%秒表置零,求经历的时间y=inv(rand(100,100);toc,2020/6/7,120,3.1.1与磁盘操作系统的接口关系,4、不退出MATLAB环境运行其他软件格式:!命令,2020/6/7,121,3.1.2与文字处理系统WINWORD的关系,利用剪贴板进行交互文字编辑器的使用Notebook软件工具,2020/6/7,122,3.1.3图形文件的转储,可以利用图形窗口中figurecopy来粘贴。可以利用图形窗口File菜单中的导出子菜单Export来选择需要存储的图形文件格式。可以利用图形窗口的工具对图形进行一些相关处理。,2020/6/7,123,3.1.4低层输入输出函数库,主要是实现文件内容的相互交换。具体函数可以参考P55页的表3.3如:X,map=imread(aa.bmp,bmp)就是将图象数据读入X中,颜色读入map中。每条命令的使用可以通过HELP查阅。,2020/6/7,124,3.2MATLAB的文件管理系统,MATLAB自身的用户文件格式1、程序文件.m2、数据文件.mat3、可执行文件.mex4、仿真模型文件.mdl5、仿真文件.s,2020/6/7,125,3.2MATLAB的文件管理系统,who(whos)cd(chdir,pwd)dir(ls)typewhatwhichclc,edit!echoloadclear/packsavediary,2020/6/7,126,3.3MATLAB6.X的开发环境,这里主要通过MATLAB6.0的演示来获得开发环境的了解。1、命令窗口2、历史命令窗口3、资源目录本4、当前路径浏览器5、工作空间浏览器6、帮助浏览器7、数组编辑器8、程序编辑器要掌握最基本的环境使用。,2020/6/7,127,第4章MATLAB的其他函数库,4.1数据分析函数库datafun4.2矩阵的分解与变换matfun4.3多项式函数库polyfun4.4函数功能和数值积分函数库funfun4.5字符串函数库strfun4.6稀疏矩阵函数库sparfun4.7图形界面函数库guitools4.8数据类型函数库datatypes,2020/6/7,128,4.1数据分析函数库datafun,corrcoef(x)求相关系数cov(x)协方差矩阵cplxpair(x)把向量分类为复共轭对cross(x,y)向量的向量积cumprod(x)列累计积cumsum(x)列累计和del2(A)五点离散拉氏算子diff(x)计算元素之间差dot(x,y)向量的点积gradient(Z,dx,dy)近似梯度histogram(x)直方图和棒图,max(x),max(x,y)最大分量mean(x)均值或列的平均值median(x)列的中值min(x),min(x,y)最小分量prod(x)列元素的积rand(x)均匀分布随机数randn(x)正态分布随机数sort(x)按升序排列std(x)列的标准偏差subspace(A,B)两个子空间之间的夹角sum(x)各列的元素和,2020/6/7,129,4.1数据分析函数库datafun,4.1.1基本的数据分析1.max%求各列最大值min%求各列最小值mean%求各列平均值std%求各列标准差median%求各列中间元素sum%求各列和trapz%梯形法求积分diff%求差分sort%排序,max(A)=0.95010.82140.92180.9355min(A)=0.23110.01850.17630.4057mean(A)=0.63310.50060.64870.7124std(A)=0.29630.31970.28610.2783median(A)=0.60680.45650.73820.8936sum(A)=3.16542.50323.24373.5620trapz(A)=2.24471.89982.84782.9123diff(A)=-0.7190-0.30560.17650.52980.3757-0.43800.1299-0.0186-0.12090.8029-0.1836-0.50660.4053-0.3767-0.56190.4834sort(A)=0.23110.01850.17630.40570.48600.44470.61540.41030.60680.45650.73820.89360.89130.76210.79190.91690.95010.82140.92180.9355,2020/6/7,131,4.1数据分析函数库datafun,4.1.2用于场论的数据分析函数1、gradient%求梯度2、del2%拉普拉斯算子3、cross%求矢量积4、dot%求数量积,2020/6/7,132,4.1数据分析函数库datafun,4.1.3用于随机数据分析的函数1、rand(m,n)2、randn(m,n)3、hist(x)%画直方图4、hist(x,N)%N等份画直方图,x=rand(1,1000);plot(x)hist(x),x=randn(1,1000);plot(x)hist(x);hist(x,50);,2020/6/7,135,4.1数据分析函数库datafun,4.1.4用于相关和傅立叶分析的函数1、corrcoef(x,y)%相关系数2、cov(x,y)%协方差3、conv(x,y)%卷积和多项式相乘4、deconv(x,y)%卷积和多项式相除5、filter(b,a,x)%一维数据滤波6、X=fft(x,N)%快速傅立叶变换7、X=ifft(X)%逆傅立叶变换8、sound(u,s)%向量变为声音9、filter2,conv2,deconv,fft2,ifft2等,x=rand(1,1000);y=randn(1,1000);R=1.00000.0094R=corrcoef(x,y)0.00941.0000%对角线是自相关系数Z=cov(x,y)Z=0.08350.00260.00260.8928%对角线是x和y的均方差P=conv(x,y);%卷积P长度为Mx+Ny-1如x=1321;y=122;Q,R=deconv(x,y)则:Q=11R=00-2-1,%构造受噪声污染的信号clear;randn(state,0);t=linspace(0,10,512);y=3*sin(5*t)-6*cos(9*t)+5*randn(size(t);plot(t,y)%绘制幅频曲线Y=fft(y);Ts=t(2)-t(1)%时间信号的采样周期Ws=2*pi/Ts;%时间信号的采样频率Wn=Ws/2%Nyquest频率w=linspace(0,Wn,length(t)/2);%半采样频率中相应的刻度Ya=abs(Y(1:length(t)/2);plot(w,Ya)%绘制局部放大的幅频曲线ii=find(w0找到零点后退出Options为优化迭代所采用的参数选项functiony=jszero(t,a,b)y=sin(t).2.*exp(-a.*t)-b.*abs(t);z,fz=fzero(jszero,1.6,0.1,0.5),2020/6/7,167,quad()采用递推自适应Simpson法,quad(函数名,初值x0,终值xf)求定积分quad(fun,a,b,TOL,TRACE,P1,P2,.)tol控制绝对误差,trace取非零将逐点画。F=inline(1./(x.3-2*x-5);Q=quad(F,0,2);Q=quad(myfun,0,2);functiony=myfun(x)y=1./(x.3-2*x-5);,2020/6/7,168,quadl()采用递推自适应Lobatto法,F=inline(1./(x.3-2*x-5);Q=quadl(F,0,2);Q=quadl(myfun,0,2);functiony=myfun(x)y=1./(x.3-2*x-5);,2020/6/7,169,ode45采用4,5阶龙格库塔法求解微分方程,x,y=ode45(函数名,自变量初值x0,自变量终值xf,因变量初值x0);t,y=ode45(vdp1,020,2;0);plot(t,y(:,1);figure;plot(y(:,1),y(:,2);functionyp=vdp1(t,y)r=2;yp(1)=y(2);yp(2)=-r*(y(1).2-1)*y(2)-y(1);yp=yp;%yp=y(2);-r*(y(1).2-1)*y(2)-y(1);,2020/6/7,170,t,y=ode45(vdp2,0,30,1;0;0;1)plot(t,y(:,1)functionyp=vdp2(t,y)yp(1)=y(2);yp(2)=y(3);yp(3)=y(4);yp(4)=-y(4)-(y(1)2+y(1)*y(3)-(y(1)+1)*y(2)-y(1);yp=yp;%yp=y(2);y(3);y(4);-y(4)-(y(1)2+y(1)*y(3)-(y(1)+1)*y(2)-y(1),2020/6/7,171,y(1)=x;y(2)=dx/dt;functionydot=DyDt(t,x)mu=2;ydot=x(2);mu*(1-x(1)2)*x(2)-x(1);tt,yy=ode45(DyDt,0,30,1;0);plot(tt,yy(:,1);title(x(t);,2020/6/7,172,4.5字符串函数库strfun,eval(string)作为一个MATLAB命令求字符串的值eval(try,catch)blanks(n)返回一个n个零或空格的字符串deblank去掉字符串中后拖的空格feval求由字符串给定的函数值findstr从一个字符串内找出字符串isletter字母存在时返回真值,2020/6/7,173,isspace空格字符存在时返回真值isstr输入是一个字符串,返回真值lasterr返回上一个所产生MATLAB错误的字符串strcmp字符串相同,返回真值strrep用一个字符串替换另一个字符串strtok在一个字符串里找出第一个标记,2020/6/7,174,eval的使用,P1=0.1;P2=0.5;y=sin(x).2.*exp(-P1*x)-P2*abs(x);x=-10:0.01:10;Y=eval(y);plot(x,Y);gridon,2020/6/7,175,4.5字符串函数库strfun,字符串转换abs字符串到ASCII转换dec2hex十进制数到十六进制字符串转换fprintf把格式化的文本写到文件中或显示屏上hex2dec十六进制字符串转换成十进制数hex2num十六进制字符串转换成IEEE浮点数int2str整数转换成字符串lower字符串转换成小写,2020/6/7,176,num2str数字转换成字符串setstrASCII转换成字符串sprintf用格式控制,数字转换成字符串sscanf用格式控制,字符串转换成数字str2mat字符串转换成一个文本矩阵str2num字符串转换成数字upper字符串转换成大写,2020/6/7,177,串数组的属性和标识,1、创建字符串数组-用单引号对A=Thisisanexample.2、字符串大小-字符个数m,n=size(A)3、串数组的元素标识A14=A(1:4)%提取子字符串ra=A(end:-1:1)%字符串倒排,2020/6/7,178,4、串数组的ASCII码ascii_a=double(A);%产生ASCII码char(ascii_a)%把ASCII码变回字符串5、对字符串ASCII码数组的操作W=find(A=achar(ascii_a)%将小写变大写,2020/6/7,179,6、中文字符串数组A=这是一个算式;A_s=size(A);A56=A(56);ASCII_a=double(A);char(ASCII_a);,2020/6/7,180,7、创建带单引号的字符串b=Example3.1.2_1;8、由小串构成长串Ab=a(1:7),b,.;Ab=ThisisExample3.1.2._1.,2020/6/7,181,复杂串数组的创建,1、多行串数组的直接创建clearS=Thisstringarrayhasmultiplerows.但长度必须相等,2020/6/7,182,2、由专门函数char,str2mat,strvcat创建多行串数组S1=char(Thisstringarray,hastworows.)S1=Thisstringarrayhastworows.,2020/6/7,183,S2=str2ma

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论