《MATLAB及应用PPT精品课程课件全册课件汇总》由会员分享,可在线阅读,更多相关《MATLAB及应用PPT精品课程课件全册课件汇总(549页珍藏版)》请在金锄头文库上搜索。
1、授课人:XXXXMATLAB及应用XX学院XX专业【全套课件】课程的性质、目的和任务课程的性质、目的和任务Matlab是一个可视化的计算程序,被广泛地应用在科学运算领域里。它具有功能强大、使用简单等特点,内容包括:数值计算、符号计算、数据拟合、图形图像处理、系统模拟和仿真分析等功能。此外,用Matlab还可以进行动画设计、有限元分析等。本课程的目的是使学生能够运用Matlab进行一般的工程计算,掌握Matlab的基本技术(基本计算、矩阵处理、符号运算和图形显示技术等),为将来从事工程技术方面的产品开发、科学研究、工程计算和管理打下一定的基础。教学基本要求教学基本要求1.了解Matlab语言特点
2、、熟悉Matlab视窗环境、掌握Matlab帮助功能的基本使用方法。2.掌握Matlab中变量和函数的有关概念、以及矩阵和多项式的构造方法。掌握数组运算和矩阵运算,并能够使用常用的几种常用的函数进行简单问题的求解。3.搞清符号变量和符号表达式的定义,并能用符号运算解决一般的微积分和方程求解问题。掌握Matlab程序设计的几种基本控制转移语句,学会使用简单M文件的编程。4.掌握二维平面图形和三维立体图形的绘制方法,进行数据可视化处理。理解用户图形界面程序的构造,掌握编程方法。5.能够利用Matlab进行简单的通讯与电子工程项目的仿真第第1章章 Matlab概述概述1.1、Matlab简介1.2、
3、Matlab的工作环境1.3、Matlab帮助系统1.1MATLAB1.1MATLAB简介简介- -发展发展1970年代中期年代中期 ,Cleve Moler博士开博士开发了了 : EISPACK(特征值求解的程序库) LINPACK(解线性方程的程序库 ) 1970年代后期年代后期, Cleve Moler编写接口程序写接口程序 :MATLAB,即即MATrix和和LABoratory前前3个字母的个字母的组合,是合,是“矩矩阵实验室室”的的缩写,它是一种以矩写,它是一种以矩阵运算运算为基基础的交互式程序的交互式程序语言。言。 1983年春年春,Cleve Moler和和John Littl
4、e用用C语言开言开发了第二代了第二代专业版版 84年年,两人成立了,两人成立了Mathworks公司公司,正式把正式把MATLAB推向市推向市场。 1.1MATLAB1.1MATLAB简介简介- -发展发展1988年年,推出,推出MATLAB3.x版本版本(DOS版版)。 1993年年,推出,推出MATLAB4.0版本版本(Win3.x)。 1997年年,推出,推出MATLAB5.0版版(Windows95)。 1999年年,推出,推出MATLAB5.3版本版本R11(流行流行较广广)。 2000年年,推出,推出MATLAB6.0版本版本R12 (Win98/Win2000) 2001年年,推
5、出,推出MATLAB6.1 (克服克服6.0不支持不支持P4,Win me,汉字字等等)。 2002年年,推出,推出MATLAB6.5R13(速度更快、性能更速度更快、性能更优越等越等)。2004年年,推出,推出MATLAB7版本版本R14第第第第1 1章章章章 MatlabMatlab概述概述概述概述2、MATLAB 的主要特点MATLAB 的基本单位为矩阵.MATLAB 语言以解释方式工作.具有非常友好的人机界面。具有强大的作图和数据可视化功能.具有极强的可扩展性。3、MATLAB 的基本组成MATLAB 主程序、Simulink 动态系统仿真和 MATLAB 工具箱( Toolbox)三
6、大部分组成。主程序包括了 MATLAB 语言、工作环境、句柄图形、数学函数库和应用程序接口五部分.第第第第1 1章章章章 MatlabMatlab概述概述概述概述1.2、Matlab的工作环境1. MATLAB 的启动 桌面快捷方式启动 开始菜单方式启动2. MATLAB和退出 Matlab菜单命令/关闭按钮 在Matlab命令窗口输入exit或quit第第第第1 1章章章章 MatlabMatlab概述概述概述概述MATLAB的桌面环境可以包含多个窗口,这些窗口分别为历史命令窗口(CommandHistory)、命令行窗口(CommandWindow)、当前目录浏览器(CurrentDire
7、ctoryBrowser)、工作空间浏览器(WorkspaceBrowser)、目录分类窗口(LaunchPad)、数组编辑器(ArrayEditor)、M文件编辑器/调试器(Editor/Debugger)、超文本帮助浏览器(HelpNavigator/Browser),这些窗口都可以内嵌在MATLAB主窗体中,组成MATLAB的用户界面。其中当MATLAB安装完毕并首次运行时,展示在用户面前的界面为MATLAB运行时的缺省界面窗口,如图1-1所示。第第第第1 1章章章章 MatlabMatlab概述概述概述概述图1-1MATLAB默认的用户界面第第第第1 1章章章章 MatlabMatla
8、b概述概述概述概述MATLAB 6.5的缺省界面和MATLAB 6.1的缺省界面相比还是有一定变化的,主要就是在界面的左下角有一个名为“Start”的启动菜单,在这个菜单中可以执行MATLAB产品的各种工具,并且可以查阅MATLAB包含的各种资源,它的功能和MATLAB的目录分类窗口(Launch Pad)功能非常类似。在默认的缺省用户界面中,新版本的MATLAB中没有了目录分类窗口(Launch Pad),而是工作空间浏览器(Workspace Browser)。 MATLAB启动的界面可以具有多种默认的选择,用户可以通过MATLAB界面中的“View”菜单下的“Desktop Layout
9、”子菜单下的命令选择不同的MATLAB界面,这些命令分别为:第第第第1 1章章章章 MatlabMatlab概述概述概述概述Default:缺省的界面,如图1-1所示。包含历史命令窗口(Command History)、命令行窗口(Command Window),此外工作空间浏览器(Workspace Browser)和当前目录浏览器(Current Directory Browser)两个窗口层叠在一起。Command Windows Only:仅包含命令行窗口(Command Window),此时MATLAB界面的外观类似于旧版本的MATLAB。Simple:包含两个窗口命令行窗口(Com
10、mand Window)和历史命令窗口(Command History),两个窗口并列在界面中,如图1-2所示。 第第第第1 1章章章章 MatlabMatlab概述概述概述概述图1-2选择Simple菜单命令的界面第第第第1 1章章章章 MatlabMatlab概述概述概述概述Short History和Tall History:这两个菜单命令包含的窗口类型和数量同默认的界面完全一致,不过排放的顺序不同,如图1-3、1-4所示。图1-3选择ShortHistory菜单命令的界面第第第第1 1章章章章 MatlabMatlab概述概述概述概述图1-4选择TallHistory菜单命令的界面第第
11、第第1 1章章章章 MatlabMatlab概述概述概述概述Five Panel:包含所有的MATLAB桌面窗口,在MATLAB界面中各个窗口处于平铺状态,如图1-5所示图1-5选择FivePanel菜单命令的界面第第第第1 1章章章章 MatlabMatlab概述概述概述概述在MATLAB用户界面的View菜单下还有一些菜单命令可以用来选择显示在图形界面中的窗口,用户可以根据自己的喜好选择配置用户界面。在本小结提及的各种用户交互的窗口将在后续的章节中详细讲述。一般情况下,建议用户选择“Command Windows Only”方式来运行MATLAB。在这种启动方式下,MATLAB的启动速度比
12、较快,占用的资源略少。2.通用窗口MATLAB工作界面中的常用窗口包括工作界面中的常用窗口包括命令窗口命令窗口历史命令窗口史命令窗口当前工作目当前工作目录窗口窗口工作空工作空间浏览器窗口器窗口变量量编辑窗口窗口M文件文件编辑调试窗口窗口所有窗口都可以所有窗口都可以单独独显示,示,使用使用Undock和和Dock可使窗口可使窗口单独出来和返回到独出来和返回到MATLAB工作界面中。工作界面中。1菜单和工具栏默认情况下的菜单和工具栏:【File】菜单主要用于对文件的处理。【Edit】菜单主要用于复制、粘贴等操作,与一般Windows程序的类似,在此不作详细介绍。【Debug】菜单用于调试程序。【D
13、esktop】菜单用于设置主窗口中需要打开的窗口。【Window】菜单列出当前所有打开的窗口。【Help】菜单用于选择打开不同的帮助系统。第第第第1 1章章章章 MatlabMatlab概述概述概述概述4.MATLAB工具栏用用 MATLABMATLAB的的 MM文件编辑器新建一个文件编辑器新建一个 MM文件;文件; 用用 MATLABMATLAB编辑器打开一个文件;编辑器打开一个文件; 将选中的内容剪切到剪贴板;将选中的内容剪切到剪贴板; 将选中的内容复制到剪贴板;将选中的内容复制到剪贴板; 将剪贴板中的内容粘贴到光标指定的位置;将剪贴板中的内容粘贴到光标指定的位置; 撤消最近一次的操作;撤
14、消最近一次的操作; 打开打开 SimulinkSimulink浏览器;浏览器; 打开打开 MATLABMATLAB帮助窗口帮助窗口。当前工作路径当前工作路径1.2.1命令窗口(CommandWindow)MATLAB提提供供给用用户使使用用的的管管理理功功能能的的人人机机界界面面,在在命命令令窗窗口口中中输入入MATLAB的的命命令令和和数数据据后后按按回回车键,立立即即执行行运运算算并并显示示结果。果。说明明:命命令令窗窗口口中中的的“”为命命令令提提示示符符,表表示示MATLAB处于准于准备状状态。当当在在提提示示符符后后输入入一一段段程程序序或或一一段段运运算算式式后后【Enter】键,
15、MATLAB会会给出出计算算结果果,并并再再次次进入入准准备状状态(所所得得结果果将被保存在工作空将被保存在工作空间窗口中)。窗口中)。第第第第1 1章章章章 MatlabMatlab概述概述概述概述5.CommandWindows运用入门1)Command Windows指令窗口简介在命令窗口内执行的MATLAB主要操作有:运行函数和输入变量;控制输入和输出;执行程序,包括M文件和外部程序。命令窗口中可直接运行MATLAB 函数,而这些函数往往又和MATLAB命令直接联系。MATLAB在命令窗口中的语句形式为:变量表达式;1.2.1命令窗口(CommandWindow)MATLAB提提供供给
16、用用户使使用用的的管管理理功功能能的的人人机机界界面面,在在命命令令窗窗口口中中输入入MATLAB的的命命令令和和数数据据后后按按回回车键,立立即即执行行运运算算并并显示示结果。果。说明明:命命令令窗窗口口中中的的“”为命命令令提提示示符符,表表示示MATLAB处于准于准备状状态。当当在在提提示示符符后后输入入一一段段程程序序或或一一段段运运算算式式后后【Enter】键,MATLAB会会给出出计算算结果果,并并再再次次进入入准准备状状态(所所得得结果果将被保存在工作空将被保存在工作空间窗口中)。窗口中)。在命令窗口内执行的MATLAB主要操作有:运行函数和输入变量;控制输入和输出;执行程序,包
17、括M文件和外部程序。命令窗口中可直接运行MATLAB 函数,而这些函数往往又和MATLAB命令直接联系。MATLAB在命令窗口中的语句形式为:变量表达式;运行函数和键入变量在命令窗口的提示符“”下,可以直接输入变量。例:计算A=256/41002128A=256/4-100*2+128%从从键盘输入,并入,并单击回回车键A=%屏幕显示的结果-8MATLAB语法规定,百分号“%”后面的语句为注释语句。例例 在命令窗口中输入不同的命令和数值,并在命令窗口中输入不同的命令和数值,并查看其显示方式。查看其显示方式。 a=0.5a = 0.5000 b=sinb =sin if a1 c=true%如果
18、a (12+2*(7-4)/32(2)在上述表达式输入完成后,按【Enter】键,该指令被执行(3)在指令执行后,Matlab指令窗中将显示以下结果ans = 2第第第第1 1章章章章 MatlabMatlab概述概述概述概述例1.2简单矩阵 的输入步骤(1)在键盘中输入下列内容 A=1,2,3;4,5,6;7,8,9(2)按【Enter】键,该指令被执行(3)在指令执行后,Matlab指令窗中将显示以下结果A = 1 2 3 4 5 6 7 8 9第第第第1 1章章章章 MatlabMatlab概述概述概述概述当然我们也可以采用分行输入的形式 A=1,2,3 4,5,6 7,8,9A = 1
19、 2 3 4 5 6 7 8 9第第第第1 1章章章章 MatlabMatlab概述概述概述概述3)计算结果的图象显示例 1-3 绘制函数 y=2sin(1+x)的图像,并计算当 x=0.5 时的函数值。x=(1:0.1:10); %x=(1:0.1:10); %给出自变量给出自变量 x x 的定义域的定义域 y=2*sin(1+x); %y=2*sin(1+x); %写出函数形写出函数形式式plot(xplot(x,y) %y) %绘出函数图形绘出函数图形 y=2*sin(1+0.5) %y=2*sin(1+0.5) %求当求当 x=0.5 x=0.5 时的时的 y y 值,其后不加值,其后
20、不加分号,直接在分号,直接在窗口中给出结窗口中给出结果果 y =1.9950 %y =1.9950 %输出输出 y y 的计的计算结果算结果 第第第第1 1章章章章 MatlabMatlab概述概述概述概述例例 1-4 1-4 绘制函数绘制函数 y=3x3-10x2+5x-8y=3x3-10x2+5x-8的图像的图像for i=1:100for i=1:100 x(i)=0.1*i; x(i)=0.1*i; y(i)=3*x(i)3- y(i)=3*x(i)3- 10*x(i)2+5*x(i)-8; 10*x(i)2+5*x(i)-8;endendplot(x,y)plot(x,y)第第第第1
21、 1章章章章 MatlabMatlab概述概述概述概述5.MATLAB通用命令1.4MATLAB7.1的其他管理MATLAB文件格式MATLAB7.1的常用文件有.m、.mat、.fig、.mdl、.mex、.p等类型。设置搜索路径用户自己书写的函数有可能并没有保存在搜索路径下。要解决这个问题,只需把程序所在的目录扩展成MATLAB的搜索路径即可。MATLAB文件格式程序文件程序文件程序文件即程序文件即M文件(文件(M-File),其文件的),其文件的扩展名展名为.m。图形文件形文件图形文件(形文件(Figure)的)的扩展名展名为.fig。模型文件模型文件模型文件(模型文件(Model)扩展
22、名展名为.mdl,可以在,可以在“File”菜菜单中中创建建Model时生成生成.mdl文件。文件。数据文件数据文件数据文件即数据文件即MAT文件,其文件的文件,其文件的扩展名展名为.mat。MATLAB文件格式可可执行文件行文件可可执行文件即行文件即MEX文件,其文件的文件,其文件的扩展名展名为.mex。项目文件目文件项目文件的目文件的扩展名展名为.prj。P码文件文件P码文件即文件即伪代代码文件,是文件,是M文件被文件被调用后在内存中生用后在内存中生成的内部成的内部伪代代码。设置搜索路径在MATLAB内存中进行检查,检查“sin”和“x”是否为工作空间的变量或特殊变量;检查“sin”和“x
23、”是否为MATLAB的内部函数;在当前目录上,检查是否有相应的“.m”或“.mex”文件存在;在MATLAB搜索路径的所有其他目录中,依次检查是否有相应的“.m”或“.mex”的文件存在;如果都不是,则MATLAB发出错误信息。1. MATLAB的基本搜索过程设置搜索路径窗口(SetPath)打开设置搜索路径窗口的方法:在MATLAB界面选择菜单“File”“SetPath”;在命令窗口中运行“pathtool”或“editpath”命令。3.设置搜索路径的常用命令path命令path(path,新目录)addpath命令addpath目录1目录2参数例 使用命令设置搜索路径addpath c
24、:TEMP -begin path (path,c:TEMP) p=path附:在命令窗口中输入path或genpath可得到MATLAB的所有搜索路径,第第第第1 1章章章章 MatlabMatlab概述概述概述概述1.3Matlab帮助系统帮助系统1、Matlab联机帮助 #工具条中的 按钮; #help菜单栏中前2 项中的任何一项; #在命令窗口中执行 helpdesk或doc。2 2、MatlabMatlab的网上资源的网上资源webweb菜单栏菜单栏使用帮助浏览器帮助主题(Contents)、索引(Index)、搜索(Search)和演示(Demos)四个面板来查找帮助信息:Cont
25、ents面板为可展开的树形结构,向用户提供全方位系统帮助的向导图;Index面板是MATLAB提供的术语索引表,可以查找命令、函数和专用术语等。Search面板是通过关键词来查找全文中与之匹配的章节条目,Index只在专用术语表中查找而Search的搜索是在整个HTML文件中进行的,因此其覆盖面更宽。Demos面板为MATLAB提供了Demo演示。第第第第1 1章章章章 MatlabMatlab概述概述概述概述3、Matlab常用的窗口帮助命令常用的窗口帮助命令MATLABMATLAB的帮助系统的帮助系统1、帮助命令帮助命令是查询函数语法的最基本的方法,查询信息直接显示在命令窗口。帮助命令有h
26、elp、lookfor。help%在命令窗口直接输入help,显示主要的在线帮助主题。help函数名%显示关于某个具体函数的功能、调用格式、及相关函数。help帮助主题%列出指定主题下的函数。例如helpelfun%列出所有基本函数。MATLABMATLAB的帮助系统(续)的帮助系统(续)lookforimage%查找有关图像的函数和命令。2、在线帮助浏览器MATLAB6.x设计了全新的在线帮助浏览器,当在View菜单中选择了Help选项,或在Help菜单中选择了MATLABHelp选项时,都可以打开帮助浏览器。3、演示帮助选择Help菜单中的Demos选项,可以打开演示窗口,观看要查询项的动
27、画演示。使用帮助命令lookfor关关键字字(查找)找)lookfor命令是在所有的帮助条目中搜索关键字,常用来查找具有某种功能而不知道准确名字的命令。如:如:lookforsound打开帮助窗口命令:helpwin:打开帮助窗口helpdesk:打开帮助桌面demo:打开演示窗口第第第第1 1章章章章 MatlabMatlab概述概述概述概述demo命令联机演示系统可以通过以下方式打开联机演示系统。选择MATLAB主窗口菜单的【Help】|Demos】选项;在命令窗口输入demos;直接在帮助页面上选择Demos页。第第第第1 1章章章章 MatlabMatlab概述概述概述概述helpwi
28、n 命令用于打开 MATLAB 的帮助文件窗第第第第1 1章章章章 MatlabMatlab概述概述概述概述lookfor 命令允许用户通过完整的或部分关键字来搜索要查找的内容who 和 whos 的作用是列出在 MATLAB 工作内存中驻留的变量名exist 命令用来查找或检查变量和函数的存在性四、四、MATLABMATLAB的运行方式的运行方式1、命令行运行方式演算纸式的科学计算语言在MATLAB的应用中,最基本、最简单的应用,就是在命令窗口中直接输入命令来实现计算或绘图功能。MATLAB命令行的一般形式为:变量表达式或:表达式(赋值语句) 使用MATLAB最简单的方式是将MATLAB的命
29、令窗口看作计算器,通过输入数学算式直接计算。12345ans=15 如果在输入的表达式后面跟上分号“;”,那么运行后就不会马上显示运算的结果,必须键入输出变量后才能显示运算结果。用分号关闭不必要的输出会使程序运行速度成倍甚至成百倍地提高。12345;则不会马上显示运算结果,要得到运算结果,必须ans则显示结果为ans=15如果在表达式后面跟上逗号“,”或什么都不跟,运行后会马上显示该表达式的运算结果。如果一个表达式很长,可以用续行号“”将其延续到下一行。1+2+3+4+5+%注意加号写在本行。6+7+8+9+10则输出结果ans=55如果续行号前面是数字,直接使用续行号会出现错误,有三种解决办
30、法,一是设法使续行号前面是一个运算符号,二是先空一格再加续行号,三是再加一个点。在一行中也可以写几个语句,它们之间用逗号“,”或分号“;”隔开。A=1,2,3.3,sin(4),X=1966/310+1则输出结果A1.00002.00003.3000,-0.7568X=7.3419。2 2、mm文件运行方式文件运行方式所谓m文件,就是用MATLAB语言编写的、可以在MATLAB中运行的程序。它是以普通文本格式存放的,故可以用任何文本编辑软件进行编辑。MATLAB提供的m文件编辑器就是程序编辑器。在File菜单中选择NEW,再选择M-file,或点击新建图标,就可以调出m文件编辑器,用户可以用此
31、编辑器编写m文件。m文件有两种形式,一种称为命令文件(ScriptFile),另一种称为函数文件(FunctionFile),两种文件的扩展名都是m。(1 1)命令文件)命令文件如果要输入较多的命令,或者要经常对某些命令进行重复的输入,则可以将这些命令按执行顺序存放在一个m文件中,以后只要在MATLAB的命令窗口中输入该文件的文件名,系统就会调入该文件并执行其中的全部命令。这种形式就是MATLAB的命令文件。命令文件中的语句可以访问MATLAB工作空间的所有变量;而在命令文件执行过程中创建的变量也会一直保留在工作空间中,其他命令或m文件都可以访问这些变量。命令文件相当于DOS批处理文件。求满足
32、1+2+3+n100的最大正整数n的MATLAB程序为:sum=0;n=0;%赋初始值whilesum=100,故应对sum减nn=n-1;%当循环结束时有sum=100,故应对n减1n,sum%显示最大正整数n以及和sum将上述程序存入文件fl.m,然后在命令窗口键入fl显示结果为n=13sum=91指出:程序中由符号“%”开始的文字都是注释文字,用来对程序或程序行行进行注释说明,符号“%”称为注释符,MATLAB在执行时将忽略“%”后的内容。(2 2)函数文件)函数文件函数文件是另一类m文件,可以像库函数一样方便地被调用,MATLAB提供的许多工具箱,是由函数文件组成的。对于某一类特殊问题
33、,用户可以建立系统的函数文件,形成专用工具箱。函数文件的第一行有特殊的要求,它必须遵循如下的形式:function=()其他各行都是程序运行语句,没有特别要求。函数文件的文件名必须是.m。实现符号函数运算功能的函数m文件为:functiony=sgn(x)%这是一个定义符号函数y=sgn(x)的函数文件。ifxx=4/3*pi;y=3*sgn(sin(x)显示结果为:y=-3五、五、MATLABMATLAB的常用命令的常用命令MATLAB可以通过菜单对工作着的窗口进行操作,也可以通过键盘在命令窗口输入命令进行操作,下面给出几个常用的通用命令。quit 关闭MATLABexit 关闭MATLAB
34、clc 清除MATLAB命令窗口中的所有显示内容clear 清除工作空间中保存的所有变量其他命令可以在学习应用中逐步熟悉。第第第第1 1章章章章 MatlabMatlab概述概述概述概述上机练习(上机练习(1)(1)以两种方式打开MATLAB工作窗口,进入MATLAB6.5的工作环境,并尝试用不同的方式退出。(2)尝试、熟悉MATLAB6.5的各栏菜单以及各个工具栏的功能。(3)重新启动MATLAB6.5,进入MATLAB工作窗口,用who命令查看当前工作空间内有无变量及其值。(4)绘制函数y=cos(5x+2)/sin(3x+1)的图像,并求解当x=2时的函数值。(5)此时再次用who命令查
35、看工作空间内的变量名及其值,与(3)比较,同时用whos命令查看变量,比较与who命令的不同。(6)熟练掌握MATLAB的通用命令。(7)练习并熟练掌握MATLAB的帮助命令,学会利用MATLAB的帮助信息。(8)用lookfor命令查找函数cos的信息,并与help命令查找的结果相比较,注意采用两种命令之间的差别。第2章Matlab语言程序设计基本要求:基本要求:(1)了解了解Matlab的各种数据的各种数据类型型;(2)掌握掌握Matlab的运算符与操作符的含的运算符与操作符的含义和用法和用法;(3)掌握掌握Matlab基本表达式并了解其常用函数分基本表达式并了解其常用函数分类;(4)熟熟
36、练掌握掌握Matlab的程序的程序结构(构(顺序序结构、循构、循环结构构和分支和分支结构)与流程控制构)与流程控制语句句;(5)了解并初步掌握了解并初步掌握Matlab的数据文件的的数据文件的读写;写;(6)学会学会Matlab的的M文件的文件的编写方法,包括命令文件和函写方法,包括命令文件和函数文件。了解数文件。了解M件的件的调试命令和命令和调试方法。方法。第第第第2 2 2 2章章章章 MatlabMatlabMatlabMatlab语言程序设计语言程序设计语言程序设计语言程序设计1 1、 MatlabMatlab数据类型数据类型 MATLAB的早期版本只有非常简单的二维数组和字符类型的数
37、据,目前的MATLAB版本中不仅有多达十几种的基本数据类型,在不同的专业工具箱中还有特殊的数据类型,并且MATLAB还支持面向对象的编程技术,支持用户自定义的数据类型。 MATLAB支持的基本数据类型见图2-1。第第第第2 2 2 2章章章章 MatlabMatlabMatlabMatlab语言程序设计语言程序设计语言程序设计语言程序设计图2-1 MATLAB的数据类型 第第第第2 2 2 2章章章章 MatlabMatlabMatlabMatlab语言程序设计语言程序设计语言程序设计语言程序设计获取MATLAB的数据类型列表可以在MATLAB命令行窗口中键入help datatypes命令。
38、 在图2-1中所示的各种数据类型都可以用于创建向量、矩阵或者多维数组。用户自定义的数据类型也是图示的各种数据类型的组合。在不同的MATLAB工具箱中具有自定义的数据类型,例如控制系统工具箱中定义的LTI对象,在滤波器设计工具箱中定义的滤波器对象,在符号数学工具箱中定义的符号类型数据等。这些工具箱中包含的特殊数据对象也都使用这些基本的数据类型组合构成。第第第第2 2 2 2章章章章 MatlabMatlabMatlabMatlab语言程序设计语言程序设计语言程序设计语言程序设计 需要指出一点,MATLAB的基本数据类型是双精度数据类型和字符类型。MATLAB的M语言和其他高级编程语言不同的是,M
39、ATLAB没有具体的变量或对象声明和定义过程,任何数据类型的变量或对象都可以利用面向对象编程技术中构造函数的方法或者数据类型转换的方法来创建其他数据类型对象和变量。MATLAB和Java语言、C+语言类似,所有数据类型就是相应的类,具有一定的面向对象的特点。MATLAB的不同数据类型的变量或对象占用的内存空间不尽相同,不同的数据类型的变量或对象也具有不同的操作函数。在本章中,将详细讲述MATLAB的基本数值类型、逻辑类型、字符串、元胞数组和结构的使用方法,其中,元胞数组是MATLAB中常用的一种独有的数据类型。2.12.1变量变量 1、标识符:符:表示表示变量名量名,常量名常量名,函数名和文件
40、名的字符串函数名和文件名的字符串 (1)由由字字母母、数数字字、下下划划线等等符符号号组成成,第第一一个个字字母必母必须是英文字母是英文字母 。(2)变量和常量最量和常量最长不要超不要超过19个字符,多余截取。个字符,多余截取。 (3)函数和文件名通常不超)函数和文件名通常不超过8个字符。个字符。 (4)变量名大小写敏感。量名大小写敏感。2.12.1变量变量 (5)MATLAB中的特殊中的特殊变量名,量名,应避免使用。避免使用。 例如:例如: 变量名意义ans用于存储计算结果的默认变量pi圆周率inf(Inf)无穷大,例如1/0eps计算机的最小数,和1相加产生比1大的数,在pc机上为252。
41、NaN(nan)不定量,如0/0i或j虚数单位,i=j=sqrt(-1)2.12.1变量变量 2、变量量类型型 :(1)数)数值:内部只有一种:内部只有一种类型型为双精度(双精度(8个字个字节,64位),位), 实数数为1个双精度数,复数个双精度数,复数为两个双精度数。两个双精度数。 但但输出出显示格式有示格式有8种。种。 可用可用format命令来改命令来改变显示格式。示格式。 例如:例如: format short 显示示5位数位数 (pi: 3.1416) format long 显示示15位数位数(pi: 3.14159265358979) format bank 显示示货币格式格式(
42、pi: 3.14)2.12.1变量变量 数字数字显示的示的8种格式种格式Matlab命令显示形式说明formatlong3.14159265358979316位十进制formatshorte3.1416e+0005位十进制数加指数formatlonge3.141592653589793e+00016位十进制数加指数formathex400921fb54442d1816位十六进制formatbank3.14两位小数format+正、负或零formatrat355/113分数近似formatshort(默认)3.14159二位整数,四位小数指出:自定义变量名一般不应和系统变量同名。在MATLAB中
43、输入的内容直接决定变量的类型。使用who和whos命令可以查看变量。使用clear命令可以删除所有定义过的变量。如果只是删除其中某些变量,应在clear后面指定要删除的变量名。例如 clear a z有了变量,就可以组成表达式,也就可以对变量进行赋值。MATLAB的赋值语句有两种形式。 变量名表达式 表达式 在第一种情况下,MATLAB将右边的表达式的值赋值给左边的变量,在第二种情况,MATLAB将表达式的值赋值给系统变量ans。所谓表达式,就是用运算符号把特殊字符、函数名、变量名等有关运算量连接起来的式子,其结果是一个矩阵。2.12.1变量变量 2、变量量类型型 :(2)字符)字符(串串):
44、用:用单引号表示。引号表示。 如:如:a=abc 实际上是一个上是一个单个字符的个字符的ASCII码组成的行向量。成的行向量。2.12.1变量变量 3、矩、矩阵 MATLAB中的中的变量或常量都代表一个矩量或常量都代表一个矩阵, 所有的所有的变量运算其量运算其实都是矩都是矩阵运算。运算。 单个个值实际上是上是1*1阶矩矩阵。 矩矩阵元素可以是数元素可以是数值(实数或复数数或复数)或字符串。或字符串。 一一个个由由矩矩阵表表示示的的变量量可可以以是是一一个个数数、一一组数数、一个文件(如一个文件(如语音)、一幅音)、一幅图象等。象等。 2.12.1变量变量 3、矩、矩阵 矩矩阵(Matrix)与
45、数)与数组(Array)的关系的关系 : 矩矩阵运算有着运算有着严格理格理论 数数组运算一般指元素运算运算一般指元素运算4 4、矩阵的创建、矩阵的创建矩阵是线性代数的基本运算单元。通常矩阵是指含有m行n列数值的矩形结构。矩阵中的元素可以是实数也可以是复数,由此可以将矩阵划分为实矩阵和复矩阵。MATLAB支持线性代数所定义的全部矩阵运算。在MATLAB中创建矩阵应遵循以下原则:矩阵的元素必须在方括号“ ”中。矩阵的同行元素之间用空格或逗号“,”分隔。矩阵的行与行之间用分号“;”或回车符分隔。矩阵的尺寸不必预先定义。矩阵元素可以是数值、变量、表达式或函数。如果矩阵元素是表达式,系统将自动计算出结果
46、。2.12.1变量变量 4、变量的量的查看:看: who/whos5、变量的保存和恢复:量的保存和恢复: save 文件名文件名 (缺省后(缺省后缀为.mat)例如:例如:save myvarload 文件名文件名 例如:例如:load myvar2.22.2矩阵的赋值矩阵的赋值 1、矩矩阵的直接的直接赋值 (1)基本)基本赋值 1)使用)使用 2)同一行元素用空格或)同一行元素用空格或,隔开隔开 3)不同行用)不同行用;隔开隔开 例如:例如:a=1 2 3;4 5 6 (2)复数的)复数的赋值: 例如例如:z=1+2i或或1+2j z=1+2i 3+4i z=1 3+2 4*i 直接输入法在
47、命令窗口按规则输入方式创建矩阵例1.在命令窗口创建简单的数值矩阵。A=132;310;215回车后在命令窗口显示如下结果A=132310215例2.在命令窗口创建带运算表达式的矩阵,不显示结果。y=sin(pi/3),cos(pi/6);log(20),exp(2);输入“y”回车,在命令窗口显示出来。y显示出的结果为y=0.86600.86602.99577.3891指出:在矩阵较大时,用分行输入的方式(用回车代替分号区分不同行)比较接近于线性代数中的矩阵,更直观一些。任何矩阵元素内部不能有空格,否则会被认定是两个元素。2、通过数据文件创建矩阵导入其他程序创建的数据例3.用记事本输入一组数据
48、1234234543455761保存为fort.txt,用load命令读入,loadfort.txt输入fort就可以在命令窗口显示创建的矩阵。fort显示结果为fort=1234234543455761指出:通过load命令导入数据是形成矩阵的重要方法,解决了在工作现场没有MATLAB系统和其他数据管理系统的问题,可以只用基本的文字处理工具完成。MATLAB对文本形式的数据文件的扩展名并不计较,将上述数据文件换名保存为fort.1,仍然可以如上导入、应用。文件名可以定义为m1.txt或m1.1。但是,如果将文件命名为1m.txt,则显示出错信息:“Error: Missing operato
49、r(算子), comma(逗号), or semicolon(分号).”如果文件名命名为3.txt、1.txt、3.1等,则显示的是主文件名所用的数字。数据文件保存为word或wps等的文件格式同样可以引用。如果数据文件中有字母,则不能引用,显示出错信息,即使该字母在前面的指令中已经赋值也不可。如果数据文件中有算式,则不能完整显示,算式元素将仅显示第一个运算符(或关系符)前的数字。导入其他数据,如图像数据、Excel数据时,可以使用数据导入向导Import Wizard。3、通过m文件创建矩阵将矩阵建立为m文件先将矩阵按创建原则写入一个m文件中,在MATLAB命令窗口或程序中直接运行该m文件(
50、输入该m文件名),即可将矩阵调入工作空间。4、通过函数创建矩阵函数功能eye(n)产生n阶单位矩阵ones(m,n)产生mn矩阵,元素都是“1”zeros(m,n) 产生mn矩阵,元素都是“0”(零矩阵)产生空矩阵指出:当某一项操作无结果时,MATLAB将返回一个空矩阵,空矩阵的大小为0,但它确实存在于工作空间,可以通过变量名访问。输入后的矩阵将保存在MATLAB工作空间中,并可以随时被访问调用,如果用户不用“clear”命令清除它,或给它重新赋值,该矩阵将一直保存在工作空间直到MATLAB关闭为止。如果矩阵函数中只有一个参数,则为方阵。四种创建矩阵的方法各有优点:直接输入法方便简捷;通过数据
51、文件创建有利于调用其他软件产生的数据;通过m文件创建是用于创建较大尺寸的矩阵并便于修改;通过函数创建可以由MATLAB内部函数创建一些特殊矩阵。5、其他构造矩阵的方法冒号法1冒号法构造向量冒号表达式的一般格式为:向量名初值:步长:终值。例4.在窗口输入x=0:0.5:2回车后显示x=00.50001.00001.50002.0000。例5.在命令窗口输入x=2:-0.5:0回车后显示x=2.00001.50001.00000.50000指出:步长可以省略,省略步长,则步长为1。步长可以为负,此时初值大于终值。向量的元素比较多而又有增减规律时,这种方法非常便利。冒号法表示向量时,向量的全体成员是
52、从初值开始,以步长为增量,直到不超过终值的所有元素构成的序列。冒号法的应用可以避免使用循环,提高程序运行速度。矩阵的创建(续)矩阵的创建(续)2冒号法构造矩阵一般格式为:A(:,j):表示矩阵A的第j列;A(i,:):表示矩阵A的第i行。例6.建立矩阵。解:A(1,:)=1:5%设置矩阵的第1行A=123452.22.2矩阵的赋值矩阵的赋值 注意:注意: 赋值结尾尾为“;” 则不不显示示结果。果。 一行不一行不够时,可用,可用“”换行。行。 矩矩阵的的阶数也可通数也可通过下列函数下列函数获得:得: 对于一于一维,m=length(a) 为矩矩阵a的的长度。度。 例如:例如: a=1 2 3 l
53、ength(a)为32.22.2矩阵的赋值矩阵的赋值 注意:注意: 矩矩阵的的阶数也可通数也可通过下列函数下列函数获得:得: 对于二于二维,m,n=size(a), m为行数,行数,n为列数列数 例如:例如: a=1 2 3; 4 5 6 size(a)为2 32.22.2矩阵的赋值矩阵的赋值 2、矩矩阵元素的元素的赋值 (1)元元素素用用(m,n)的的形形式式表表示示第第m行行n列列的的元元素素值,可直接引用和可直接引用和赋值。 例如,例如,a(2,1)=4, 若将其改若将其改为9, 则可用可用a(2,1)=9。注注意意:如如果果元元素素下下标超超出出原原矩矩阵的的维数数,矩矩阵将将自自动扩
54、大,多出的元素自大,多出的元素自动为0 。 2.22.2矩阵的赋值矩阵的赋值 2、矩矩阵元素的元素的赋值 (2) 给全行或全列全行或全列赋值 : 用用“:”代替行或列。代替行或列。 如:如:a(4 , :)=11 12 13 14 b(: , 5)=5; 8; 10; 12 注意:行数或列数必注意:行数或列数必须与原矩与原矩阵相同。相同。 2.22.2矩阵的赋值矩阵的赋值 3、矩、矩阵的的变换 (1)抽取:由原矩)抽取:由原矩阵中的部分元素中的部分元素 构成新矩构成新矩阵。 如:如:b=a(2,4,1,3) 表表示示第第2,4行行与与第第1、3列列交交叉叉元元素素组成新矩成新矩阵。 2.22.
55、2矩阵的赋值矩阵的赋值 3、矩、矩阵的的变换 (2)抽抽去去:使使用用空空矩矩阵(无无元元素素),将将矩矩阵整整行行/列列删除。除。 如:如:a(2,4,:)= 将将2、4行行删除除 a(:,2)= 将第将第2列列删除除2.22.2矩阵的赋值矩阵的赋值 3、矩、矩阵的的变换 (3) 组合:由多个矩合:由多个矩阵组成一个新矩成一个新矩阵,但行列,但行列应正好。正好。 如:如:a=1 2 3;4 5 6; b=7 8 9;10 11 12; c=a b; d=a;b; (4)转置:置:b=a (行(行变列)列) 例如:例如:a=1 2 3;4 5 6 ,则 a=1 4;2 5;3 62.22.2矩
56、阵的赋值矩阵的赋值 (5) 排列:排列:b=a(:) 将所有列排成一列。将所有列排成一列。 例如:例如:a=1 2 3;4 5 6; a(:)=1;4;2;5;3;6; 若先若先转置再排列,即置再排列,即实现按行排列按行排列。 (6) 变换函数:函数: fliplr(a) (矩矩阵左右翻左右翻转) (flip翻翻left right) flipud(a) (矩矩阵上下翻上下翻转) 3、矩、矩阵的的变换 2.22.2矩阵的赋值矩阵的赋值 4、间隔隔赋值(适合批量数据)(适合批量数据) (1) 变量量=(first:increment:last)形式)形式 如:如:t=(0:0.1:1) 则 t=
57、0,0.1,0.2,1 (2) 线性性间隔函数隔函数 linspace(first,last,num) 从从first开始到开始到last结束共束共num个元素,个元素, 间隔隔为(last-first)/(num-1) 如:如:t= linspace (0,1,11),t=0,0.1,1 2.22.2矩阵的赋值矩阵的赋值 4、间隔隔赋值(适合批量数据)(适合批量数据) (3)对数数间隔函数隔函数 logspace(first,last,num) 从从10first开始到开始到10last结束共束共num个元素个元素 如:如:t= logspace (0,1,11),t=100,100.1,1
58、01 2.22.2矩阵的赋值矩阵的赋值 5、基本矩、基本矩阵 (1)空)空阵: (当操作无当操作无结果果时,返回空,返回空阵) (2)全)全0矩矩阵:zeros(m,n) 例如:例如:zeros(2,3)=0 0 0;0 0 0(3)全)全1矩矩阵:ones(m,n) (4)单位矩位矩阵:eye(n) (对角角线为1的方的方阵) (5)随机矩)随机矩阵:rand(m,n) 2.22.2矩阵的赋值矩阵的赋值 6、文件、文件赋值 (1) 波形文件(波形文件(.wav):即音):即音频文件文件 读波形文件波形文件 :a=wavread(文件名文件名), 如:如:a=wavread(morse.wav
59、) 写波形文件:写波形文件:wavwrite(a, 文件名文件名) 波形文件播放:用波形文件播放:用wavplay或或sound, 如:如:wavplay(a); 2.32.3矩阵的初等运算矩阵的初等运算 1、加减法:、加减法: 矩矩阵的加减就是的加减就是对应元素的加减元素的加减 。如:如:a=1 2 3;b=4 5 6,则a+b=5 7 8 , 如果矩如果矩阵与一常数(与一常数(标量)相加减,量)相加减,则把把该常数看成是同常数看成是同阶的矩的矩阵。例如:例如:a+5=6 7 8 2.32.3矩阵的初等运算矩阵的初等运算 2、乘法、乘法 (1)矩矩阵相相乘乘:mp阶矩矩阵A与与pn阶矩矩阵B
60、的的乘乘积是一个是一个m*n阶矩矩阵。例如:例如: a=1 2 3;b=4 5 6 则:a*b=20. (2)矩矩阵与与常常数数相相乘乘等等于于每每个个元元素素乘乘以以该常常数数,例例:2*a。 2.32.3矩阵的初等运算矩阵的初等运算 2、乘法、乘法 (3)矩)矩阵元素相乘(数元素相乘(数组相乘):使用相乘):使用“.*” 相乘的两个矩相乘的两个矩阵阶数数应相同相同 。例如:例如:a=1 2 3;b=4 5 6 则:a.*b=4 10 18 2.32.3矩阵的初等运算矩阵的初等运算 3、除法、除法 (1)矩)矩阵的除法的除法 右除,右除,“/” :A/B=A*B-1 (B的逆矩的逆矩阵inv
61、(B), B必必须是方是方阵,A与与B列列应相等。相等。左除,左除,“” :AB=A-1*B , A必必须是方是方阵,A与与B行行应相等。相等。 (2)矩矩阵除除以以常常数数,等等于于每每个个元元素素除除以以常常数数,使使用普通除法用普通除法/ 。2.32.3矩阵的初等运算矩阵的初等运算 3、除法、除法 (3)矩)矩阵元素的除法元素的除法(数数组相除相除):“./” :A./B为A各元素除以各元素除以B中各元素。中各元素。“.” :A.B=B./A 2.32.3矩阵的初等运算矩阵的初等运算 4、乘方、乘方 (1)矩矩阵乘乘方方 :(乘乘方方是是乘乘法法的的扩充充,为保保证合合法法性,要求矩性,
62、要求矩阵为方方阵) A标量量 :例:例 A2,A0.2 (2)元素的乘方:)元素的乘方: a) A.标量量 : 例例 A=1 2 ,A.2=1 4 2.32.3矩阵的初等运算矩阵的初等运算 4、乘方、乘方 b) 标量量.A :例:例 3.A =3 9 c) A.B :A、B同同阶 例例 A=1 2 ,B=3 4 ,则A.B=1 162.42.4矩阵的基本运算函数矩阵的基本运算函数 1、矩、矩阵的运算函数的运算函数 (见附附录A) 指数函数指数函数 :expm()()%变量必量必须是方是方阵 对数函数数函数 :logm()() %变量必量必须是方是方阵 开方函数开方函数 :sqrtm()()%变
63、量必量必须是方是方阵 三角函数(三角函数(25个):例如:个):例如:t=1 2 3,y=sin(t) 指数指数/对数函数(数函数(7个):个): 例如:例如:exp() 复数函数(复数函数(8个):例如:个):例如:abs() 取模取模 取整函数(取整函数(7个):例:个):例:round() 四舍五入四舍五入 2.42.4矩阵的基本运算函数矩阵的基本运算函数 2、矩、矩阵元素的运算元素的运算 (基本函数(基本函数库elfun) 1、关系运算:、关系运算: 共共6种种 : (大于)(大于) (小于)(小于) = (大于等于)(大于等于)= (小于等于)(小于等于) = = (等于)(等于)
64、= (不等于)(不等于)比比较是在元素是在元素间进行的。行的。 矩矩阵必必须同同阶 比比较结果仍果仍为矩矩阵,且元素且元素值为0(假假) 或或1(真真) 例例如如:a=1 2,b=2 1, 则ab 结果果为0 1,a=b 结果果为0 0 2.52.5矩阵的逻辑运算矩阵的逻辑运算 2、逻辑运算运算 : 共有四种运算符号:共有四种运算符号: & (与与)、|(或或)、 (非非)、xor(异或)(异或) 矩矩阵元素元素值必必须为逻辑值(0、1) 运算是在元素运算是在元素间进行的。行的。比比较结果仍果仍为矩矩阵 例如:例如:a=1 0,b=0 1,则:a&b =0 0 xor(a,b) =1 12.5
65、2.5矩阵的逻辑运算矩阵的逻辑运算 3、逻辑函数:函数: (运算符(运算符库ops ) 例如:例如: exist(a) -检查变量是否有定量是否有定义, 返回返回1表示有表示有0表示无表示无 all(a)-检查矩矩阵中元素是否全中元素是否全为非非0, 1是是0否否 3 MATLAB的符号运算数值运算中的变量需要事先赋值,才能出现在表达式中参与运算。但人们经常需要对含有字符的矩阵和函数进行处理和运算,如求函数的微分、积分等等,这就需要进行符号运算。MATLAB的符号运算利用符号数学工具箱进行,符号工具箱的功能主要包括符号表达式的创建、符号矩阵的运算、符号表达式的化简和替换、符号微积分、符号代数方
66、程、符号微分方程、符号函数绘图等等。一、符号对象的创建一、符号对象的创建1、字符串变量的创建字符串是一种特殊的符号对象,在数据处理、造表和函数求值中,字符串具有重要的应用。用单引号界定的字符序列称为字符串。例如s=hello回车后,显示s=hello2 2、函数、函数数学函数函数名含义函数名含义abs(x)x的绝对值atant(x) x的反正切sqrt(x)x的平方根cot(x)x的余切exp(x)e的x次方acot(x)x的反余切sin(x)x的正弦log(x)x的自然对数cos(x)x的余弦log10(x) x的常用对数asin(x)x的反正弦sinh(x)双曲正弦acos(x)x的反余弦
67、cosh(x)双曲余弦tan(x)x的正切机器函数pause程序将暂时停在该函数所在位置,击任意键程序继续执行echoon在命令窗口显示正在执行的程序指令cputime给出MATLAB所耗用的总机器时间clock给出日期及当前时间指出在表达式中,函数一定要出现在等式的右边。每个函数对其自变量的个数和格式都有一定要求,如三角函数的单位是“弧度”而不是“度”。函数允许嵌套,如sqrt(sin(10)。系统函数的函数名小写。注意函数名也是区分大小写的。MatlaMatlab b 永久变量永久变量ans最近的答案infInfinity(无穷大)eps浮点数相对精度NaNNot-a-Number(非数)
68、realmax最大浮点实数flops浮点运算次数realmin最小浮点实数computer计算机类型pi3.14159235358579inputname输入变量名i,j虚数单位size多维矩阵的各维长度length一维矩阵的长度说明: eps、realmax和realmin三个常量具体的数值与运行MATLAB的计算机相关,不同的计算机系统可能具有不同的数值,例如,在笔者的计算机上,这三个数值分别为eps=2.220410-16, realmax=1.797710308,realmin=2.225110-308。 和其他的高级编程语言所定义的常量不同,MATLAB的常量数值是可以修改的。例如,
69、在MATLAB命令行窗口中可以键入如下的指令:pi=100,这样pi这个常量的数值就变成了100。但是,如果用clear指令清除变量后,pi将变成原有的常量数 Inf也可以写作inf,它为IEEE定义的算术数据无穷大数值,在MATLAB中进行诸如1.0/0.0或者exp(1000)的操作时都会得到这个数值。如果将inf应用于函数,则计算结果可能为inf或者NaN。 NaN也可以写作nan,它为IEEE规定的某种运算得到的结果,例如0/0的运算得到的结果就是NaN。NaN参与运算的结果也为NaN(关系运算除外)。说明: MATLAB中所有的数据默认类型均为双精度类型,包括像NaN和Inf在内的上
70、述若干常数。 对NaN和Inf进行数据转化时要注意,Inf将获取相应数据类型的最大值,而NaN往往返回相应整数数据类型的数值0,浮点数类型则仍然为NaN。 在运算中使用NaN可以避免因为执行了0/0这类能够产生错误的应用程序中断,可以辅助调试应用程序。c) c) 字符串字符串 所有字符串都用单引号括起来。所有字符串都用单引号括起来。 s=matlab s=matlab 字符中中的每个字符(包括空格)都是字符串变字符中中的每个字符(包括空格)都是字符串变量量( (矩阵或向量矩阵或向量) )中的一个元素。中的一个元素。字符串中的字符以字符串中的字符以 ASCII ASCII 码形式储存并区分大小码
71、形式储存并区分大小 ,用,用函数函数absabs可以看到字符的可以看到字符的ASCIIASCII码。码。在在MatlabMatlab中,中,字符串字符串和和字符矩阵字符矩阵基本上是等价的。基本上是等价的。 s=matlab s=matlab 等价于等价于 s=matlab s=matlab 常用的字符串操作函数表常用的字符串操作函数表 字符串字符串举例:例:A=China中国;输出带引号的汉字B=我是好学生c=Iamfine.s3=char(s,y,m,b,o,l,i,c);用函数char生成字符串double(s3);字符串转换为数值代码abs(s3)cellstr(s3);字符矩阵转换为字
72、符串b=num2str(a);数字转换为字符串比较b*2和str2num(b)*2ab=A,B,.AB=中国;北京例子例子2-12-1 组合字符串示例。在MATLAB命令行窗口中,键入下面的指令: a = Hello; b = MOTO!; c = strcat(a,b)c =HelloMOTO! d =strvcat(a,b,c)d =Hello MOTO! HelloMOTO! whos Name Size Bytes Class a 1x5 10 char array b 1x5 10 char array c 1x10 20 char array d 3x10 60 char arra
73、yGrand total is 50 elements using 100 bytes 在例子2-1中,使用strcat函数和strvcat函数进行了字符串的组合。其中,与前一小节介绍的字符串组合不同,strvcat函数允许将不同长度的字符串组合成为字符矩阵,并且将短字符串扩充为与长字符串相同的长度。例子例子2-22-2 字符串比较函数应用示例。在MATLAB命令行窗口中,键入如下的指令: a = The first string; b = The second string; c = strcmp(a,b)c = 0 d = strncmp(a,b,4)d = 1 whos Name Siz
74、e Bytes Class a 1x16 32 char array b 1x17 34 char array c 1x1 1 logical array d 1x1 1 logical arrayGrand total is 35 elements using 68 bytes 在例子2-2中,使用两种不同函数进行了字符串比较,strcmp比较两个字符串的全部字符,所以第一次比较时,系统返回了逻辑假值,而strncmp只比较指定字符串中的前n个字符,所以在第二次比较时,系统返回了逻辑真值。 另外,使用isequal函数也可以比较两个或两个以上字符串是否一致。d)单元型元型变量量单元型元型变量
75、是一种比量是一种比较特殊的数据特殊的数据类型,本型,本质上上讲,单元型元型变量量实际上是一种上是一种以任意形式的数据以任意形式的数据为元素的多元素的多维数数组。单元型元型变量可以存放任何量可以存放任何类型、任何大小的数据,型、任何大小的数据,其大小是不定的。其大小是不定的。A=1,2;3,4A=1234B=1:4,A,abcdB=1x4double2x2doubleabcdB为单元型元型变量(用花括号)量(用花括号)cellplot(B)celldisp(B)e e) 结构型变量结构型变量 结构型变量是另一种可以将不同类型数据组合在一起的数结构型变量是另一种可以将不同类型数据组合在一起的数据类
76、型,与单元型变量的不同在于据类型,与单元型变量的不同在于结构结构型型变量是以指针方变量是以指针方式式来传递数据的。来传递数据的。D.a1=abcd;D.a2=1;D.a3=1,2,3,4;DD=a1:abcda2:1a3:1234D为结构型构型变量量C=struct(c1,1,c2,B,c3,abcd)C=1x3structarraywithfields:c1c2c3C为结构型构型变量量矩阵函数矩阵函数矩阵函数矩阵函数函数功能max求各列最大值min求各列最小值mean求各列平均值std求各列标准差median求各列中间元素sum求各列元素和注:注:Matlab的基本数据的基本数据处理功能是按
77、列理功能是按列进行的。行的。一、基本数据分析一、基本数据分析 矩阵的分析计算:矩阵的分析计算:矩阵的分析计算:求矩阵的行列式、秩、逆矩阵、特征求矩阵的行列式、秩、逆矩阵、特征求矩阵的行列式、秩、逆矩阵、特征向量等等;向量等等;向量等等; 矩阵的各种分解:矩阵的各种分解:矩阵的各种分解: (将一个大矩阵分解为多个简单矩阵的连乘)(将一个大矩阵分解为多个简单矩阵的连乘)(将一个大矩阵分解为多个简单矩阵的连乘)如:三角分解、正交分解、奇异值分解等。如:三角分解、正交分解、奇异值分解等。如:三角分解、正交分解、奇异值分解等。 二、矩二、矩阵函数函数矩矩阵的交集运算:的交集运算: 格式:格式:inter
78、sect(A,B) 功能:返回功能:返回值为向量向量A,B的公共部分。的公共部分。矩矩阵的并集运算:的并集运算: 格式:格式:union(A,B) 功能:返回功能:返回值为向量向量A,B的公共部分。的公共部分。二、矩二、矩阵函数函数三、三、线性方程性方程组的求解(的求解(应用矩用矩阵函数)函数) 线性方程性方程组一般形式:一般形式:AX=B (A 为 n m矩矩阵) 当当n=m时,此方程成,此方程成为“恰定恰定”方程方程 当当nm时,此方程成,此方程成为“超定超定”方程方程(3) 当当n%数值计算例子4+2ans=62+4*i+3*exp(i*pi/6)ans=4.5981+5.5000i2+
79、4*i+3*exp(i*pi/6);%变量付值a=2a=2%创建数组x=34+3iabs(-1)pi/3x=3.00004.0000+3.0000i1.00001.0472%冒号生成法x=0:2:8x=02468%直接输入法创建2维数组c=1,2+3*i,abs(-4),sin(0.6);3,3i,sqrt(4),cos(0)c=1.00002.0000+3.0000i4.00000.56463.00000+3.0000i2.00001.0000%全下标元素赋值法创建一个(1*3*4)的高维数组A(1,4,:)=1:3A(:,:,1)=0101A(:,:,2)=0202A(:,:,3)=030
80、3%标准数组生成函数ones(1,4)ans=1111randn(state,0)randn(2,3)%产生(2*3)的正态随机阵ans=-0.43260.1253-1.1465-1.66560.28771.1909D=eye(3)%产生(3*3)的单位阵D=100010001diag(D)%取D阵的对角元素ans=111diag(diag(D)%内diag取D的对角元素,外diag利用一维数组生成对角阵ans=100010001%数组的寻访与赋值x=rand(2,4)%利用rand产生一个(2*4)的随机数组x=0.95010.60680.89130.45650.23110.48600.76
81、210.0185x(2)ans=0.2311x(3,4,7)%寻访数组x的第3,4,7个元素ans=0.60680.48600.4565x(find(x0.5)%寻访大于0.5的元素ans=0.95010.60680.89130.7621x(1:3)%寻访前3个元素组成的子数组ans=0.95010.23110.6068x(5:end)%寻访x数组的后4个元素,end是最后一个元素的下标ans=0.89130.76210.45650.0185x(12331)ans=0.95010.23110.60680.60680.9501x(5)=0x=0.95010.606800.45650.23110.
82、48600.76210.0185x(13)=22x=2.00002.000000.45650.23110.48600.76210.0185%逻辑运算A=1&0A=0A=rand(1,10)A=Columns1through60.93550.91690.41030.89360.05790.3529Columns7through100.81320.00990.13890.2028R1=(A0.4)&(AR2=(A0.8)R2=1101111111第第第第5 5 5 5章章章章 MATLABMATLABMATLABMATLAB基本程序设计基本程序设计基本程序设计基本程序设计 MATLAB程序程序设计
83、方式:方式: 草稿草稿纸方式方式 (命令行方式)(命令行方式)基本程序基本程序设计 (结构程序构程序设计) 图形界面程序形界面程序设计 (面向(面向对象)象)MATLAB基本程序基本程序设计要点:要点:MATLAB的程序文件名以的程序文件名以m作作为扩展名展名通通过Edit命令命令进入入m文件的文件的编辑 一个完整的一个完整的应用程序由主程序和函数用程序由主程序和函数组成成 第第第第5 5 5 5章章章章 MATLABMATLABMATLABMATLAB基本程序设计基本程序设计基本程序设计基本程序设计 主要内容(5) M M M M文件文件文件文件 输入输出语句输入输出语句输入输出语句输入输出
84、语句 程序控制语句程序控制语句程序控制语句程序控制语句 程序的调试程序的调试程序的调试程序的调试 5.1 M5.1 M5.1 M5.1 M文件文件文件文件 一、主程序(脚本)一、主程序(脚本)1、一个主程序的例子、一个主程序的例子 编写一个双音写一个双音频程序,程序,显示某个示某个键的波形:的波形:(HzHz)1209120913361336147714776976971 12 23 37707704 45 56 68528527 78 89 9941941* *0 0# #5.1 M5.1 M5.1 M5.1 M文件文件文件文件 设主程序文件名主程序文件名为 mydt.m % 产生一个双音生
85、一个双音频 fs=8000;t=(0:1/fs:0.2);f1=697;f2=1209; %键1对应的两个的两个频率率y=sin(2*pi*f1*t)+sin(2*pi*f2*t);plot(t,y);wavplay(y, fs) 5.1 M5.1 M5.1 M5.1 M文件文件文件文件 2 2、主程序的组成、主程序的组成、主程序的组成、主程序的组成 帮助段(帮助段(带注注释符符%的行)的行) 程序段程序段 如果有第一行如果有第一行(function ), 则主程序主程序为函数文件函数文件形式形式 ,变量不保存到工作区中,量不保存到工作区中,为局部局部变量量 . 如果没有第一行如果没有第一行(
86、function),则主程序主程序为命令文件命令文件形形式,相当于各命令行的集合。式,相当于各命令行的集合。变量保存到工作区中量保存到工作区中 . 5.1 M5.1 M5.1 M5.1 M文件文件文件文件 3 3、几点说明、几点说明、几点说明、几点说明 文件名不能文件名不能为汉字或数字开字或数字开头 注注释符符%后面的文字不后面的文字不执行行 程序的每一行的程序的每一行的执行相当于在命令行行相当于在命令行执行行 一行可以写多条一行可以写多条语句,以句,以,或或;隔开;隔开; 一行写不下一行写不下时,以,以续行行 对于命令文件形式,建于命令文件形式,建议在程序段开始用在程序段开始用 clear,
87、close all等命令清除以前的等命令清除以前的变量量 对于函数文件形式,程序中的所有于函数文件形式,程序中的所有变量量 均均为局部局部变量。量。 5.1 M5.1 M5.1 M5.1 M文件文件文件文件 二、函数二、函数二、函数二、函数 函数是用用来定函数是用用来定义子程序的。主程序子程序的。主程序实际上也是上也是一个函数(由一个函数(由MATLAB调用)。用)。1 1、函数头的形式:、函数头的形式:、函数头的形式:、函数头的形式: function 函数名函数名( ) (无无变量量传递)function 函数名函数名(var1,var2,) (无返回无返回值)function y1,y2
88、,= 函数名函数名(var1,var2,) 5.1 M5.1 M5.1 M5.1 M文件文件文件文件 2 2、函数的位置、函数的位置、函数的位置、函数的位置 函数可以是一个函数可以是一个单独的文件独的文件 (文件名和函数名(文件名和函数名应相同)相同)函数也可以放在主程序的后面。函数也可以放在主程序的后面。 5.1 M5.1 M5.1 M5.1 M文件文件文件文件 3 3、举例、举例、举例、举例根据根据t,f1,f2生成双音生成双音频的函数的函数function fy= mydtones(t,f1,f2)fy=sin(2*pi*f1*t)+sin(2*pi*f2*t); 该函数可以是函数可以是
89、单独文件或在主程序后面。独文件或在主程序后面。例如例如: mydt1.m5.1 M5.1 M5.1 M5.1 M文件文件文件文件 %程序程序mydt1.m产生一个双音频产生一个双音频clc;clear all;fs=8000;t=(0:1/fs:0.2);y=dtones(t,697,1209); %键键1对应的两个频率对应的两个频率plot(t,y);wavplay(y, fs);%函数函数function fy=dtones(t,f1,f2)fy=sin(2*pi*f1*t)+sin(2*pi*f2*t);5.1 M5.1 M5.1 M5.1 M文件文件文件文件 %程序文件程序文件mydt
90、1.m产生一个双音频产生一个双音频clc;clear ;close all;fs=8000;t=(0:1/fs:0.2);y=dtones(t,697,1209); plot(t,y);wavplay(y, fs);%函数文件函数文件dtones.mfunction fy=dtones(t,f1,f2)fy=sin(2*pi*f1*t)+sin(2*pi*f2*t);5.1 M5.1 M5.1 M5.1 M文件文件文件文件 4、全局、全局变量:量: 如果在主程序和函数中使用同一如果在主程序和函数中使用同一变量,量,应定定义全局全局变量。量。global val1 val2 %程序文件程序文件m
91、ydt2.m产生一个双音频产生一个双音频clc;clear ;close all;global t fsfs=8000;t=(0:1/fs:0.2);y=dtones1(697,1209); plot(t,y); wavplay(fy, fs);%函数文件函数文件dtones1.mfunction fy=dtones1(f1,f2)global t fsfy=sin(2*pi*f1*t)+sin(2*pi*f2*t);%程序文件名为程序文件名为mean.mfunction y=mean(x)%mean 求平均值求平均值%对于向量,返回向量对于向量,返回向量x中各元素的平均值中各元素的平均值%对
92、于矩阵,返回包含各列元素平均值的行向量对于矩阵,返回包含各列元素平均值的行向量m,n=size(x);if m=1 m=n;end;y=sum(x)/m;help mean mean 求平均值求平均值 对于向量,返回向量对于向量,返回向量x中各元素的平均值中各元素的平均值 对于矩阵,返回包含各列元素平均值的行向量对于矩阵,返回包含各列元素平均值的行向量 例例: 编写函数文件求半径写函数文件求半径为r的的圆的面的面积和周和周长。 函数文件如下:函数文件如下: function s,p=fcircle(r)%CIRCLE calculate %r 圆半径半径%s 圆面面积%p 圆周周长s=pi*r
93、*r;p=2*pi*r;函数函数调用的一般格式是:用的一般格式是: 输出出实参表参表=函数名函数名(输入入实参表参表) 要注意的是,函数要注意的是,函数调用用时各各实参出参出现的的顺序、序、个数,个数,应与函数定与函数定义时形参的形参的顺序、个数一致,序、个数一致,否否则会出会出错。函数。函数调用用时,先将,先将实参参传递给相相应的形参,从而的形参,从而实现参数参数传递,然后再,然后再执行函数的行函数的功能。功能。例例: 函数文件函数文件examp.m:function fout=charray(a,b,c)if nargin=1 fout=a;elseif nargin=2 fout=a+b
94、;elseif nargin=3 fout=(a*b*c)/2;end 命令文件命令文件mydemo.m:x=1:3;y=1;2;3;examp(x)examp(x,y)examp(x,y,3)5.2 5.2 5.2 5.2 输入输出语句(人机交互)输入输出语句(人机交互)输入输出语句(人机交互)输入输出语句(人机交互) 1、屏幕、屏幕输入入 格式:格式:x=input(提示符提示符) - 等待等待输入数据入数据 x=input(提示符提示符,s) - 等待等待输入字符串入字符串 xm=input(Whats your name?,s); 5.2 5.2 5.2 5.2 输入输出语句(人机交互
95、)输入输出语句(人机交互)输入输出语句(人机交互)输入输出语句(人机交互) 2 2、菜单命令菜单命令菜单命令菜单命令 格式:格式:x=menu(标题,菜菜单项1,菜,菜单项2,)返回菜返回菜单序号。序号。例如:例如:x=menu(Title,Plus,Minus) 5.2 5.2 5.2 5.2 输入输出语句(人机交互)输入输出语句(人机交互)输入输出语句(人机交互)输入输出语句(人机交互) 3 3、暂停、暂停、暂停、暂停 格式:格式:pause -等待敲等待敲击键盘 pause(n) -等待等待n秒秒 4 4、交出键盘、交出键盘、交出键盘、交出键盘 格式:格式:keyboad -程序程序执行
96、到行到该命令命令时暂停,在屏幕停,在屏幕上上显示示K ,这时用用户可可输入命令,入命令,查看中看中间结果,果,输入入return命令,命令,则程序程序继续执行行 5.2 5.2 5.2 5.2 输入输出语句(人机交互)输入输出语句(人机交互)输入输出语句(人机交互)输入输出语句(人机交互) 5 5、中止执行、中止执行、中止执行、中止执行 6 6、显示、显示、显示、显示 格式:格式:display(x) -在命令行在命令行显示示x的内容的内容格式:格式:C -强行停止程序的行停止程序的执行,回到命令行行,回到命令行 5.2 5.2 5.2 5.2 输入输出语句(人机交互)输入输出语句(人机交互)
97、输入输出语句(人机交互)输入输出语句(人机交互) 7 7、打印、打印、打印、打印 格式:格式:print -打印当前打印当前绘图 print -dbitmap 文件名文件名 -将将绘图转为图象文件象文件 -djpeg 例例: 输入入x,y的的值,并将它,并将它们的的值互互换后后输出。出。 程序如下:程序如下: x=input(Input x please.); y=input(Input y please.); z=x; x=y; y=z; disp(x); disp(y);例例: 求一元二次方程求一元二次方程ax2 +bx+c=0的根。的根。程序如下:程序如下:a=input(a=?);b=
98、input(b=?);c=input(c=?);d=b*b-4*a*c;x=(-b+sqrt(d)/(2*a),(-b-sqrt(d)/(2*a);disp(x1=,num2str(x(1),x2=,num2str(x(2);例例: 分分别建立命令文件和函数文件,将建立命令文件和函数文件,将华氏温度氏温度f转换为摄氏温度氏温度c。程序程序1: 首先建立命令文件并以文件名首先建立命令文件并以文件名f2c.m存存盘。clear; %清除工作空清除工作空间中的中的变量量f=input(Input Fahrenheit temperature:);c=5*(f-32)/9然后在然后在MATLAB的命令
99、窗口中的命令窗口中输入入f2c,将会,将会执行行该命命令文件,令文件,执行情况行情况为:Input Fahrenheit temperature:73c = 22.7778程序程序2:首先建立函数文件首先建立函数文件f2c.m。function c=f2c(f)c=5*(f-32)/9然后在然后在MATLAB的命令窗口的命令窗口调用用该函数文件。函数文件。clear;y=input(Input Fahrenheit temperature:);x=f2c(y)输出情况出情况为:Input Fahrenheit temperature:70c = 21.1111x = 21.11115.3 5.
100、3 5.3 5.3 程序控制语句程序控制语句程序控制语句程序控制语句 任何任何计算机算机语言都有三种基本言都有三种基本结构,即:构,即:顺序序结构:无控制构:无控制语句句分支分支结构:构:if , switch循循环结构:构:for, while 5.3 5.3 5.3 5.3 程序控制语句程序控制语句程序控制语句程序控制语句 1、顺序序结构:无控制构:无控制语句句 按照按照顺序从序从头至尾地至尾地执行程序中的各条行程序中的各条语句。句。顺序序结构一般不包含其他任何子构一般不包含其他任何子语句或控制句或控制语句。句。例如:例如: n = 0:100; x = sin(2*pi*0.01*n);
101、 plot(x); hold on stem(x,r); grid5.3 5.3 5.3 5.3 程序控制语句程序控制语句程序控制语句程序控制语句 分支分支结构:构:if , switch if和和switch语句用于根据条件句用于根据条件选择执行相行相应的的语句。句。1 1、if if 语句(适合分支少)语句(适合分支少)语句(适合分支少)语句(适合分支少) if 语句根据句根据逻辑表达式的表达式的值来确定是否来确定是否执行行紧接的接的语句体。常句体。常见的的调用格式有:用格式有:5.3 5.3 5.3 5.3 程序控制语句程序控制语句程序控制语句程序控制语句 格式格式1:if 表达式表达式
102、 语句句 end格式格式2:if 表达式表达式 语句句1 else 语句句2 end 5.3 5.3 5.3 5.3 程序控制语句程序控制语句程序控制语句程序控制语句 格式格式3: if 表达式表达式1 语句句1 elseif 表达式表达式2 语句句2 else 语句句3 end例如:例如:判断判断输入数的奇偶性入数的奇偶性n=input(n=);if rem(n,2)=0 display(n是偶数是偶数)else display(n是奇数是奇数)end 5.3 5.3 5.3 5.3 程序控制语句程序控制语句程序控制语句程序控制语句 2 2、switchswitch语句(适合分支多)语句(适
103、合分支多)语句(适合分支多)语句(适合分支多) 格式:格式: switch 表达式(表达式(标量或表达式)量或表达式) case 值1 语句句1 case 值2 语句句2 otherwise 语句句n end5.3 5.3 5.3 5.3 程序控制语句程序控制语句程序控制语句程序控制语句 switch语句和句和if语句句类似。似。Switch语句根据句根据变量或表达式的取量或表达式的取值不同分不同分别执行不同的命令。行不同的命令。5.3 5.3 5.3 5.3 程序控制语句程序控制语句程序控制语句程序控制语句 例如:根据菜例如:根据菜单选择显示不同的函数示不同的函数x=menu(波形波形,正弦
104、正弦,余弦余弦,正切正切,余切余切);switch xcase 1 ezplot(sin)case 2 ezplot(cos)case 3 ezplot(tan)case 4 ezplot(cot)end 5.3 5.3 5.3 5.3 程序控制语句程序控制语句程序控制语句程序控制语句 3 3、forfor语句语句语句语句 格式:格式:for 变量量=初初值:增量:增量:终值 语句句 end 例如:求例如:求100! x=1; for k=1:1:100 x=x*k; end x 例例: 已知已知 ,当,当n=100时,求,求y的的值。 程序如下:程序如下: y=0; n=100; for i
105、=1:n y=y+1/(2*i-1); end y 在在实际MATLAB编程中,采用循程中,采用循环语句会降句会降低其低其执行速度,所以前面的程序通常由下面的程行速度,所以前面的程序通常由下面的程序来代替:序来代替: n=100; i=1:2:2*n-1; y=sum(1./i); yfor语句更一般的格式句更一般的格式为: for 循循环变量量=矩矩阵表达式表达式 循循环体体语句句 end执行行过程是依次将矩程是依次将矩阵的各列元素的各列元素赋给循循环变量,量,然后然后执行循行循环体体语句,直至各列元素句,直至各列元素处理完理完毕。 例例: 写出下列程序的写出下列程序的执行行结果。果。 s=
106、0; a=12,13,14;15,16,17;18,19,20;21,22,23; for k=a s=s+k; end disp(s);5.3 5.3 5.3 5.3 程序控制语句程序控制语句程序控制语句程序控制语句 4 4、while while 语句语句语句语句 格式:格式:while 表达式表达式 语句句 end例如:例如:计算算1, ,1000的和的和x=1;while x 0) sum mean=sum/cntend5.3 5.3 5.3 5.3 程序控制语句程序控制语句程序控制语句程序控制语句 5 5、 breakbreak和和和和continuecontinue语句语句语句语句
107、 用于循用于循环语句(句(for,while):):break:用于跳出循用于跳出循环continue :跳跳过后面的后面的语句句继续循循环 5.3 5.3 5.3 5.3 程序控制语句程序控制语句程序控制语句程序控制语句 例:例:输出出100到到200之之间第一个能被第一个能被7整除的数整除的数for i=100:200 if rem(i,7)=0 continue end breakendi循循环的嵌套的嵌套 如果一个循如果一个循环结构的循构的循环体又包括一个循体又包括一个循环结构,就称构,就称为循循环的嵌套,或称的嵌套,或称为多重循多重循环结构。构。 例例: 若一个数等于它的各个真因子之
108、和,若一个数等于它的各个真因子之和,则称称该数数为完完数,如数,如6=1+2+3,所以,所以6是完数。求是完数。求1,500之之间的全部完的全部完数。数。 for m=1:500 s=0; for k=1:m/2 if rem(m,k)=0 s=s+k; end end if m=s disp(m); end end 一般来一般来说,应用程序的用程序的错误有两有两类,一,一类是是语法法错误,另一,另一类是运行是运行时的的错误。 语法法错误包括包括词法或文法的法或文法的错误,例如函数名,例如函数名的拼写的拼写错、表达式、表达式书写写错等。等。 程序运行程序运行时的的错误是指程序的运行是指程序的运
109、行结果有果有错误,这类错误也称也称为程序程序逻辑错误。5.4 5.4 5.4 5.4 程序的调试程序的调试程序的调试程序的调试 一、一、调试注意事注意事项 MATLAB 的的查错能力能力较强,一般,一般语法法错误,会,会直接直接报告。告。如果如果语法没有出法没有出错,而得不到正确,而得不到正确结果果时,一般,一般需要需要调试 。对于于较小的程序只要仔小的程序只要仔细检查程序即可程序即可 对于比于比较大的程序,建大的程序,建议编写一部分,写一部分,检查一部一部分。分。使用使用调试命令命令5.4 5.4 5.4 5.4 程序的调试程序的调试程序的调试程序的调试 二、程序的二、程序的调试 1、利用、
110、利用调试命令命令 例如例如:设置断点(置断点(dbstop) 单步步执行(行(dbstep)。)。 调试命令放在通用命令命令放在通用命令库中。使用不方便。中。使用不方便。5.4 5.4 5.4 5.4 程序的调试程序的调试程序的调试程序的调试 二、程序的二、程序的调试2、利用、利用m文件文件编辑的的调试菜菜单 Debug: Breakpoint:例如:例如:调试mydt.m 实验三内容回顾内容回顾MATLABMATLABMATLABMATLAB基本程序设计基本程序设计基本程序设计基本程序设计: : : :1 1 M M M M文件文件文件文件 2 2 输入输出语句输入输出语句输入输出语句输入输
111、出语句3 3 程序控制语句程序控制语句程序控制语句程序控制语句 4 4 程序的调试程序的调试程序的调试程序的调试第三章 基本的绘图方法(1)掌握)掌握图形窗口形窗口的的创建与控制,以及建与控制,以及图形窗口的形窗口的基本操作基本操作;(2)熟)熟练掌握掌握二二维和三和三维绘图基本的命令基本的命令、着色、着色、线型控制;型控制;第三章第三章 基本的绘图方法基本的绘图方法MATLAB提供了极为便利的数据可视化手段,可以作出任意函数的图像。以一个二维作图为例,作出函数y=e-x/10sinx在x-1,10范围的图像。x=-1:0.1:20; %定义x的范围和步进回车y=exp(-x./10).*si
112、n(x); %计算函数值回车plot(x,y);grid; %作出函数图像,并在坐标上画出网格回车 结果如图3-1所示。注意,在程序语句中,以百分号“%”开始的是注释部分。关于“plot”的详细用法和例子可以用“doc plot”命令查看帮助文档。第三章第三章 基本的绘图方法基本的绘图方法图3-1 函数y=e-x/10sinx在x-1,10范围的图像 第三章第三章 基本的绘图方法基本的绘图方法一、图形窗口创建图形窗口的命令为figure,有两种调用格式: figure/ figure(n)也可以由菜单创建: File-New-Figure第三章第三章 基本的绘图方法基本的绘图方法二、二维平面图
113、形与坐标系a. 线性坐标曲线 plot 函数命令 plot 是 MATLAB 二维曲线绘图中最简单、最重要、使用最广泛的一个线性绘图函数。它可以生成线段、曲线和参数方程曲线的函数图形。 其基本指令形式有以下三种: plot(x1); plot(x2,y2); plot(x3,y3,x4,y4);其中,x1,x2,y2,x3,y3等符号均代表需要绘制的参数,他们可以是向量、矩阵、复数矩阵等,plot根据不同的参数绘制不同的图形。第三章第三章 基本的绘图方法基本的绘图方法plot(x1)-输入一个数组的情况(单参数式),以x1中元素的下标作为X坐标,x1中元素的值作为Y坐标。例: x1=5 3 4
114、 9 0 2 3; plot(x1) 图见3-2plot(x2,y2)输入两个数组情况(参数式)x2为横坐标向量,y2为纵坐标向量。例:x2=0:0.01:2*pi; y2=cos(x2); plot(x2,y2) 图见3-3 第三章第三章 基本的绘图方法基本的绘图方法n图3-2plot(x1)n图3-3plot(x2,y2)第三章第三章 基本的绘图方法基本的绘图方法用命令用命令plot(Y)plot(Y)绘制矩阵绘制矩阵 Y=5 4 3 8 9 10Y=5 4 3 8 9 10; 3 4 4 5 8 23 4 4 5 8 2; 8 12 13 21 18 258 12 13 21 18 25
115、; 9 8 8 9 6 79 8 8 9 6 7的图形。的图形。Y=5 4 3 8 9 10; 3 4 4 5 8 2; 8 12 13 21 18 25; 9 8 8 9 6 7; plot(Y)n图3-4第三章第三章 基本的绘图方法基本的绘图方法plotplot(x1,y1,x2,y2,(x1,y1,x2,y2,) )在同一窗口中绘制在同一窗口中绘制多条曲线,且坐标和长度都不同。多条曲线,且坐标和长度都不同。例:例: t1=0:0.1:3*pi; t2=0:0.1:6; plot(t1,sin(t1),t2,sqrt(t2)第三章第三章 基本的绘图方法基本的绘图方法n图3-5plot(x1
116、,y1,x2,y2)第三章第三章 基本的绘图方法基本的绘图方法b 线型、点型和颜色 matlab会自动设定所画曲线的颜色和线型。如果用户对线型的默认值不满意,可以用命令控制线型。也可以根据需要选取不同的数据点的标记。为了设定线型,在输入变量组的后面,加一个引号,在引号内部放入线型和颜色的标记符。调用格式:plot(x,y,s) ,s 为类型说明参数,是字符串。s字符串可以是三种类型的符号之一,也可以是线型与颜色和定点标记与颜色的组合;如果没有s参数,plot将使用缺省设置(实线,前七种颜色顺序着色)绘制曲线;第三章第三章 基本的绘图方法基本的绘图方法例如: plot(x,y,*b)这样绘出的图
117、线,其数据点均用*做蓝色标记,而各点之间不再连以直线。 plot(x1,y1,:y),plot(x2,y2,+r)绘出的第一条曲线是黄色的点线,第二条曲线的数据点标记为红色的“+”号。其他线型、点型和颜色见表3-1。第三章第三章 基本的绘图方法基本的绘图方法第三章第三章 基本的绘图方法基本的绘图方法第三章第三章 基本的绘图方法基本的绘图方法表3-1 常用的线段、颜色与定点标记参数常用的线段、颜色与定点标记参数第三章第三章 基本的绘图方法基本的绘图方法 在当前坐标系中绘图时,每调入一次绘图函数,MATLAB将擦掉坐标系中已有的图形对象。可以用 hold on 命令在一个坐标系中增加新的图形对象。
118、注意MATLAB会根据新图形的大小,重新改变坐标系的比例。 这也是绘制多条曲线的一种方法。例如: t1=0:0.1:2*pi;y1=sin(t1);plot(t1,y1,:hb)holdon,t2=0:0.1:6;y2=sqrt(t2);plot(t2,y2,-g)第三章第三章 基本的绘图方法基本的绘图方法第三章第三章 基本的绘图方法基本的绘图方法用这种方法时,需要注意两点:(1)注意第一张图的坐标要适当,以保证能看清第二张图(2)注意及时解除保持状态,既键入holdoff,否则,以后的图都会叠加在此图上,造成混乱。第三章第三章 基本的绘图方法基本的绘图方法另外还有一种绘制多条曲线的命令-pl
119、otyy plotyy是matlab5.x新增的函数,它设有两个纵坐标,以便绘制两个y尺度不同的变量,但x仍只用同一个比例尺。例如:x=1:0.01:5; y=exp(x); plotyy(x,y,x,2*y,semilogx,plot)第三章第三章 基本的绘图方法基本的绘图方法c 多子图绘制指令subplot 有时需要在有时需要在一个图形窗口中显示几幅图一个图形窗口中显示几幅图,以便对几,以便对几个函数进行直观、便捷的比较。由于每个绘图命令在绘制个函数进行直观、便捷的比较。由于每个绘图命令在绘制数据图像时都会将已有图形覆盖掉,而用数据图像时都会将已有图形覆盖掉,而用 hold hold 命令
120、不能命令不能实现同时显示几个不同坐标尺寸下的图形,用实现同时显示几个不同坐标尺寸下的图形,用 figure figure 命命令再创窗口又很难同时比较由不同的数据绘得的图像。令再创窗口又很难同时比较由不同的数据绘得的图像。实现在实现在同一个窗口中同时显示多个图像同一个窗口中同时显示多个图像的命令的命令subplotsubplot。使用格式为:使用格式为: subplot(msubplot(m,n n,i)i) 其含义为其含义为 :把图形窗口分割为:把图形窗口分割为 m m 行行 n n 列子窗列子窗口口,然后选定,然后选定第第 i i 个窗口为当前窗口个窗口为当前窗口。 subplot sub
121、plot 命令不仅用于命令不仅用于二维图形二维图形,对,对三维图形三维图形一一样适用。其本质是将样适用。其本质是将 figure figure 窗口分为几个区域窗口分为几个区域,再在每,再在每个区域内分别绘图。个区域内分别绘图。第三章第三章 基本的绘图方法基本的绘图方法用用subplot函数函数把两种不同的把两种不同的图形形综合在一个合在一个图形窗口中。形窗口中。subplot(2,2,1)t=0.1:0.1:2*pi;y=sin(t);semilogx(t,y)gridonsubplot(2,2,2)t=0:0.1:4*pi;y=sin(t);plot(t,y)subplot(2,2,3)x
122、=1:0.01:5;y=exp(x);plotyy(x,y,x,y,semilogx,plot)subplot(2,2,4)x=1:0.1:10;y=sqrt(x);plot(x,y,:rd)第三章第三章 基本的绘图方法基本的绘图方法三、屏幕控制和其他二维绘图 1、图形屏幕控制命令figure I %打开第i个图clf %清除当前图形窗的内容hold (on /off)close %关闭当前图形窗close all %关闭所有图形窗第三章第三章 基本的绘图方法基本的绘图方法2、其他二维绘图命令例1:网格线指令对二维和三维图形都适用。有三种用法: grid on:打开分格线控制开关,以后绘制的图
123、形都带有分格线; grid off:关闭分格线控制开关,以后绘制的图形都不带分格线; grid:用于实现分格线绘制切换。 例2:图形标示简单指令如下:title(text) %图像标题xlabel (text) %横坐标轴ylabel (text) %纵坐标轴legend(text1, text2,) %绘制曲线所用线型、色彩或数据点形图例,实现不同图例的说明text(xt,yt, text ) %在图面的(xt,yt)坐标处书写字符注释第三章第三章 基本的绘图方法基本的绘图方法3、坐标比例和尺寸的设定axis命令实现坐标系的调整的命令是实现坐标系的调整的命令是 axis axis 函数。函数
124、。 调用格式为:调用格式为: axis(xmin,xmax,ymin,ymax,zmin,zmax)axis(xmin,xmax,ymin,ymax,zmin,zmax)坐标的最小值(坐标的最小值( xmin,ymin,zminxmin,ymin,zmin)必须小于相应的最大值()必须小于相应的最大值( xmax,ymax,zmaxxmax,ymax,zmax),否则会出错。),否则会出错。自动坐标系与用自动坐标系与用 axis axis 函数函数调整后的坐标系的比较。调整后的坐标系的比较。 subplot(2,1,1) t=0:0.1:4*pi; y=sin(t); plot(t,y) su
125、bplot(2,1,2) t=0:0.1:4*pi; y=sin(t); plot(t,y) axis(0,max(t),min(y),max(y)第三章第三章 基本的绘图方法基本的绘图方法四、matlab三维绘图1、基本三维绘图指令plot3三维函数三维函数 plot3plot3主要用来表现主要用来表现单参数的三维曲线单参数的三维曲线,与二维绘图函数,与二维绘图函数 plot plot 相比,只多了相比,只多了第三维数据第三维数据。其调用格式为:其调用格式为: plot3(X1,Y1,Z1,plot3(X1,Y1,Z1,s1s1,X2,Y2,Z2,X2,Y2,Z2,s2s2, ,) )或或
126、plot3(X,Y,Z,plot3(X,Y,Z,s s) )参数的含义如下:参数的含义如下: XnXn、YnYn、ZnZn:第一到三维数据,是:第一到三维数据,是尺寸相等的尺寸相等的向量向量/ /矩阵;矩阵;s s、s1s1、s2s2:是:是字符串字符串,用来设置,用来设置线型、颜色、数据点线型、颜色、数据点标记。标记。X X、Y Y、Z Z 是是向量时向量时,绘制以向量,绘制以向量 X X、Y Y、Z Z 的的元素为元素为 x x、y y、z z 坐标坐标的的三维曲线。三维曲线。 X X、Y Y、Z Z 是是矩阵时矩阵时,以,以 X X、Y Y、Z Z 对应列元素为对应列元素为 x x、y
127、y、z z 坐标坐标分别绘分别绘制曲线。制曲线。第三章第三章 基本的绘图方法基本的绘图方法 t=0:0.1:8*pi; plot3(sin(t),cos(t),t)title(绘制螺旋线) %用命令 title 对图形主题进行标注 xlabel(sin(t),FontWeight,bold,FontAngle,italic) ylabel(cos(t),FontWeight,bold,FontAngle,italic) zlabel(t,FontWeight,bold,FontAngle,italic) %命令 zlabel 用来指定 z 轴的数据名称 grid on第三章第三章 基本的绘图方
128、法基本的绘图方法第三章第三章 基本的绘图方法基本的绘图方法x x、y y、z z 都是矩阵时,都是矩阵时,plot3 plot3 命令的使用命令的使用X,Y=meshgrid(-pi:0.1:pi);Z=sin(X)+cos(Y); plot3(X,Y,Z)第三章第三章 基本的绘图方法基本的绘图方法2、三维网线图和曲面图 三维曲面绘图命令可分为三维曲面绘图命令可分为平面网格点的平面网格点的生成生成、在平面网格基础上、在平面网格基础上绘制三维网格绘制三维网格及及对对三维表面进行处理三维表面进行处理三个步骤。三个步骤。 第三章第三章 基本的绘图方法基本的绘图方法a.a.平面网格点的生成平面网格点的
129、生成函数命令函数命令meshgridmeshgrid 用来生成用来生成 x-y x-y 平面上的网格点矩阵。平面上的网格点矩阵。调用形式为:调用形式为: X,Y=meshgrid(x,y) X,Y=meshgrid(x,y) X,Y=meshgrid(x) X,Y=meshgrid(x) 等价于等价于X,Y=meshgrid(x,x) X,Y=meshgrid(x,x) 参数含义如下:参数含义如下: x x:是区间:是区间x0,xmx0,xm上分划的向量;上分划的向量; y y:是区间:是区间y0,yny0,yn上分划的向量;上分划的向量; X X,Y Y:输出变量矩阵,矩阵:输出变量矩阵,矩
130、阵 X X 的行向量都是向量的行向量都是向量 x x,矩,矩阵阵 Y Y 的列向量都是向量的列向量都是向量 y y。 函数函数 meshgridmeshgrid 将将由两个向量决定的区域转换为对应的网由两个向量决定的区域转换为对应的网格点矩阵。格点矩阵。第三章第三章 基本的绘图方法基本的绘图方法函数,定义区域为-2,2-2,2。生成网格并计算其网格点上的函数值。X,Y=meshgrid(-2:2:2,-2:2:2);X,Y%将划分结果输出至矩阵ans=-202-2-2-2-202000-202222Z=X.*exp(-X.2-Y.2);%计算网格点上的函数值赋予变量ZZ=-0.000700.0
131、007-0.036600.0366-0.000700.0007第三章第三章 基本的绘图方法基本的绘图方法b.b.三维网格命令三维网格命令 meshmesh利用利用函数函数meshmesh生成网格曲面。生成网格曲面。调用格式为:调用格式为:mesh(Xmesh(X,Y Y,Z Z,C)C):X X、Y Y、Z Z、C C 是同维数的矩阵,是同维数的矩阵,X X、Y Y、Z Z 对应空间上的网格点,网格线颜色由对应空间上的网格点,网格线颜色由C C决定;决定;mesh(Xmesh(X,Y Y,Z)Z):相当于上面的:相当于上面的 C=Z C=Z 的情况;的情况; mesh(xmesh(x,y y,
132、Z Z,C)C):x x 和和 y y 是向量,是向量,Z Z 和和 C C 是同维数的是同维数的矩阵,网格曲面的网格顶点是(矩阵,网格曲面的网格顶点是( x(j)x(j),y(i)y(i),Z(i,j)Z(i,j)),),网格线的颜色由矩阵网格线的颜色由矩阵 C C 决定;决定; mesh(xmesh(x,y y,Z)Z):相当于上面的:相当于上面的 C=Z C=Z 的情况;的情况; mesh(Zmesh(Z,C)C):等价于:等价于 mesh(xmesh(x,y y,Z Z,C)C),此时向量,此时向量x=1:nx=1:n,向量,向量 y=1:my=1:m; mesh(Z)mesh(Z):
133、相当于上面的:相当于上面的 C=Z C=Z 的情况的情况mesh(.,mesh(.,PropertyNamePropertyName,PropertyValue,.),PropertyValue,.):给函:给函meshmesh设置曲面属性。设置曲面属性。第三章第三章 基本的绘图方法基本的绘图方法用用 mesh mesh 命令绘制上例中的网格曲面。命令绘制上例中的网格曲面。 X,Y = meshgrid(-2:.2:2, -2:.2:2); Z = X .* exp(-X.2 - Y.2); mesh(Z)与与 mesh 相关的相关的另外两个函数是另外两个函数是 meshc 和和 meshz,
134、它,它们的的调用形用形式与式与 mesh 相同。相同。第三章第三章 基本的绘图方法基本的绘图方法meshc meshc 除生成网格曲面外,还在除生成网格曲面外,还在 x-y x-y 平面上生成平面上生成曲面的曲面的等高线图形等高线图形;meshzmeshz 除生成与除生成与 mesh mesh 相同相同的网格曲面外,还在曲面下面加上一个的网格曲面外,还在曲面下面加上一个长方体的长方体的台柱台柱。比较函数比较函数 meshc meshc 和和 meshz meshz 。 X,Y = meshgrid(-2:.2:2, -2:.2:2); Z = X .* exp(-X.2 - Y.2); Sub
135、plot(2,1,1) meshc(Z) subplot(2,1,2)meshz(Z)第三章第三章 基本的绘图方法基本的绘图方法第三章第三章 基本的绘图方法基本的绘图方法c.三三维表面命令表面命令surf函数函数surf可可实现对网格曲面片网格曲面片进行着色行着色,将网格曲面,将网格曲面转化化为实曲面曲面。surf命令的命令的调用用格式与格式与mesh相同。相同。利用三利用三维网格表面命令网格表面命令surf绘制制图形。形。z=peaks;%绘制山峰的制山峰的图像,将函数像,将函数值赋予予变量量zsurf(z)%对山峰的山峰的图像像进行着色行着色处理理shadinginterp%函数函数sha
136、ding改改变着色方式着色方式第三章第三章 基本的绘图方法基本的绘图方法上机练习(3)(1)按照的步长间隔绘制函数在0x1时的曲线。(2)分别采用、的步长,绘制连续调制波形的图像。(3)用曲面图命令surf表现函数的图像。绘制颜色为蓝色,数据点用五角星标识第8章Simulink仿真本章要点本章要点Simulink系统的基本模块仿真模型的编辑仿真参数的设置Simulink是MATLAB环境下对动态系统进行建模、仿真和分析的一个软件包。该系统的两个主要功能就是Simu(仿真)和Link(连接)。一、Simulink的启动和退出1Simulink的启动在MATLAB操作桌面下,单击工具栏中的图标或在
137、命令窗口键入命令Simulink,就会弹出一个名为“SimulinkLibraryBrowser”的浏览器窗口。8.1 Simulink系统的基本模块2 2模型的创建模型的创建在创建新模型时,单击SimulinkLibraryBrowser浏览器上方工具栏内的“建立新模型”图标、或者单击MATLAB命令窗口FileNewModel选项,会弹出一个名为Untitled(无标题)的空白窗口,所有控制模块都创建在这个窗口中。二、Simulink基本模块在Simulink的模块库浏览器窗口左侧的Simulink选项上单击鼠标右键,单击弹出菜单的OpentheSimulinkLabray选项,可以打开S
138、imulink模块库窗口。1 1信号源模块(信号源模块(SourcesSources)双击Simulink模块库窗口中的Sources模块,即可打开信号源模块。信号源模块信号源模块模模块功能功能模模块功能功能In1创建建输入端入端Ground接地接地Constant常数常数Clock当当时时间SignalGenerator信号信号发生器生器DigitalClock数字数字时钟Ramp斜波斜波FromFile从文件从文件读数据数据SineWave正弦波正弦波FromWorkspace从工作空从工作空间读数数据据Step阶跃信号信号RandomNumber随机信号随机信号RepeatingSequ
139、ence重复序列重复序列UniformRandomNumber均匀随机信号均匀随机信号PulseGenerator脉冲脉冲发生器生器Band-LimitedWhiteNoise带限白噪声限白噪声ChirpSignal快速正弦快速正弦扫描描2 2输出模块(输出模块(SinksSinks)模模块功能功能模模块功能功能Scope示波器示波器ToFile输出到文件出到文件FloatingScope可可选示波器示波器ToWorkspace 输出到工作空出到工作空间XYGraphXY关系关系图Terminator通用通用终端端Outl创建建输出端出端StopSimulation输出不出不为0时停止停止仿真
140、仿真Display实时数数值显示示3 3连续系统模块(连续系统模块(ContinuousContinuous)连续系统模块提供积分、微分等连续系统仿真的常用原件。连续系统模块的功能连续系统模块的功能模模块功能功能模模块功能功能Integrator积分分Zero-Pole零极点零极点Derivative微分微分Memory延延时输出出State-Space状状态方程方程TransportDelay传输延延时TransferFcn传递函数函数VariableTransportDelay可可变传输延延时4 4离散系统模块(离散系统模块(DiscreteDiscrete)离散系统模块提供了滤波器、传递
141、函数等离散系统仿真模块。 离散系统模块的功能离散系统模块的功能 模模块功能功能模模块功能功能Zero-OrderHold零零阶保持器保持器DiscreteFilter离散离散滤波器波器UnitDelay单位延位延时采采样保保持持DiscreteTransferFcn离散离散传递函数函数Discrete-TimeIntegrator离散离散时间积分分DiscreteZero-Pole离散零极点离散零极点DiscreteState-Space离散状离散状态方程方程First-OrderHold一一阶保持器保持器8 8数学运算模块(数学运算模块(MathOperationsMathOperation
142、s)数学运算模块提供了基本数学运算函数、三角函数、复数运算函数以及矩阵运算函数。数学运算模块的功能数学运算模块的功能 模模块功能功能模模块功能功能Sum求和求和RoundingFunction取整函数取整函数Product积或商或商CombinatorialLogic逻辑真真值表表DotProduct点点积LogicOperator逻辑算子算子Gain常数增益常数增益BitwiseLogicalOperator位位逻辑算子算子SliderGain可可变增益增益RelationalOperator关系算子关系算子MatrixGain矩矩阵增益增益ComplextoMagnitude-Angle复
143、数的模和复数的模和辐角角MathFunction数学运算函数数学运算函数Magnitude-AngletoComplex模和模和辐角合成函角合成函数数Trigonometricfunction三角函数三角函数ComplextoReal-Imag复数的复数的实部和虚部和虚部部MinMax求最大求最大值Real-ImagtoComplex实部和虚部合成部和虚部合成复数复数Abs求求绝对值AlgebraicConstraint强强迫迫输入信号入信号为零零Sign符号函数符号函数8.2Simulink模块操作一、模块的编辑处理1模块的操作(1)添加模块当要把一个模块添加到模型中,先在Simulink模
144、块库中找到它,然后直接将这个模块拖入模型窗口中即可。(2)选取模块当模块已经位于模型窗口中时,只要用鼠标在模块上单击就可以选中该模块,这时模块的四角上出现一些黑色的小方块,这些小方块就是该模块的关键点,拖动这些黑色小方块可以改变模块的大小。2模块位置和外形的调整(1)调整模块位置(2)调整模块大小(3)调整模块方向(4)调整模块颜色和效果3模块名的处理(1)改变模块名(2)隐藏模块名(3)改变模块名的位置4复制和删除模块(1)复制模块(2)删除模块二、模块属性和参数的设置二、模块属性和参数的设置1模块参数的设置Simulink中几乎所有模块的参数(Parameters)都允许用户进行设置,双击
145、要设置的模块就可以打开模块参数设置对话框,不同模块参数设置对话框的项目会不同。2模块属性的设置与参数设置对话框不同,所有模块的属性(Properties)设置对话框都是一样的。选定要设置属性的模块,然后单击EditBlockProperties选项;或单击右键在弹出的菜单中选择BlockProperties选项。该对话框有三个标签:General(通用)、BlockAnnotation(模块注解)和Callbacks(回调函数)。三、模块间的连线三、模块间的连线1连接两个模块方法是先移动鼠标指向模块的输出端,鼠标的箭头会变成十字形光标,这时按住鼠标左键,拖动鼠标到另一个模块的输入端,当十字形光
146、标出现“重影”时,释放鼠标即完成了连接。2模块间连线的调整用鼠标单击连线,可以选中该连线。这时会看到线上的一些黑色小方块,这些是连线的关键点。用鼠标按住关键点,拖动即可以改变连线的方向。3连线的分支仿真时经常会碰到需要把信号输送到不同的接收端的情况,这时就需要分支结构的连线。可以先连好一条线,然后把鼠标移到支线的起点位置,先按下Ctrl键,然后按住鼠标,将连线拖到目标模块,松开鼠标和Ctrl键即可。4标注连线双击需要标注的连线,可以看到一个文本框,在里面输入标注文字单击回车键确定即可。用鼠标拖动文本框还可以改变标识的位置。另外,在FormatPort/SignalDisplays菜单下还有与连
147、线标注有关的命令:1)SampleTimeColor:将采样时间不同的模块和连线用不同的颜色显示。2)PortDataTypes:在连线上显示传输数据的类型,如double、int32等。5删除连线如果想要删除某条连线,可单击要删除的连线,此时连线上出现标记点,表示该连线已经被选中,然后单击模型窗口工具栏中的【剪切】按钮或者直接单击键盘上的Delete键,即可删除该连线。8.3仿真模型的参数设置选择模型窗口SimulationConfigurationParameters选项,将出现仿真参数配置窗口。仿真参数配置窗口主要分为7个选项卡:Solver(解题器)、DataImport/Export
148、(数据输入/输出),Optimization(优化)、Diagnostics(诊断)、HardwareImplementation(硬件工具)、ModelReferencing(模型引用)和Real-TimeWorkshop(实时工作空间),其中Solver、DataImport/Export和Diagnostics三项经常用到。一、Solver选项卡(1)Simulinktime设置仿真起始时间和停止时间。(2)Solveroptions仿真解题器的操作。根据类型(Type)的变化分为:Variable-step(变步长算法)和Fixed-step(固定步长算法)。二、DataImport/
149、Export选项卡DataImport/Export选项卡主要用来设置Simulink与MATLAB工作空间交换数据的有关选项。(1)Loadfromworkspace从工作空间中载入数据。1)Input:先选中Input核选框,在后面的编辑框内输入数据的变量名。2)Initialstate:表示模块的初始状态。对模块进行初始化时,先选中Initialstate核选框,(2)Savetoworkspace将输出保存到工作空间。在Savetoworkspace区域中,可以选择的输出选项有:Time(时间),States(状态),Output(输出端口)和Finalstate(最终状态)。(3)S
150、aveoptions保存操作。1)Format:可以选择数组、结构和包含时间的结构三种形式。2)Limitdatapointstolast:用来限定保存到工作空间中的数据量。3)Decimation:从几个数据中抽取一个数据输出。4)Outputoptions:输出操作设置,变步长算法独有。有三种输出方式:Refineoutput(细化输出)、Produceadditionaloutput(产生附加输出)和Producespecifiedoutputonly(仅在指定的时刻产生输出)。三、Diagnostics选项卡在Diagnostics选项卡中,主要是指定系统对一些事件或仿真过程中可能遇到
151、的情况做出什么反映。反应的类型有以下几种:1)None:不做任何反应,不影响程序运行。2)Warning:显示警告信息,不影响程序的运行。3)Error:显示错误信息,中止运行的程序。第第第第 9 9 9 9 章章章章 MATLABMATLABMATLABMATLAB在信号与系统中的应用在信号与系统中的应用在信号与系统中的应用在信号与系统中的应用 与信号与系统有关的工具箱有:符号数学工具箱(Symbolic)控制系统工具箱(Control)信号处理工具箱(Signal)主要内容(主要内容(9 9)信号的时域表示信号的时域运算与变换连续系统的时域分析离散系统的时域分析9.1 9.1 9.1 9.
152、1 信号的时域表示信号的时域表示信号的时域表示信号的时域表示 一、连续信号的表示1、向量表示y=f(t),t=t1:p:t2p为间隔,t1,t2为起始和终止值。p越小越准确例如:9.1 9.1 9.1 9.1 信号的时域表示信号的时域表示信号的时域表示信号的时域表示 一、连续信号的表示2、符号表示y=sym(f(t),准确表达例如:9.1 9.1 9.1 9.1 信号的时域表示信号的时域表示信号的时域表示信号的时域表示 (1)单位阶跃信号:在符号工具箱中,单位阶跃信号为heaviside(t),但不能用ezplot绘图,因为ezplot只能绘制在MATLAB和符号工具箱中均存在的函数。 1 (
153、t=0)u(t)= 0 (t=0);然后再利用ezplot绘制,例如:ezplot(heaviside(t),-1010)3、常用连续信号举例9.1 9.1 9.1 9.1 信号的时域表示信号的时域表示信号的时域表示信号的时域表示 一、连续信号的表示1、向量表示y=f(t),t=t1:p:t2p为间隔,t1,t2为起始和终止值。p越小越准确例如:9.1 9.1 9.1 9.1 信号的时域表示信号的时域表示信号的时域表示信号的时域表示 一、连续信号的表示2、符号表示y=sym(f(t),准确表达例如:9.1 9.1 9.1 9.1 信号的时域表示信号的时域表示信号的时域表示信号的时域表示 (1)
154、单位阶跃信号:在符号工具箱中,单位阶跃信号为heaviside(t),但不能用ezplot绘图,因为ezplot只能绘制在MATLAB和符号工具箱中均存在的函数。 1 (t=0)u(t)= 0 (t=0);然后再利用ezplot绘制,例如:ezplot(heaviside(t),-1010)3、常用连续信号举例9.1 9.1 9.1 9.1 信号的时域表示信号的时域表示信号的时域表示信号的时域表示 (2)单位冲激信号(t)=0(t0);用符号工具很难表示,一般是在0附近取一个很小的,幅度为1/。(3)符号函数可用函数sign(t)ezplot(sign(t),-5,5)1(t0)sgn(t)=
155、-1(t=0)u(n)=0(n”下键入文件名(可以省略扩展名)后回车,即可运行程序得到结果,即my1stprg回车第四章第四章 Matlab Matlab 编程基础编程基础在任何一种纯文本编辑器中均可以书写MATLAB程序,只要以“.m”为扩展名保存,即可在MATLAB中调用运行。MATLAB命令窗口中,在提示符“”后输入的命令语句要回车才能执行,同样,为了方便编辑M文件,MATLAB也提供了一个编辑器,叫作meditor,它也是系统默认的M文件编辑器。 运行meditor的方法非常简单,在MATLAB命令行窗口中键入下面的指令就可以打开meditor: edit 这时MATLAB将启动med
156、itor,然后创建一个未命名的空白文件,如图4-1所示。第四章第四章 Matlab Matlab 编程基础编程基础图4-1 meditor的运行界面 第四章第四章 Matlab Matlab 编程基础编程基础这时用户就可以直接在编辑器中键入MATLAB指令,开发M语言文件了。 此外,运行meditor还可以通过“File”菜单中“New”子菜单下的“M-File”命令来实现,或者直接单击MATLAB用户界面工具栏上的新建按钮完成同样的工作。 M语言文件可以分为两类,其中一类是脚本文件,另外一类叫作函数文件。本章将分别介绍这两类文件的编写方法。第四章第四章 Matlab Matlab 编程基础编
157、程基础任何计算机语言,只要利用顺序结构、循环结构以及分支结构,就可以完成任何程序功能。在MATLAB中也有这三种基本的程序结构。但值得注意的是,由于MATLAB语言矩阵计算功能十分强大,常常仅使用顺序结构借以矩阵的逻辑运算就可以完成计算任务。由于循环结构和分支结构在MATLAB语言中的运行速度相对较慢,因此在算法优化的编程中应当尽可能避免使用,而代之以矩阵运算,从而提高程序运行速度,简化程序代码,并使得程序代码更加接近于数学表达。当然,采用矩阵编程的编程方法需要大家具有更多的关于线性代数和矩阵数学的知识和思维方式。4.2 流流 程程 控控 制制 第四章第四章 Matlab Matlab 编程基
158、础编程基础4.2.1 4.2.1 选择结构选择结构 如前所述,当人们判断某一条件是否满足,根据判断的结果来选择不同的解决问题的方法时,就需要使用选择结构。和C语言类似,MATLAB的条件判断可以使用if语句或者switch 语句。第四章第四章 Matlab Matlab 编程基础编程基础4.2.1.1 if4.2.1.1 if语句语句if语句的基本语法结构有三种,分别如下:(1) if (关系运算表达式)MATLAB语句end 这种形式的选择结构表示,当关系运算表达式计算的结果为逻辑真的时候,执行MATLAB语句,这里的MATLAB语句可以是一个MATLAB表达式,也可以是多个MATLAB表达
159、式。在MATLAB语句的结尾处,必须有关键字end。第四章第四章 Matlab Matlab 编程基础编程基础(2) if(关系运算表达式)MATLAB语句A elseMATLAB语句B end 这种选择结构表示,当关系运算表达式的计算结果为逻辑真的时候,执行MATLAB语句A,否则执行MATLAB语句B,在语句B的结尾必须具有关键字end。第四章第四章 Matlab Matlab 编程基础编程基础(3) if (关系运算表达式a)MATLAB语句A elseif (关系运算表达式b)MATLAB语句B else (关系运算表达式c) end 这种选择结构可以判断多条关系运算表达式的计算结果,
160、然后按照执行的逻辑关系执行相应的语句。读者可以根据类似的C语言知识或者前面两种选择结构的介绍判断这种结构的执行方式。第四章第四章 Matlab Matlab 编程基础编程基础例例4-1if语句的使用if_examp.m。通过本例子将同时了解meditor的基本使用方法。打开meditor,然后键入下面的指令:第四章第四章 Matlab Matlab 编程基础编程基础所有的指令键入完毕后,将文件保存,大家可以将其保存为任何名字,不过文件名必须由英文字符和数字组成,将文件的扩展名设置为.m,并且将文件保存在MATLAB的搜索路径下,例如MATLAB当前的工作路径。 然后在MATLAB的命令行中,键
161、入刚才保存的文件名,不过,这时不要将扩展名也一同键入,MATLAB就会依次执行这些指令。第四章第四章 Matlab Matlab 编程基础编程基础运行例4-1的方法和效果如下: if_exampA = 0 1 例4-1代码的核心是006011行的部分,这部分展示了if-elseif-else-end语句组合的使用方法。可以通过修改程序003和004行中对I和J的赋值来察看整个语句的执行情况。 和C语言类似,if-elseif-else的语句结构也可以嵌套地使用,也就是可以存在这样的语句结构: 第四章第四章 Matlab Matlab 编程基础编程基础if(关系表达式a)if(关系表达式b) M
162、ATLAB语句Aelse MATLAB语句Bendelseif(关系表达式c) MATLAB语句Celse MATLAB语句Dendend 第四章第四章 Matlab Matlab 编程基础编程基础注意: 在使用嵌套的选择结构时,需要小心if语句和end关键字的配对。例例4-24-2 嵌套使用的if结构if_examp2.m。001clear all002003if 1004 disp(Is 1)005else006 disp(Not 1)007end008 第四章第四章 Matlab Matlab 编程基础编程基础009 I = 1;010 if I011 if I -2016 disp(I
163、 is less than 0 but bigger than -2)017 end018 end 第四章第四章 Matlab Matlab 编程基础编程基础该程序的运行方法和效果如下: if_examp2Is 1I is bigger than 0 but less than 2 在例4-2中,主要说明了嵌套的if结构和在关系表达式中使用常量的方法。在代码的003行,if语句的关系表达式为常数1,这个时候if语句将始终认为非零值为逻辑真,所以,程序执行了004行的代码。同样,在程序的009行,if语句的关系表达式为变量I,若I的数值为非零值,则if语句判断其为逻辑真,所以,代码的016行只有
164、在I为0时,才可能被执行。第四章第四章 Matlab Matlab 编程基础编程基础4.2.1.2 switch4.2.1.2 switch语句语句 另外一种构成选择结构的关键字就是switch。在处理实际问题的时候,往往要处理多个分支,这时如果使用if-else语句处理多分支结构往往使程序变得十分冗长,从而降低了程序的可读性。switch语句就可以用于处理这种多分支的选择,它的基本语法结构如下:第四章第四章 Matlab Matlab 编程基础编程基础switch(表达式)case 常量表达式a:MATLAB语句Acase 常量表达式b:MATLAB语句B case 常量表达式m:MATLA
165、B语句Motherwise :MATLAB语句Nend 第四章第四章 Matlab Matlab 编程基础编程基础 在switch语句之后的表达式可以是一个数值类型表达式或者是一个数值类型的变量,当这个表达式的值同case后面的某一个常量表达式相等时,则执行该case后面的常量表达式后面的语句。注意: MATLAB的switch和C语言的switch语句结构不同。在C语言中,每一个case后面的语句中必须包含类似break语句的流程控制语句,否则程序会依次执行符合条件的case语句后面的每一个case分支。但是在MATLAB中就不必如此,程序仅仅执行符合条件的case分支。 第四章第四章 Ma
166、tlab Matlab 编程基础编程基础例例4-3switch结构使用示例switch_examp.m。001 clearall002003 algorithm=input(Enteranalgorithminquotes(ode23,ode15s,etc:);004005 switchalgorithm006 caseode23007str=2nd/3rdorder;008 caseode15s,ode23s009 str=stiffsystem;010 otherwise011str=otheralgorithm;012 end013 disp(str);第四章第四章 Matlab Mat
167、lab 编程基础编程基础该文件的运行方法和效果如下: switch_exampEnter an algorithm in quotes (ode23, ode15s, etc:) ode232nd/3rd order switch_exampEnter an algorithm in quotes (ode23, ode15s, etc:) ode4other algorithm第四章第四章 Matlab Matlab 编程基础编程基础例4-3中需要用户在执行程序的过程中输入一个字符串,switch语句根据用户的输入判断执行相应的case分支。若没有符合条件的case分支,则switch执行o
168、therwise后面的语句。若switch结构中没有定义otherwise及其相应的代码,则程序不会进行任何操作,而是直接退出switch结构。提示: 在处理以字符串变量或者常量参与的关系判断操作时,使用switch结构要比if-else结构效率高一些。第四章第四章 Matlab Matlab 编程基础编程基础4.2.2 4.2.2 循环结构循环结构 在解决很多问题的时候需要使用循环结构,例如求解数列的和或者进行某种迭代法求解数值方程时,都需要循环结构配合完成计算。 在MATLAB中,包含两种循环结构,一种是循环次数不确定的while循环,而另一种是循环次数确定的for循环。第四章第四章 Ma
169、tlab Matlab 编程基础编程基础1 1whilewhile循环结构循环结构while语句可以用来实现“当”型的循环结构,它的一般形式如下:while(表达式)MATLAB语句end 当表达式为真时,循环将执行由语句构成的循环体,其特点是先判断循环条件,如果循环条件成立,即表达式运算结果为“真”,再执行循环体。循环体执行的语句可以是一句也可以是多句,在MATLAB语句之后必须使用关键字end作为整个循环结构的结束。另外,在循环过程中一定要能够改变关系表达式或者布尔类型变量的值,或者使用其他方法来跳出循环,否则会陷入死循环(无法正常退出的循环叫作死循环)。 第四章第四章 Matlab Ma
170、tlab 编程基础编程基础例例4-4 使用while语句求解。001i = 1;002sum = 0;003while ( i while_example 计算结果为:500500 例4-4的002006行使用了while循环结构,在循环结构中进行了累加的操作。需要注意的是,在MATLAB中没有类似C语言的+或者+=等运算操作符,因此在进行诸如累加或者递减的运算时,不得不给出完整的表达式。另外,例4-4求数列和的算法的运算效率很低,在MATLAB中不要使用这样的结构完成类似的运算,而需要采用向量化的计算。 第四章第四章 Matlab Matlab 编程基础编程基础注意: while循环结构的关
171、系表达式可以是某个数据变量或者常量,这时,将按照非零值为逻辑真进行相应的操作。另外,在进行上述操作时,若数据变量为空矩阵,则while语句将空矩阵作为逻辑假处理,也就是说,在while A MATLAB语句S1 end结构中,若A为空矩阵,则MATLAB语句S1永远不会被执行。第四章第四章 Matlab Matlab 编程基础编程基础2 2forfor循环结构循环结构 使用for语句构成循环是最灵活、简便的方法,不过,使用for语句循环需要预先知道循环体执行的次数,所以这种循环一般叫作确定循环。在MATLAB中for循环的基本结构如下:for index = start:increment:e
172、ndMATLAB语句end其中,index的取值取决于start和end的值,一般地,这里通常使用等差的数列向量,参见例4-5。 第四章第四章 Matlab Matlab 编程基础编程基础例4-5使用for语句求解。001sum=0;002fori=1:1000003sum=sum+i;004end005str=计算结果为:,num2str(sum);006disp(str)第四章第四章 Matlab Matlab 编程基础编程基础例4-5运行的结果为 for_example计算结果为:500500 在例4-5中,002行的代码使用了确定次数的for循环结构,循环次数使用行向量进行控制,而且索
173、引值i按照默认的数值1进行递增。第四章第四章 Matlab Matlab 编程基础编程基础4.2.3 break4.2.3 break语句和语句和continuecontinue语句语句 在循环结构中还有两条语句会影响程序的流程,这就是break语句和continue语句,这两条语句的基本功能如下: 当break语句使用在循环体中的时候,其作用是能够在执行循环体的时候强迫终止循环,即控制程序的流程,使其提前退出循环,它的使用方法是break; continue语句出现在循环体中的时候,其作用是能够中断本次的循环体运行,将程序的流程跳转到判断循环条件的语句处,继续下一次的循环,它的使用方法是co
174、ntinue;第四章第四章 Matlab Matlab 编程基础编程基础例例4-6break语句示例break_example.m。001i=0;002j=0;003k=0;004fori=1:2005forj=1:2006fork=1:2007if(k=2)008disp(退出循环);009break;010end第四章第四章 Matlab Matlab 编程基础编程基础011str=sprintf(I=%d,J=%d,K=%d,i,j,k);012disp(str);013end014end015end016disp(程序运行结束);第四章第四章 Matlab Matlab 编程基础编程基
175、础例例4-6的运行结果如下:break_exampleI=1,J=1,K=1退出循环I=1,J=2,K=1退出循环I=2,J=1,K=1退出循环I=2,J=2,K=1退出循环程序运行结束第四章第四章 Matlab Matlab 编程基础编程基础 break语句的作用是退出当前的循环结构运行,所以在例4-6中,位于最内层循环的break语句执行的结果是退出了最内层的循环k,位于外层的循环i和j还是都运行完毕了。 第四章第四章 Matlab Matlab 编程基础编程基础例例4-7continue语句示例。001i=0;002fori=1:6003if(i3)004continue005else0
176、06str=sprintf(I=%d,i);007disp(str);008end009end010str=sprintf(循环结束I=%d,i);011disp(str);第四章第四章 Matlab Matlab 编程基础编程基础例4-7的运行结果如下:continue_exampleI=1I=2I=3循环结束I=6continue语句的作用在例4-7中得到了充分说明,该语句终止当前的循环,然后继续下一次循环运算,直到所有的循环迭代运算结束为止。第四章第四章 Matlab Matlab 编程基础编程基础脚本文件是最简单的一种M语言文件,在本章前面章节的例子中都使用了脚本文件。所谓脚本文件,就
177、是由一系列的MATLAB指令和命令组成的纯文本格式的M文件,执行脚本文件时,文件中的指令或者命令按照出现在脚本文件中的顺序依次执行。脚本文件没有输入参数,也没有输出参数,执行起来就像早期的DOS操作系统的批处理文件一样,而脚本文件处理的数据或者变量必须在MATLAB的公共工作空间中。4.3 脚脚 本本 文文 件件 第四章第四章 Matlab Matlab 编程基础编程基础例例4-8脚本文件示例。001%注释行002%M脚本文件示例003%flowerpetal004%以下为代码行005%计算006theta=-pi:0.01:pi;007rho(1,:)=2*sin(5*theta).2;00
178、8rho(2,:)=cos(10*theta).3;009rho(3,:)=sin(theta).2;010rho(4,:)=5*cos(3.5*theta).3;第四章第四章 Matlab Matlab 编程基础编程基础011fork=1:4012%图形输出013subplot(2,2,k)014polar(theta,rho(k,:)015end016disp(程序运行结束!)在MATLAB命令行中运行该脚本文件:script_example程序运行结束!第四章第四章 Matlab Matlab 编程基础编程基础 仔细察看例4-8的脚本文件,在脚本文件中,主要由注释行和代码行组成。M文件的
179、注释行需要使用%定义符,在%之后的所有文本都认为是注释文本,不过,M文件的注释定义符仅能影响一行代码,类似于C+语言中的“/”。然而在M语言中,没有类似C语言的注释定义符“/*”和“*/”,所以无法一次定义多行注释。给程序添加适当的注释是良好的编程习惯,希望大家能够在日常编程中多多使用。第四章第四章 Matlab Matlab 编程基础编程基础4.4.1 4.4.1 基本结构基本结构 M函数文件和脚本文件不同,函数文件不仅有自己特殊的文件格式,不同的函数还分别具有自己的工作空间。同其他高级语言类似,M函数文件也有局部变量和全局变量。首先需要了解的是函数文件的基本结构,参见例4-9。4.4 函函
180、 数数 文文 件件 第四章第四章 Matlab Matlab 编程基础编程基础例例4-9函数文件示例average.m。001 functiony=average(x)002 %AVERAGE求向量元素的均值003 %语法:004 %Y=average(X)005 %其中,X是向量,Y为计算得到向量元素的均值006 %若输入参数为非向量则出错007008 %代码行009 m,n=size(x);010 %判断输入参数是否为向量第四章第四章 Matlab Matlab 编程基础编程基础011if(m=1)|(n=1)|(m=1&n=1)012%若输入参数不是向量,则出错013error(Inpu
181、tmustbeavector)014end015%计算向量元素的均值016y=sum(x)/length(x);第四章第四章 Matlab Matlab 编程基础编程基础在MATLAB命令行中,键入下面的指令运行例4-9的代码:z=1:99;y=average(z)y=50第四章第四章 Matlab Matlab 编程基础编程基础M语言函数文件具有下面的不同部分:*函数定义行。*在线帮助。*注释行。*M语言代码。第四章第四章 Matlab Matlab 编程基础编程基础下面结合例4-9分别说明这些部分的构成。函数定义行,例4-9的函数定义行为代码的001行:001 functiony=aver
182、age(x)第四章第四章 Matlab Matlab 编程基础编程基础这一行代码中包括关键字function、函数输出参数y、函数的名称average和函数的输入参数x。需要读者注意的是函数的名称,函数的名称定义要求必须以字符开头,后面可以用字符、数字和下划线的组合构成函数名称。MATLAB对函数名称的长度有限定,读者可以在自己的MATLAB中,通过执行namelengthmax函数获取相应的数值。假设该函数返回的数值为N,若函数的名称长度超过了N,则MATLAB使用函数名称的前N个字符作为函数名称。 一般推荐将函数名称用小写的英文字符表示,同时函数的M文件名称最好和函数名称保持一致,若文件名
183、称和函数名称不一致,则调用函数的时候需要使用文件名称而非函数名称。第四章第四章 Matlab Matlab 编程基础编程基础M函数文件的在线帮助为紧随在函数定义行的注释行。在例4-9中,average函数的在线帮助为002006行的注释行。若在MATLAB命令行中键入下面的指令:helpaverage在MATLAB的命令窗口中就会出现:AVERAGE求向量元素的均值语法:Y=average(X)其中,X是向量,Y为计算得到向量元素的均值若输入参数为非向量则出错第四章第四章 Matlab Matlab 编程基础编程基础其中,在线帮助中比较重要而且特殊的是在线帮助的第一行,在MATLAB中将这行注
184、释称为H1帮助行,它是在线帮助的第一行,若使用lookfor函数查询函数时,仅查询并显示函数的H1帮助行,例如,在MATLAB命令行中键入下面的指令:lookforaverage在MATLAB的命令窗口中就会出现:AVERAGE求向量元素的均值MEANAverageormeanvalue.第四章第四章 Matlab Matlab 编程基础编程基础 由于H1帮助行的特殊作用,所以在用户自己定义M函数文件时,一定要编写相应的H1帮助行,对函数进行简明、扼要的说明或者解释。 在例4-9的008、010、012、015行代码分别是程序具体的注释行,这些注释行不会显示在在线帮助中,主要原因就是这些注释行
185、没有紧随在H1帮助行的后面,其中008行的注释与在线帮助之间有一个空行。其实从008行开始一直到文件的结尾都是M函数文件的代码行,这些代码行需要完成具体的算法,实现用户的具体功能。代码行就是用户开发的算法M语言的实现。第四章第四章 Matlab Matlab 编程基础编程基础4.4.2 4.4.2 输入输出参数输入输出参数 M语言函数文件的输入、输出参数和其他高级语言的输入、输出参数不同,在定义这些输入、输出参数的时候不需要指出变量的类型,因为MATLAB默认这些参数都使用双精度类型,这样可以简化程序的编写。而且在定义参数时,也没有确定输入参数的维数或者尺寸,也就是说,直接从参数上无法判断输入
186、来的是标量、向量还是矩阵,只有通过程序内部的具体代码来加以判断。 M语言的函数文件不仅可以有一个输入参数和一个返回值,还可以为M语言函数文件定义多个输入参数和多个输出参数。 第四章第四章 Matlab Matlab 编程基础编程基础4.4.3 4.4.3 子函数和私有函数子函数和私有函数 同一个M函数文件中可以包含多个函数。如果在同一个M函数文件中包含了多个函数,那么将出现在文件中的第一个M函数称为主函数(primary function),其余的函数称为子函数(subfunction)。M函数文件的名称一般与主函数的名称保持一致,其他函数都必须按照函数的基本结构来书写,每一个函数的开始都是函
187、数定义行,函数的结尾是另一个函数的定义行的开始或者整个M文件的结尾(最后一个子函数的结尾就是文件结束符)。不过,子函数不像主函数,一般子函数没有在线帮助,子函数的作用范围有限,它只能被那些在定义子函数的M文件中定义的函数(包括主函数和其他子函数)调用,不能被其他M文件定义的函数调用。 第四章第四章 Matlab Matlab 编程基础编程基础 在MATLAB中有一类函数被称为私有函数,这类函数被放置在名称为private的子目录中。每一个函数文件都是标准的M语言函数文件,没有特殊的关键字。但是,这些函数仅能被那些位于private子目录的上一层目录中的函数调用。例如,假设在MATLAB的搜索路
188、径中包含路径ProjectA ,那么所有位于 ProjectAprivate路径下的函数,只能在其上一层路径 ProjectA中的函数文件中调用。由于私有函数作用范围的特殊性,不同父路径下的私有函数可以使用相同的函数名。由于MATLAB搜索函数时优先搜索私有函数,所以如果同时存在私有函数名func1.m和非私有函数名func1.m,则私有函数func1.m被优先执行。 创建私有函数的方法非常简单,只要将那些需要设置为私有的函数都拷贝到一个private子目录中,则这些函数就能被那些位于父层目录中的M函数调用了。 第四章第四章 Matlab Matlab 编程基础编程基础4.4.4 4.4.4
189、局部变量和全局变量局部变量和全局变量 同C语言类似,在M语言函数中也存在局部变量和全局变量。所谓局部变量,就是那些在M函数内部声明并使用的变量。这些变量仅能在函数调用执行期间被使用,一旦函数结束运行,则这些变量占用的内存空间将自动被释放,变量的数值也就不存在了。这是由于MATLAB的解释器在解释执行函数的时候,为不同的函数创建不同的工作空间,函数彼此的工作空间相互独立,一旦函数执行完毕,则函数的工作空间就不存在了。 在本章前面的例子中,每个例子的函数内部声明使用的变量都是局部变量,所以函数执行完毕后,MATLAB的基本工作空间中没有这些变量存在,第四章第四章 Matlab Matlab 编程基
190、础编程基础 通过运行local函数可以看到,所有在函数中创建的变量在函数运行结束后就不存在了。也就是说,局部变量的生存周期仅在函数的活动期间内。 与局部变量相对应的就是全局变量。MATLAB将全局变量保存在特殊的工作空间进行统一维护、管理,而将变量声明为全局变量的方法就是在使用变量前,用关键字global声明,例如声明全局变量gXY: global gXY whos Name Size Bytes Class gXY 0x0 0 double array (global)Grand total is 0 elements using 0 bytes 第四章第四章 Matlab Matlab 编
191、程基础编程基础 需要强调一点,MATLAB管理、维护全局变量和局部变量使用了不同的工作空间,所以使用global关键字创建全局变量的时候有三种情况: (1) 若声明为全局的变量在当前的工作空间和全局工作空间都不存在,则创建一个新的变量,然后为这个变量赋值为空数组,该变量同时存在于局部工作空间和全局工作空间。 (2) 若声明为全局的变量已经存在于全局工作空间中,则不会在全局工作空间创建新的变量,其数值同时赋值给局部工作空间中的变量。 (3) 若声明为全局的变量存在于局部工作空间中,而全局工作空间不存在,则系统会提示一个警告信息,同时将局部的变量“挪”到全局工作空间中。 第四章第四章 Matlab
192、 Matlab 编程基础编程基础例例4-104-10 全局变量的例子。在MATLAB命令行窗口中,键入下面的指令:% 创建全局变量并赋值 global myx myx = 10;% 变量的信息 whos Name Size Bytes Class myx 1x1 8 double array (global)Grand total is 1 element using 8 bytes 第四章第四章 Matlab Matlab 编程基础编程基础% 清除变量 clear myx% 察看信息 whos whos global Name Size Bytes Class myx 1x1 8 doubl
193、e array (global)Grand total is 1 element using 8 bytes% 在局部工作空间再次创建变量 myx = 23myx = 23% 变量的信息第四章第四章 Matlab Matlab 编程基础编程基础 whos Name Size Bytes Class myx 1x1 8 double arrayGrand total is 1 element using 8 bytes% 将其修改为全局变量(注意警告信息) global myxWarning: The value of local variables may have been changed
194、to match the globals. Future versions of MATLAB will require that you declare a variable to be global before you use that variable.%看看变量的数值 myxmyx = 10 第四章第四章 Matlab Matlab 编程基础编程基础% 清除当前的工作空间 clear whos global Name Size Bytes Class myx 1x1 8 double array (global)Grand total is 1 element using 8 byt
195、es% 清除所有的内存空间 clear all whos global第四章第四章 Matlab Matlab 编程基础编程基础使用全局变量时,需要小心留意,因为全局变量可以在任何的函数中进行读写,这样,可能在比较复杂的程序中查找全局变量错误的时候就非常的麻烦。第四章第四章 Matlab Matlab 编程基础编程基础 M语言文件的编辑器meditor不仅仅是一个文件编辑器,同时还是一个可视化的调试开发环境。在M文件编辑器中可以对M脚本文件、函数文件进行调试,以排查程序的错误。M文件的调试不仅可以在文件编辑器中进行,而且还可以在命令行中结合具体的命令进行,但是过程相对麻烦一些,所以本小节将重点
196、讲述在M文件编辑器中进行可视化调试的过程。 一般地来说,应用程序的错误有两类,一类是语法错误,另外一类是运行时的错误。其中,语法错误包括了词法或者文法的错误,例如函数名称的拼写错误等。而运行时的错误是指那些程序运行过程中得到的结果不是用户需要的情况。但是,由于M文件是一种解释型语言,语法错误和运行时的错误都只有在运行过程中才能发现,所以程序的调试往往是在程序无法得到正确结果时进行程序修正的惟一手段。 4.5 M 文文 件件 调 试 第四章第四章 Matlab Matlab 编程基础编程基础 为了能够有效地处理各种情况,M语言的断点类型除了类似C语言的用户定义的断点外,还有几种自动断点,分别为*
197、 Stop if Error。* Stop if Warning。* Stop if NaN or Inf。* Stop if All Errors。 这些自动断点可以在程序中设置,当程序运行过程中发生了错误或者警告,则程序运行中断,进入调试状态。第四章第四章 Matlab Matlab 编程基础编程基础图4-1 M文件编辑器的Breakpoints菜单 第四章第四章 Matlab Matlab 编程基础编程基础例例4-11M文件调试代码stats_error.m。001functiontotalsum,average=stats_error(input_vector)002%STATS_ER
198、ROR-Calculatescumulativetotal&average003totalsum=sum(input_vector);004average=ourmean(input_vector);005006functiony=ourmean(x)007%OURMEAN-Calculatesaverage008m,n=size(x);009ifm=1010m=n;011end012y=sum(input_vector)/m;第四章第四章 Matlab Matlab 编程基础编程基础首先在MATLAB环境中启动M文件编辑器,然后选择M文件编辑器中“Breakpoints”菜单下的“Stopi
199、fError”命令。注意,这时不一定需要将stats_error.m文件在文件编辑器中打开。然后,在MATLAB命令行窗口中键入下面的指令:sumavg=stats_error(rand(1,50)?Undefinedfunctionorvariableinput_vector.Errorin=D:TEMPch4stats_error.m(ourmean)Online12=y=sum(input_vector)/m;第四章第四章 Matlab Matlab 编程基础编程基础图4-2 处于调试状态的M文件编辑器 第四章第四章 Matlab Matlab 编程基础编程基础在M文件编辑器中,第12行
200、代码前有绿色的箭头,表示当前程序运行在此处中断。通过用户界面中的Stack下拉框可以察看当前应用程序使用堆栈的状态,如本例子中Stack下拉框中包含如下的内容:ourmean、stats_error和Base,由下至上,分别为调用者和被调用者之间的关系,同时也显示了当前的工作空间。另外,部分按钮从编辑状态进入调试状态,如图4-6所示。 这些按钮分别执行增加断点、清除断点、单步执行等调试程序的功能。将鼠标光标移动到按钮处并保持几秒钟,MATLAB的文件编辑能够给出相应的提示。 第四章第四章 Matlab Matlab 编程基础编程基础图4-3 调试程序的按钮 第四章第四章 Matlab Matl
201、ab 编程基础编程基础 此时,MATLAB命令行窗口也处于调试状态,在这种状态下命令行提示符为“K”,在该命令行提示符中可以任意键入MATLAB指令进行运算和处理,不过需要注意,此时的工作空间是函数正在应用的空间,若在命令行窗口中键入的指令影响了工作空间中的变量,则可以直接影响程序运行的结果。例如,在当前的提示符“K”键入下面的指令:K whos Name Size Bytes Class m 1x1 8 double array n 1x1 8 double array x 1x50 400 double arrayGrand total is 52 elements using 416 b
202、ytes 第四章第四章 Matlab Matlab 编程基础编程基础 可以看到,当前的工作空间下没有变量名input_vector,这也是该程序执行出错的原因,将程序中第12行的input_vector修改成为x就能得到正确的答案了。 MATLAB可视化程序调试功能相对于Visual C+的可视化调试功能弱了一些,但是,在调试程序的过程中通过MATLAB命令行窗口的配合,充分利用MATLAB命令行窗口“演算纸”的功能,能够非常方便地调试M语言应用程序。第四章第四章 Matlab Matlab 编程基础编程基础4.7 4.7 本本 章章 小小 结结 在本章主要讲述了关于如何利用MATLAB的编程
203、语言M语言进行编程的方方面面。MATLAB提供了一种高级编程语言M语言,这种语言的语法结构与C语言非常类似,任何熟悉C语言的用户学习使用M语言都不会有任何障碍。尽管M语言是一种解释性的编程语言,但是随着MATLAB版本的不断升级,以及充分利用MATLAB提供的各种编程技巧,能够有效提高M语言应用程序的执行效率,使M语言成为了工程领域中最适合进行算法开发验证的编程语言。第五章第五章 SimulinkSimulink仿真仿真在工程实际中,控制系统的结构往往很复杂,如果不借助专用的系统建模软件,则很难准确地把一个控制系统的复杂模型输入计算机,对其进行进一步的分析与仿真。1990年,Math Work
204、s软件公司为MATLAB提供了新的控制系统模型图输入与仿真工具,并命名为SIMULAB,该工具很快就在控制工程界获得了广泛的认可,使得仿真软件进入了模型化图形组态阶段。但因其名字与当时比较著名的软件SIMULA类似,所以1992年正式将该软件更名为SIMULINK。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真 SIMULINK的出现,给控制系统分析与设计带来了福音。顾名思义,该软件的名称表明了该系统的两个主要功能:Simu(仿真)和Link(连接),即该软件可以利用鼠标在模型窗口上绘制出所需要的控制系统模型,然后利用SIMULINK
205、提供的功能来对系统进行仿真和分析。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真第一节 SIMULINK简介一、什么是SIMULINKSIMULINK是MATLAB软件的扩展,它是实现动态系统建模和仿真的一个软件包,它与MATLAB语言的主要区别在于,其与用户交互接口是基于Windows的模型化图形输入,其结果是使得用户可以把更多的精力投入到系统模型的构建,而非语言的编程上。所谓模型化图形输入是指SIMULINK提供了一些按功能分类的基本的系统模块,用户只需要知道这些模块的输入输出及模块的功能,而不必考察模块内部是如何实现的,通过对这
206、些基本模块的调用,再将它们连接起来就可以构成所需要的系统模型(以.mdl文件进行存取),进而进行仿真与分析。SIMULINK的最新版本是SIMULINK4.0(包含在MATLAB6.0里),MATLAB5.3里的版本为3.0版,它们的变化不大。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真二、SIMULINK的启动1、在MATLAB命令窗口中输入simulink结果是在桌面上出现一个称为Simulink Library Browser的窗口,在这个窗口中列出了按功能分类的各种模块的名称。当然用户也可以通过MATLAB主窗口的快捷按钮
207、来打开Simulink Library Browser窗口。2、在MATLAB命令窗口中输入simulink3结果是在桌面上出现一个用图标形式显示的Library :simulink3的Simulink模块库窗口。 两种模块库窗口界面只是不同的显示形式,用户可以根据各人喜好进行选用,一般说来第二种窗口直观、形象,易于初学者,但使用时会打开太多的子窗口。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真第五章第五章第五章第五章 Simu
208、linkSimulinkSimulinkSimulink仿真仿真仿真仿真三、SIMULINK的模块库介绍SIMILINK模块库按功能进行分类,包括以下8类子库:Continuous(连续模块)Discrete(离散模块)Function&Tables(函数和平台模块)Math(数学模块)Nonlinear(非线性模块)Signals&Systems(信号和系统模块)Sinks(接收器模块)Sources(输入源模块)第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真1、连续模块(Continuous) continuous.mdlInte
209、grator:输入信号积分Derivative:输入信号微分State-Space:线性状态空间系统模型Transfer-Fcn:线性传递函数模型Zero-Pole:以零极点表示的传递函数模型Memory:存储上一时刻的状态值Transport Delay:输入信号延时一个固定时间再输出Variable Transport Delay:输入信号延时一个可变时间再输出第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真2、离散模块(Discrete) discrete.mdlDiscrete-time Integrator:离散时间积分器Di
210、screte Filter:IIR与FIR滤波器Discrete State-Space:离散状态空间系统模型Discrete Transfer-Fcn:离散传递函数模型Discrete Zero-Pole:以零极点表示的离散传递函数模型First-Order Hold:一阶采样和保持器Zero-Order Hold:零阶采样和保持器Unit Delay:一个采样周期的延时第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真3、 Function&Tables(函数和平台模块) function.mdlFcn:用自定义的函数(表达式)进行运
211、算MATLAB Fcn:利用matlab的现有函数进行运算S-Function:调用自编的S函数的程序进行运算Look-Up Table:建立输入信号的查询表(线性峰值匹配)Look-Up Table(2-D):建立两个输入信号的查询表(线性峰值匹配)第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真4、 Math(数学模块) math.mdlSum:加减运算Product:乘运算Dot Product:点乘运算Gain:比例运算Math Function:包括指数函数、对数函数、求平方、开根号等常用数学函数Trigonometric F
212、unction:三角函数,包括正弦、余弦、正切等MinMax:最值运算Abs:取绝对值Sign:符号函数第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真Logical Operator:逻辑运算Relational Operator:关系运算Complex to Magnitude-Angle:由复数输入转为幅值和相角输出Magnitude-Angle to Complex:由幅值和相角输入合成复数输出Complex to Real-Imag:由复数输入转为实部和虚部输出Real-Imag to Complex:由实部和虚部输入合成复数
213、输出第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真5、 Nonlinear(非线性模块) nonlinear.mdlSaturation:饱和输出,让输出超过某一值时能够饱和。Relay:滞环比较器,限制输出值在某一范围内变化。Switch:开关选择,当第二个输入端大于临界值时,输出由第一个输入端而来,否则输出由第三个输入端而来。Manual Switch:手动选择开关第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真6、Signal&Systems(信号和系统模块) sigsy
214、s.mdlIn1:输入端。Out1:输出端。Mux:将多个单一输入转化为一个复合输出。Demux:将一个复合输入转化为多个单一输出。Ground:连接到没有连接到的输入端。Terminator:连接到没有连接到的输出端。SubSystem:建立新的封装(Mask)功能模块第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真7、Sinks(接收器模块) sinks.mdlScope:示波器。XY Graph:显示二维图形。To Workspace:将输出写入MATLAB的工作空间。To File(.mat):将输出写入数据文件。第五章第五章第
215、五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真8、Sources(输入源模块) sources.mdlConstant:常数信号。Clock:时钟信号。From Workspace:来自MATLAB的工作空间。From File(.mat):来自数据文件。Pulse Generator:脉冲发生器。Repeating Sequence:重复信号。Signal Generator:信号发生器,可以产生正弦、方波、锯齿波及随意波。Sine Wave:正弦波信号。Step:阶跃波信号。第五章第五章第五章第五章 SimulinkSimulinkSimuli
216、nkSimulink仿真仿真仿真仿真在Simulink模块库窗口中单击菜单项“File|New|Model”,就可以新建一个Simulink模型文件,如图5-3所示图5-3 Simulink模块库界面和新建模型文件窗口第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真四、四、SIMULINKSIMULINK简单模型的简单模型的 建立及模型特点建立及模型特点1、简单模型的建立(1)建立模型窗口(2)将功能模块由模块库窗口复制到模型窗口(3)对模块进行连接,从而构成需要的系统模型第五章第五章第五章第五章 SimulinkSimulinkSim
217、ulinkSimulink仿真仿真仿真仿真exp5_1.mdl两种添加模块的方法第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真(4)保存模型文件,执行主菜单File/save as命令,将文件命名为“exp5_1.mdl”后保存。(5)执行主菜单“simulation/start”命令,或单击工具栏上的“ ”图标,开始仿真。快
218、捷键为ctrl+T。(6)simulink默认的仿真时间是10s,结束仿真后,单击模块scope,可以看到仿真结果如图5-6所示。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真5-6示波器输出的仿真结果第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真2、模型的特点在SIMULINK里提供了许多如Scope的接收器模块,这使得用SIMULNK进行仿真具有像做实验一般的图形化显示效果。SIMULINK的模型具有层次性,通过底层子系统可以构建上层母系统。SIMULINK提供了对子系统
219、进行封装的功能,用户可以自定义子系统的图标和设置参数对话框。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真第二节 SIMULINK功能模块的处理 功能模块的基本操作,包括模块的移动、复制、删除、转向、改变大小、模块命名、颜色设定、参数设定、属性设定、模块输入输出信号等。 模块库中的模块可以直接用鼠标进行拖曳(选中模块,按住鼠标左键不放)而放到模型窗口中进行处理。 在模型窗口中,选中模块,则其4个角会出现黑色标记。此时可以对模块进行以下的基本操作。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink
220、仿真仿真仿真仿真1)移动:选中模块,按住鼠标左键将其拖曳到所需的位置即可。若要脱离线而移动,可按住shift键,再进行拖曳。2)复制:选中模块,然后按住鼠标右键进行拖曳即可复制同样的一个功能模块。3)删除:选中模块,按Delete键即可。若要删除多个模块,可以同时按住Shift键,再用鼠标选中多个模块,按Delete键即可。也可以用鼠标选取某区域,再按Delete键就可以把该区域中的所有模块和线等全部删除。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真4)转向:为了能够顺序连接功能模块的输入和输出端,功能模块有时需要转向。在菜单For
221、mat中选择Flip Block旋转180度,选择Rotate Block顺时针旋转90度。或者直接按Ctrl+I键执行Flip Block,按Ctrl+R键执行Rotate Block。5)改变大小:选中模块,对模块出现的4个黑色标记进行拖曳即可。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真6)模块命名:先用鼠标在需要更改的名称上单击一下,然后直接更改即可。名称在功能模块上的位置也可以变换180度,可以用Format菜单中的Flip Name来实现,也可以直接通过鼠标进行拖曳。Hide Name可以隐藏模块名称。7)颜色设定: F
222、ormat菜单中的Foreground Color可以改变模块的前景颜色,Background Color可以改变模块的背景颜色;而模型窗口的颜色可以通过Screen Color来改变。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真第三节 SIMULINK线的处理 exp5_4.mdl SIMULINK模型的构建是通过用线将各种功能模块进行连接而构成的。用鼠标可以在功能模块的输入与输出端之间直接连线。所画的线可以改变粗细、设定标签,也可以把线折弯、分支。 改变粗细:线所以有粗细是因为线引出的信号可以是标量信号或向量信号,当选中Form
223、at菜单下的Wide Nonscalar Lines时,线的粗细会根据线所引出的信号是标量还是向量而改变,如果信号为标量则为细线,若为向量则为粗线。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真设定标签:只要在线上双击鼠标,即可输入该线的说明标签。也可以通过选中线,然后打开Edit菜单下的Signal Properties进行设定,其中signal name属性的作用是标明信号的名称,设置这个名称反映在模型上的直接效果就是与该信号有关的端口相连的所有直线附近都会出现写有信号名称的标签。线的折弯:按住Shift键,再用鼠标在要折弯的线处
224、单击一下,就会出现圆圈,表示折点,利用折点就可以改变线的形状。线的分支:按住鼠标右键右键,在需要分支的地方拉出即可以。或者按住CtrlCtrl键,并在要建立分支的地方用鼠标拉出即可。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真例5-1一因果系统可由微分方程:描述,并且系统初始状态为0,求取系统响应按照建模方法不同,至少可以采用3种搭建该仿真模型方法一:按照题中所述,采用基本的积分模块来建立模型,如图(1)第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真step模块:stem
225、time=0,final value=2,产生2u(t);Gain:参数gain设为3和2;sum模块参数:Icon shape 设为“rectangular”,list of signs 设为“+-”其余模块采用默认值第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真运行仿真,可以在示波器窗口中看到系统响应曲线,如图(2)第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真方法二:采用传递函数模块来建立模型。对题目中所述的微分方程进行laplace变换,可以很容易的得到系统的传递函数
226、:于是可以搭建如图(3)的仿真模型。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真step模块:stem time=0,其余采用默认值;Transfer Fcn模块参数:Numertor=2,Denominate=1 3 2其余模块采用默认值运行仿真,可以在示波器窗口中看到系统响应曲线,如图(2)第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真方法三:该系统是一个单自由度的二阶系统,他的状态变量必须执行两个:x1和x2,它们之间的关系为:令输出,于是可以建立系统的状态方程为:第
227、五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真step模块:stem time=0State-Space模块参数:A=-3 -2;1 0,B=2;0,C=0 1,D=0.第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真第四节SIMULINK自定义功能模块自定义功能模块有两种方法,一种方法是采用Signal&Systems模块库中的Subsystem功能模块,利用其编辑区设计组合新的功能模块;另一种方法是将现有的多个功能模块组合起来,形成新的功能模块。对于很大的SIMULINK模型
228、,通过自定义功能模块可以简化图形,减少功能模块的个数,有利于模型的分层构建。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真一、方法1 exp5_5.mdl1)将ports&Subsystem 模块库中的Subsystem功能模块复制到打开的模型窗口中。2)双击Subsystem功能模块,进入自定义功能模块窗口,从而可以利用已有的基本功能模块设计出新的功能模块。二、方法2 exp5_6.mdl1)在模型窗口中建立所定义功能模块的子模块。2)用鼠标将这些需要组合的功能模块框住,然后选择Edit菜单下的Create Subsystem即可。
229、第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真三、自定义功能模块的封装 上面提到的两种方法都只是创建一个功能模块而已,如果要命名该自定义功能模块、对功能模块进行说明、选定模块外观、设定输入数据窗口,则需要对其进行封装处理。首先选中Subsystem功能模块,再打开Edit菜单中的Mask Subsystem进入mask的编辑窗口,可以看出有3个标签页。1)Icon:设定功能模块的外观。2)Initialization:设定输入数据窗口(Prompt List)。3)Documentation:设计该功能模块的文字说明。第五章第五章第五
230、章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真1、Icon标签页 此页最重要的部分是Drawing Commands,在该区域内可以用disp指令设定功能模块的文字名称,用plot指令画线,用dpoly指令画转换函数。 注意,尽管这些命令在名字上和以前讲的MATLAB函数相同,但它们在功能上却不完全相同,因此不能随便套用以前所讲的格式。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真2、Initialization标签页此页主要用来设计输入提示(prompt)以及对应的变量名称(variabl
231、e)。在prompt栏上输入变量的含义,其内容会显示在输入提示中。而variable是仿真要用到的变量,该变量的值一直存于mask workspace中,因此可以与其他程序相互传递。如果配合在initialization commands内编辑程序,可以发挥功能模块的功能来执行特定的操作。3、Documentation标签页此页主要用来针对完成的功能模块来编写相应的说明文字和Help。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真 第五节第五节 SIMULINKSIMULINK仿真的运行仿真的运行 构建好一个系统的模型之后,接下来的事
232、情就是运行模型,得出仿真结果。运行一个仿真的完整过程分成三个步骤:设置仿真参数,启动仿真和仿真结果分析。一、设置仿真参数和选择解法器设置仿真参数和选择解法器,选择Simulation菜单下的Parameters命令,就会弹出一个仿真参数对话框,它主要用三个页面来管理仿真的参数。Solver页,它允许用户设置仿真的开始和结束时间,选择解法器,说明解法器参数及选择一些输出选项。Workspace I/O页,作用是管理模型从MATLAB工作空间的输入和对它的输出。Diagnostics页,允许用户选择Simulink在仿真中显示的警告信息的等级。第五章第五章第五章第五章 SimulinkSimuli
233、nkSimulinkSimulink仿真仿真仿真仿真1、Solver页此页可以进行的设置有:选择仿真开始和结束的时间;选择解法器,并设定它的参数;选择输出项。1)仿真时间:注意这里的时间概念与真实的时间并不一样,只是计算机仿真中对时间的一种表示,比如10秒的仿真时间,如果采样步长定为0.1,则需要执行100步,若把步长减小,则采样点数增加,那么实际的执行时间就会增加。一般仿真开始时间设为0,而结束时间视不同的因素而选择。总的说来,执行一次仿真要耗费的时间依赖于很多因素,包括模型的复杂程度、解法器及其步长的选择、计算机时钟的速度等等。2)仿真步长模式:用户在Type后面的第一个下拉选项框中指定仿
234、真的步长选取方式,可供选择的有Variable-step(变步长)和Fixed-step(固定步长)方式。变步长模式可以在仿真的过程中改变步长,提供误差控制和过零检测。固定步长模式在仿真过程中提供固定的步长,不提供误差控制和过零检测。用户还可以在第二个下拉选项框中选择对应模式下仿真所采用的算法。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真变步长模式解法器有:ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb和discrete。ode45:缺省值,四/五阶龙格库塔法,适用于大多数连续或离散系
235、统,但不适用于刚性(stiff)系统。它是单步解法器,也就是,在计算y(tn)时,它仅需要最近处理时刻的结果y(tn-1)。一般来说,面对一个仿真问题最好是首先试试ode45。ode23:二/三阶龙格库塔法,它在误差限要求不高和求解的问题不太难的情况下,可能会比ode45更有效。也是一个单步解法器。ode113:是一种阶数可变的解法器,它在误差容许要求严格的情况下通常比ode45有效。ode113是一种多步解法器,也就是在计算当前时刻输出时,它需要以前多个时刻的解。ode15s:是一种基于数字微分公式的解法器(NDFs)。也是一种多步解法器。适用于刚性系统,当用户估计要解决的问题是比较困难的,
236、或者不能使用ode45,或者即使使用效果也不好,就可以用ode15s。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真ode23s:它是一种单步解法器,专门应用于刚性系统,在弱误差允许下的效果好于ode15s。它能解决某些ode15s所不能有效解决的stiff问题。ode23t:是梯形规则的一种自由插值实现。这种解法器适用于求解适度stiff的问题而用户又需要一个无数字振荡的解法器的情况。ode23tb:是TR-BDF2的一种实现,TR-BDF2是具有两个阶段的隐式龙格库塔公式。discrtet:当Simulink检查到模型没有连续状态
237、时使用它。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真固定步长模式解法器有:ode5,ode4,ode3,ode2,ode1和discrete。ode5:缺省值,是ode45的固定步长版本,适用于大多数连续或离散系统,不适用于刚性系统。ode4:四阶龙格库塔法,具有一定的计算精度。ode3:固定步长的二/三阶龙格库塔法。ode2:改进的欧拉法。ode1:欧拉法。discrete:是一个实现积分的固定步长解法器,它适合于离散无连续状态的系统。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真
238、仿真仿真仿真3)步长参数:对于变步长模式,用户可以设置最大的和推荐的初始步长参数,缺省情况下,步长自动地确定,它由值auto表示。Maximum step size(最大步长参数):它决定了解法器能够使用的最大时间步长,它的缺省值为“仿真时间/50”,即整个仿真过程中至少取50个取样点,但这样的取法对于仿真时间较长的系统则可能带来取样点过于稀疏,而使仿真结果失真。一般建议对于仿真时间不超过15s的采用默认值即可,对于超过15s的每秒至少保证5个采样点,对于超过100s的,每秒至少保证3个采样点。Initial step size(初始步长参数):一般建议使用“auto”默认值即可。第五章第五章
239、第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真4)仿真精度的定义(对于变步长模式)Relative tolerance(相对误差):它是指误差相对于状态的值,是一个百分比,缺省值为1e-3,表示状态的计算值要精确到0.1%。Absolute tolerance(绝对误差):表示误差值的门限,或者是说在状态值为零的情况下,可以接受的误差。如果它被设成了auto,那么simulink为每一个状态设置初始绝对误差为1e-6。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真5)Mode(固定步长模
240、式选择)Multitasking:选择这种模式时,当simulink检测到模块间非法的采样速率转换,它会给出错误提示。所谓的非法采样速率转换指两个工作在不同采样速率的模块之间的直接连接。在实时多任务系统中,如果任务之间存在非法采样速率转换,那么就有可能出现一个模块的输出在另一个模块需要时却无法利用的情况。通过检查这种转换,Multitasking将有助于用户建立一个符合现实的多任务系统的有效模型。 第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真使用速率转换模块可以减少模型中的非法速率转换。Simulink提供了两个这样的模块:unit
241、 delay模块和zero-order hold模块。对于从慢速率到快速率的非法转换,可以在慢输出端口和快输入端口插入一个单位延时unit delay模块。而对于快速率到慢速率的转换,则可以插入一个零阶采样保持器zero-order hold。Singletasking:这种模式不检查模块间的速率转换,它在建立单任务系统模型时非常有用,在这种系统就不存在任务同步问题。Auto:这种模式,simulink会根据模型中模块的采样速率是否一致,自动决定切换到multitasking和singletasking。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink
242、仿真仿真仿真仿真6)输出选项Refineoutput:这个选项可以理解成精细输出,其意义是在仿真输出太稀松时,simulink会产生额外的精细输出,这一点就像插值处理一样。用户可以在refinefactor设置仿真时间步间插入的输出点数。产生更光滑的输出曲线,改变精细因子比减小仿真步长更有效。精细输出只能在变步长模式中才能使用,并且在ode45效果最好。Produceadditionaloutput:它允许用户直接指定产生输出的时间点。一旦选择了该项,则在它的右边出现一个outputtimes编辑框,在这里用户指定额外的仿真输出点,它既可以是一个时间向量,也可以是表达式。与精细因子相比,这个选
243、项会改变仿真的步长。Producespecifiedoutputonly:它的意思是让simulink只在指定的时间点上产生输出。为此解法器要调整仿真步长以使之和指定的时间点重合。这个选项在比较不同的仿真时可以确保它们在相同的时间输出。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真2、WorkspaceI/O页此页主要用来设置SIMULINK与MATLAB工作空间交换数值的有关选项。Loadfromworkspace:选中前面的复选框即可从MATLAB工作空间获取时间和输入变量,一般时间变量定义为t,输入变量定义为u。Initials
244、tate用来定义从MATLAB工作空间获得的状态初始值的变量名。Savetoworkspace:用来设置存往MATLAB工作空间的变量类型和变量名,选中变量类型前的复选框使相应的变量有效。一般存往工作空间的变量包括输出时间向量(Time)、状态向量(States)和输出变量(Output)。Finalstate用来定义将系统稳态值存往工作空间所使用的变量名。Saveoption:用来设置存往工作空间的有关选项。Limitrowstolast用来设定SIMULINK仿真结果最终可存往MATLAB工作空间的变量的规模,对于向量而言即其维数,对于矩阵而言即其秩;Decimation设定了一个亚采样因
245、子,它的缺省值为1,也就是对每一个仿真时间点产生值都保存,而若为2,则是每隔一个仿真时刻才保存一个值。Format用来说明返回数据的格式,包括矩阵matrix、结构struct及带时间的结构structwithtime。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真3、Diagnostics页此页分成两个部分:仿真选项和配置选项。配置选项下的列表框主要列举了一些常见的事件类型,以及当SIMULINK检查到这些事件时给予的处理。仿真选项options主要包括是否进行一致性检验、是否禁用过零检测、是否禁止复用缓存、是否进行不同版本的SIM
246、ULINK的检验等几项。除了上述3个主要的页外,仿真参数设置窗口还包括real-timeworkshop页,主要用于与C语言编辑器的交换,通过它可以直接从SIMULINK模型生成代码并且自动建立可以在不同环境下运行的程序,这些环境包括实时系统和单机仿真。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真二、启动仿真设置仿真参数和选择解法器之后,就可以启动仿真而运行。选择Simulink菜单下的start选项来启动仿真,如果模型中有些参数没有定义,则会出现错误信息提示框。如果一切设置无误,则开始仿真运行,结束时系统会发出一鸣叫声。除了直接在
247、SIMULINK环境下启动仿真外,还可以在MATLAB命令窗口中通过函数进行,格式如下:t,x,y=sim(模型文件名,totf,simset(参数1,参数值1,参数2,参数值2,)其中to为仿真起始时间,tf为仿真终止时间。t,x,y为返回值,t为返回的时间向量值,x为返回的状态值,y为返回的输出向量值。simset定义了仿真参数,包括以下一些主要参数:AbsTol:默认值为1e-6设定绝对误差范围。Decimation:默认值为1,决定隔多少个点返回状态和输出值。Solver:解法器的选择。第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿
248、真仿真MaxRows:默认值为0,表示不限制。若为大于零的值,则表示限制输出和状态的规模,使其最大行数等于该数值。InitialState:一个向量值,用于设定初始状态。FixedStep:用一个正数表示步阶的大小,仅用于固定步长模式。MaxStep:默认值为auto。用于变步长模式,表示最大的步阶大小。如果知道模型文件名称,可以用以下命令得到该模型的仿真参数:simget(模型文件名)第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿
249、真第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真1、利用SIMULINK进行时域系统分析(shiyufx.mdl)2、利用SIMULINK求解电路(dianlu.mdl)3、利用SIMULINK设计一个时钟脉冲控制的RS触发器(RS.mdl)4、利用SIMULINK设计一个单极性SPWM控制的单相逆变电路(inverter.mdl)第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真(1)编写一个M文件,画出下列分段函数所表示的曲面(2)编写一个求圆的面积的函数文件。(3)编写一个
250、求圆的面积的命令文件第五章第五章第五章第五章 SimulinkSimulinkSimulinkSimulink仿真仿真仿真仿真(4)有初始状有初始状态为0的二的二阶微分方程微分方程x+0.2x+0.4x=0.2u (t), 其中其中u(t)是是单位位阶跃函数,函数,试建立系建立系统模型并仿真。模型并仿真。方法方法1:用:用积分器直接构造求解微分方程的模分器直接构造求解微分方程的模型。型。方法方法2:利用:利用传递函数模函数模块建模。建模。方法方法3:利用状:利用状态方程模方程模块建模。建模。X,Y=meshgrid(-3:0.1:3);T=X+Y;ifT1Z=0.54*exp(-0.75*X.
251、2-3.75*Y.2-1.5*Y);elseif-1Tli61ii=0.5000由此可知该电路的电源输出电流为0.5A。第六章第六章 电路分析应用电路分析应用3。根据模型用simulink仿真根据图6。1直接在simulink内构建仿真模型。其中要选用的模块如下:“DCVoltageSource”模块:它位于simpowerSystems节点下的“ElectricalSources”模块库下,代表一个理想直流电压源。“SeriesRLCBranch”模块:它位于simpowerSystems节点下的“Elements”模块库下,代表一条串联RLC支路。通过对其参数的设置可以将其变为代表单独的电
252、阻、电容或电感支路。第六章第六章 电路分析应用电路分析应用“CurrentMeasurement”模块:它位于SimPowerSystems节点下的“Measurements”模块库下,用于测量所在支路的电流值。“Display”模块:它位于Simulink节点下的“sinks”模块库下,用于输出所测量信号的值得结果显示。第六章第六章 电路分析应用电路分析应用建立模型文件第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用结论:通过M文件实现电路仿真的一般仿真步骤为:分析仿真对象确定仿真思路建立
253、仿真模型根据模型写出仿真程序运行后得到输出结果第六章第六章 电路分析应用电路分析应用采用simulink仿真模型进行电路仿真,可以直接根据电路图利用simulink中已有得电路模块直接搭建仿真模型。第六章第六章 电路分析应用电路分析应用对比两者,可见通过simulink仿真模型实现仿真为仿真者带来不少便利,它免除了仿真者进行理论分析得繁重负担,能更快直接的得到所需的最后仿真结果,而当仿真者需要对仿真模型进行理论分析的时候,matlab得M语言编程就有了更大得用武之地。它可以更加灵活得反映仿真者得研究电路的思路,让仿真者更加灵活得将自身想法在仿真环境中加以验证,促进理论分析得发展。第六章第六章
254、电路分析应用电路分析应用6.1.2PowerSystemBlockset模块集及powerlib窗口PowerSystemBlockset模块集是一个专用的电路仿真模块集。在powerlib窗口可以看到第六章第六章 电路分析应用电路分析应用ElectricalSources模块库(电源信号模源信号模块)第六章第六章 电路分析应用电路分析应用Elements模块库(线性及非性及非线性的性的电路网路网络元件模元件模块)第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用PowerElectronics模块库(功率功率电子器件模子器件模块)第六章第六章 电路分析应用电路分析应
255、用Machines模块库(电机模机模块)第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用Connectors模块库(连接模接模块,包括接地点和中,包括接地点和中间节点点)第六章第六章 电路分析应用电路分析应用Measurements模块库(测量模量模块)第六章第六章 电路分析应用电路分析应用Extras模块库(simpower模模块库中的中的扩充模充模块)第六章第六章 电路分析应用电路分析应用Demos模块库(matlab自带电路仿真示例的联接,打开后可以看到名为SimPow-erSystemsDemos的演示文档)Powergui模块(用户交互界面工具,主要用于分
256、析仿真模型中所用的PowerSystemBlockset模块库中的子模块的状态)第六章第六章 电路分析应用电路分析应用6.2一般电路仿真6.2.1动态电路仿真1、RC电路的响应第六章第六章 电路分析应用电路分析应用两个DCVoltageSource模块,参数Amplitude设置为90,404个SeriesRLCBranch模块,3个电阻400e3,20,60,1个电容0.5e-6两个Breaker(开关)模块。SimpoerSystems/Elements第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应
257、用电路分析应用2.RLC电路的响应如如图所示所示电路的初始能量路的初始能量为零,零,t=0时刻,将一个刻,将一个25mA的的直流源作用到直流源作用到电路上,其中路上,其中电容容C=25nF,电感感L=25mH,电阻阻R=400欧姆,画出欧姆,画出图中中电感支路上感支路上电流流iL的的图形形第六章第六章 电路分析应用电路分析应用1)建立模型因为电路初始能量为0,由换路定则iL(t)=0,电感上电压VL(t)=0,且VL(t)=L*d(iL)/dt,所以根据基尔霍夫电流定律第六章第六章 电路分析应用电路分析应用2)根据建模分析)根据建模分析进行仿真行仿真C=25e-9;%给电容容赋值L=25e-3
258、;%给电感感赋值R=400;%给电阻阻赋值w=1/(R*C)%求出求出1/(R*C)的的值w=1.0000e+005a=1/(L*C)%求出求出1/(L*C)的的值a=1.6000e+009第六章第六章 电路分析应用电路分析应用将I=2.5e-3A,w=1e5,a=1.6e9带入微分方程iL=dsolve(D2iL+1e5*DiL+1.6e9*iL=24e-3*1.6e9,iL(0)=0,DiL(0)=0)iL=3/125+1/125*exp(-80000*t)-4/125*exp(-20000*t)第六章第六章 电路分析应用电路分析应用I=25e-3;iL=dsolve(D2iL+w*DiL
259、+a*iL=I*a,iL(0)=0,DiL(0)=0)iL=I-1/2*I*(w+(w2-4*a)(1/2)/(w2-4*a)(1/2)*exp(-1/2*(w-(w2-4*a)(1/2)*t)+1/2*I*(w-(w2-4*a)(1/2)/(w2-4*a)(1/2)*exp(-1/2*(w+(w2-4*a)(1/2)*t)第六章第六章 电路分析应用电路分析应用ezplot(iL,0,0.003)第六章第六章 电路分析应用电路分析应用dsolve为求解微分方程符号的一般指令,格式:r=dsolve(eq1,eq2,.,cond1,cond2,.,v)其中,eq1,eq2,代表按序排列的不同微分
260、方程,cond1,cond2分别代表微分方程的初始条件,v代表微分方程中的独立变量(其默认独立变量为t)。此外,指令中用到字母D,代表与独立变量有关的微分,如上例中DiL代表式子:d(iL)/dt,D后面的数字n,则代表了进行n次微分,没有则默认为1。第六章第六章 电路分析应用电路分析应用ezplot函数作图指令ezplot(f,min,max)其中,f代表函数,min,max代表函数中变量的范围。第六章第六章 电路分析应用电路分析应用6.2.2正弦稳态电路仿真如如图所示,已知所示,已知C1=0.5F,R2=R3=2欧姆欧姆,L4=1H,Us=10cost,Is(t)=5cos2t,求求b,d
261、两点两点间的的电压。第六章第六章 电路分析应用电路分析应用1)建立模型有桥电路设Us电压源对b,d两点间产生的等效电压为Uoc,令电流源开路,即Is=0,第六章第六章 电路分析应用电路分析应用2)根据模型编写M文件进行仿真第六章第六章 电路分析应用电路分析应用wentaiUoc=3.0000+1.0000i0Zeq=1.4000-0.2000i1.4000+0.2000iU=3.0000+1.0000i7.0000+1.0000iwUmphi1.00003.1623-18.43492.00007.0711-8.1301第六章第六章 电路分析应用电路分析应用通过结果可以写出u(t)的表达式U(t
262、)=3.1623cos(t-18.4349)+7.0711cos(2t-8.1301)第六章第六章 电路分析应用电路分析应用disp是一个显示文字及数组的命令,它可以使最后的结果输出格式化,便于用户观察数据,其通用格式为:disp(x)3)采用Simulink进行仿真第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用6.2.3Powergui模块在电路仿真中的应用第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用Hidemessa
263、geduringanalysis:用于设置是否在模型仿真分析的时候,模型内的模块是否返回信息。选定-不返回。否则-返回PhasorsimulationDiscretizeelectricalmodel:仿真时模型将被离散化,抽样时间由sampletime决定第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用steadystateVoltagesandCurrents1)Units:peakvaluesRMS2)Frequency3)Disolav第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用第六章第六章 电路分析应用电路分析应用