【文档说明】MATLAB实用教程课件.ppt,共(1146)页,11.875 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-3109.html
以下为本文档部分文字说明:
数学软件与实验----matlab科学计算与仿真推荐参考书科学计算与仿真推荐参考书matlab是什么一个可视化的计算程序,广泛使用于从个人计算机到超级计算机范围内的各种计算机上包括命令控制、可编程,上百个预先定义命令和函数有许多强有力的命令,能完成大量的高级矩阵处理
强有力的二维、三维图形工具能与其他程序一起使用25个(不断增加中)不同的工具箱应用于特殊的应用领域工业研究与开发的有力工具数学教学,尤其线代,数值分析,科学计算方面的教研工具电子学,控制理论,物理学等工程科学方面的教研工具经济学,化学和生物学等有计算问题的所有领域中的教
学与研究名字取自矩阵实验室(matrixlaboratory)matlab不是什么不是万能的解决工具不是最高性能的编程语言受计算条件限制,不能解决超大型实际问题不能解决工具箱之外的问题种类--需要编写接口、算法甚至工具箱MATLAB的名称源自MatrixLaboratory,它是一种科学计
算软件,专门以矩阵的形式处理数据。MATLAB将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛地应用于科学计算丶控制系统丶信息处理等领域的分析丶仿真和设计工作,而且利用MATLAB产品的开放式结构,可以非常容易地对MATLAB的功能进行扩充,从而在不断深化
对问题认识的同时,不断完善MATLAB产品以提高产品自身的竞争能力。MATLABCompiler是一种编译工具,它能够将那些利用MATLAB提供的编程语言——M语言编写的函数文件编译生成为函数库丶可执行文件COM组件等等。这样就可以
扩展MATLAB功能,使MATLAB能够同其他高级编程语言例如C/C++语言进行混合应用,取长补短,以提高程序的运行效率,丰富程序开发的手段。目前MATLAB产品族可以用来进行:•·数值分析·数值和符号计算·工程与科学绘图·控制系统的设计与方针·数字图像处理·数字信号
处理·通讯系统设计与仿真·财务与金融工程MATLAB是MATLAB产品家族的基础,它提供了基本的数学算法,例如矩阵运算丶数值分析算法,MATLAB集成了2D和3D图形功能,以完成相应数值可视化的工作,并且提供
了一种交互式的高级编程语言——M语言,利用M语言可以通过编写脚本或者函数文件实现用户自己的算法。利用M语言还开发了相应的MATLAB专业工具箱函数供用户直接使用。这些工具箱应用的算法是开放的可扩展的,用户不仅可以查看其
中的算法,还可以针对一些算法进行修改,甚至允许开发自己的算法扩充工具箱的功能。目前MATLAB产品的工具箱有四十多个,分别涵盖了数据获取丶科学计算丶控制系统设计与分析丶数字信号处理丶数字图像处理丶金融财务分析以及生物遗传工程等专业领域。Simulink是基于MATLA
B的框图设计环境,可以用来对各种动态系统进行建模丶分析和仿真,它的建模范围广泛,可以针对任何能够用数学来描述的系统进行建模,例如航空航天动力学系统丶卫星控制制导系统丶通讯系统丶船舶及汽车等等,其中了包括连续丶离散,条件执行,
事件驱动,单速率丶多速率和混杂系统等等。Simulink提供了利用鼠标拖放的方法建立系统框图模型的图形界面,而且Simulink还提供了丰富的功能块以及不同的专业模块集合,利用Simulink几乎可以做到
不书写一行代码完成整个动态系统的建模工作。Stateflow是一个交互式的设计工具,它基于有限状态机的理论,可以用来对复杂的事件驱动系统进行建模和仿真。Stateflow与Simulink和MATLAB紧密
集成,可以将Stateflow创建的复杂控制逻辑有效地结合到Simulink的模型中。在MATLAB产品族中,自动化的代码生成工具主要有Real-TimeWorkshop(RTW)和StateflowCoder,这两种代码生成工具可以直接将Simulink的模型框图和Stateflow的状态
图转换成高效优化的程序代码。利用RTW生成的代码简洁丶可靠丶易读。目前RTW支持生成标准的C语言代码,并且具备了生成其他语言代码的能力。整个代码的生成丶编译以及相应的目标下载过程都是自动完成的,用户需要做得仅仅使
用鼠标点击几个按钮即可。MathWorks公司针对不同的实时或非实时操作系统平台,开发了相应的目标选项,配合不同的软硬件系统,可以完成快速控制原型(RapidControlPrototype)开发丶硬件在回路的实
时仿真(Hardware-in-Loop)丶产品代码生成等工作。另外,MATLAB开放性的可扩充体系允许用户开发自定义的系统目标,利用Real-TimeWorkshopEmbeddedCoder能够直接将Simulink的模型转变成效率
优化的产品级代码。代码不仅可以是浮点的,还可以是定点的。MATLAB开放的产品体系使MATLAB成为了诸多领域的开发首选软件,并且,MATLAB还具有300余家第三方合作伙伴,分布在科学计算丶机械动力丶化工丶计算机通讯丶汽车丶金融等领域。接口方式包括了
联合建模丶数据共享丶开发流程衔接等等。MATLAB结合第三方软硬件产品组成了在不同领域内的完整解决方案,实现了从算法开发到实时仿真再到代码生成与最终产品实现的完整过程。主要的典型应用包括:·控制系统的应用与开发——快速控制原型与硬件在回路仿真的统一平台dSPACE·信号处理系统的设计与开发
——全系统仿真与快速原型验证,TIDSP丶Lyrtech等信号处理产品软硬件平台·通信系统设计与开发——结合RadioLab3G和Candence等产品·机电一体化设计与开发——全系统的联合仿真,结合Easy5丶Adams等Matlab课程的组织结构•绪论•基础知识
•数学运算•基本编程•数据显示及存取•符号计算•数值计算•图形用户界面GUI•Simulink仿真•外部接口第一章概述MATLAB将计算、可视化和编程等功能集于一个易于使用的环境,并遇有如下特点:功能强大;简单易学;编程效率高。1.1MAT
LAB简介及安装1.MATLAB的发展历程2.MATLAB的特点3.MATLAB的安装1.MATLAB的发展历程1980年,美国新墨西哥大学计算机科学系主任Cleve着手编写供学生使用的子程序接口程序,取名为MATLAB;1984年,推出了MATLAB第一
个商业版本;1992年,推出MATLAB4.0版;1997年,推出MATLAB5.0版;2000年,推出MATLAB6.0版;2004年,推出MATLAB7.0版;2008年,推出MATLAB7.6版;201
2年,推出MATLABR2012A版2.MATLAB的特点开发环境编程数值处理图形化图形用户界面文件I/O和外部应用程序接口3.MATLAB的安装MATLAB对PC系统的要求1.2MATLAB的目录
结构安装MATLAB后,在安装目录下将包含如下文件夹。续表1.3MATLAB的工作环境1.菜单和工具栏2.命令窗口3.历史命令窗口4.当前工作目录窗口5.工作空间窗口本节介绍MATLAB的工作界面和基本的操作方法。MATLAB的工作界面主要包括:菜单
;工具栏;命令窗口;历史命令窗口;当前工作目录窗口;工作空间窗口。MATLAB工作环境1.菜单和工具栏这里只简单介绍默认情况下的菜单和工具栏。【File】菜单主要用于对文件的处理。【Edit】菜单主要用于复制、粘贴等操作,
与一般Windows程序的类似,在此不作详细介绍。【Debug】菜单用于调试程序。【Desktop】菜单用于设置主窗口中需要打开的窗口。【Window】菜单列出当前所有打开的窗口。【Help】菜单用于选择打开
不同的帮助系统。当用户单击“CurrentDirectory”窗口时,使得该窗口成为活动窗口,同时增加一个如下图所示的菜单【View】,用于设置如何显示当前目录下的文件。当用户单击“Workspace”窗口时,使得该窗口成为活动窗口,同时增加如下图所示的菜单【Vi
ew】和【Graphics】。2.命令窗口命令窗口是MATLAB的主要交互窗口,用于输入命令并显示除图形以外的所有执行结果。MATLAB命令窗口中的“>>”为运算提示符,表MATLAB处于准备状态。当在提示符后输入一段程序或一段运算
式后【Enter】键,MATLAB会给出计算结果,并再次进入准备状态(所得结果将被保存在工作空间窗口中)。单击命令窗口右上角的“”按钮,可以使命令窗口脱离主窗口而成为一个独立的窗口。3.历史命令窗口主要用于
记录所有执行过的命令;保留自安装后所有使用过命令的历史记录,并标明使用时间;可以通过用鼠标双击某一历史命令来重新执行该命令;可以成为一个独立的窗口。通过上下文菜单,可删除或粘贴历史记录;可为选中的表达式或命令创建一个M文件;可为表达式或命令创建快捷按钮。4.当前工作目录窗
口当前工作目录是指MATLAB运行文件时的目录。只有在当前工作目录或搜索路径下的文件、函数可以被运行或调用。如下图所示。5.工作空间窗口工作空间窗口将显示目前内存中所有的MATLAB变量的变量名、数据结构、字节数以及类型等信息,如下图所示。1.4MATLAB的通用命令1.常用命令2.
输入内容的编辑3.标点4.搜索路径与扩展通用命令是MATLAB中经常使用的一组命令,这些命令可以用来管理目录、函数、变量、工作空间、文件和窗口等。下面对这些命令进行介绍。1.常用命令常用命令的功能2.输入内容的编辑在命令窗口中,MATLAB提供了控制光标位置和进行简单编
辑的键盘按键,部分常用的键盘按键及其功能如下表所示。3.标点在MATLAB中,一些标点符号被赋予了特殊的功能,如下表所示。4.搜索路径与扩展用户自己书写的函数有可能并没有保存在搜索路径下。要解决这个问题,只需把程序所在的目录扩展成MATLAB的搜索路径即可。(1)查看
MATLAB的搜索路径选择MATLAB主窗口中的【File】|【SetPath】菜单,进入【设置搜索路径】对话框。通过该对话框可为MATLAB添加或删除搜索路径。在命令窗口中输入path或genpath可得到MATLAB的
所有搜索路径,具体代码如下:(2)设置MATLAB的搜索路径方法一:在MATLAB命令窗口中输入editpath或pathtool命令或通过【File】|【SetPath】菜单,进入“设置搜索路径”对话框,通过该
对话框编辑搜索路径。方法二:在命令窗口执行“path(path,‘D:\Study’)”,然后通过“设置搜索路径”对话框查看“D:\Study”是否在搜索路径中。方法三:在命令窗口执行“addpathD:\Study-
end”,将新的目录加到整个搜索路径的末尾。如果将end改为begin,可以将新的目录加到整个搜索路径的开始。1.5MATLAB的帮助系统1.命令窗口查询帮助系统2.联机帮助系统3.联机演示系统MATLAB为用户提供了非常完善的帮
助系统。下面分别介绍MATLAB的三类帮助系统。1.命令窗口查询帮助系统常见的帮助命令2.联机帮助系统用户可以通过下述方法进入MATLAB的联机帮助系统。直接单击MATLAB主窗口中的“”按钮;选中Help菜单的前4项中的任意一项;在命令窗口中执行helpwin、helpdesk或d
oc。3.联机演示系统可以通过以下方式打开联机演示统。选择MATLAB主窗口菜单的【Help】|【Demos】选项;在命令窗口输入demos;直接在帮助页面上选择Demos页。020406080100-40-2002040Magnitude(dB)Frequency(He
rtz)00.20.40.60.81-1-0.500.51WaveformTime(Seconds)Clickanddragwaveformtochangefundamentalfrequencyandampl
itude1.6MATLAB示例下面以一个简单的例子展示如何使用MATLAB进行简单的数值计算。习题1.简述MATLAB的主要功能。2.在命令窗口输入“w=3+2”,然后依次使用clear和clc命令,分别观察命令窗口、工作空间窗口和历史命令窗口的变化。3.将硬盘上一已有目录,加
入到搜索路径,并将其设置为当前工作目录。4.通过命令窗口,查询函数sin()的用法。5.通过联机帮助系统,查询函数inv()的用法。6.通过联机演示系统,查询并运行“ControlSystemsToolboxes”下的“CaseStudies”中的“YawDamperfo
ra747Aircraft”演示程序。7.在命令窗口依次执行“w=5;”、“p=2*w”和“q=p+w”。8.在命令窗口同时执行下述代码:w=5;p=2*wq=p+w第二章基础知识本章着重介绍的MATLAB基础知识包括:
数据类型;基本矩阵操作;运算符;字符串处理函数。目录2.1数据类型2.2基本矩阵操作2.3运算符和特殊符号2.4字符串处理函数习题2.1数据类型1.数值类型2.逻辑类型3.字符和字符串类型4.结构体类
型MATLAB中定义了很多种数据类型。本节讨论MATLAB中主要的数据类型及其使用方法。在MATLAB中有15种基本数据类型,每种基本数据类型均以数组/矩阵的形式出现。1.数值类型数值类型包含整数;浮点数;复数;Inf;NaN(1)
整数类型MATLAB支持1、2、4和8字节的有符号整数和无符号整数。数据类型的名称、表示范围和转换函数如下表所示。(2)浮点数类型MATLAB有单精度和双精度两种浮点数。其名称、存储空间、表示范围和转换函数如下表所示
。(3)复数类型复数包含实部和虚部。在MATLAB中可以用i或者j来表示虚部。(4)Inf和NaNInf和-Inf分别表示正无穷大和负无穷大。除法运算中除数为0或者运算结果溢出都会导致inf或-inf的运行结果。在MATLAB中用NaN(NotaNumber)来
表示一个既不是实数也不是复数的数值。2.逻辑类型在MATLAB中逻辑类型包含true和false,分别由1和0表示。在MATLAB中用函数logical()将任何非零的数值转换为true(即1),将数值0转换为false(即0)。3.
字符和字符串类型在MATLAB中,数据类型(char)表示一个字符。一个char类型的1n数组称为字符串string。4.结构体类型结构体类型是一种由若干属性(field)组成的MATLAB数组,其中的每个属性可以是任意数据类型。下图表示了一个结构体(P
ersonel),它包括3个属性(Name、Score和Salary),其中Name是一个字符串,Score是一个数值,Salary是一个15的向量。(1)结构体数组的构造构造一个结构体(数组)有两种方法。利用赋值语句通
过赋值语句为结构体中的每个指定属性赋值,从而构造结构体。利用函数struct()在MATLAB中,函数struct()的具体用法如下:其中,strArray、'field'和val分别表示结构体名、属性名和相应的属性值。(2)结构体
数组的访问通过结构体数组的下标引用,可以访问任意元素的所有属性,同时可以对属性进行赋值。2.2基本矩阵操作2.2.1矩阵的构造2.2.2矩阵大小的改变2.2.3矩阵下标引用2.2.4矩阵信息的获取2.2.5矩阵结构的改变2.2.6稀疏矩阵在MATLAB中,所有的数据均以二维、三维或高维矩阵的
形式存储,每个矩阵的单元可以是数值类型、逻辑类型、字符类型或者其他任何数据类型。对于标量,可以用11矩阵来表示;对于一组n个数据,可以用1n矩阵来表示;对于多维数组,可以用多维矩阵来表示。在MATLAB中,用命令whos来显示数据的类型、存储空间等信息。2.2.1矩阵的构
造1.简单矩阵构造2.特殊矩阵构造3.向量构造1.简单矩阵构造最简单的方法是采用矩阵构造符“[]”。构造1n矩阵(行向量)时,可以将各元素依次放入矩阵构造符[]内,并且以空格或者逗号分隔;构造mn矩阵时,每行如上处理,并且行与行之间用分号分隔。2.特殊矩阵构造在MATLAB中还提供一些函数
用来构造特殊矩阵,这些函数如下表所示。续表3.向量构造最简单的方法是采用向量构造符“:”,其常用的用法如下。(1)a:b返回以a为起点,以1为步长,且所有取值在a与b之间的向量。(2)a:s:b返回以a为起点,以s为步长,且所有取值在a与b之间的向量。2.2.2矩阵大小的改变
1.矩阵的合并2.矩阵行列的删除1.矩阵的合并矩阵的合并就是把两个或者两个以上的矩阵连接成一个新矩阵。矩阵构造符[]可用于构造矩阵,并可以作为一个矩阵合并操作符。表达式C=[AB]在水平方向合并矩阵A和B;表达式C=[A;B]在竖直方向合并矩阵A和B。具有相同
行数的两个矩阵,合并为一个新矩阵不具有相同行数的两个矩阵,不允许合并为一个新矩阵123456457810116912+=1234564578101169123×23×33×5123456457869+≠12
34564578693×22×3除了矩阵合并符“[]”外,还可以使用矩阵合并函数。矩阵合并函数的描述和基本调用格式如下表所示。2.矩阵行列的删除要删除矩阵的某一行或者是某一列,只需将该行或者该列赋予一个空矩阵[]即可。2.2.3矩阵下标引用1.访问单个元素2.线性引用
元素3.访问多个元素本小节将介绍通过矩阵下标来存取元素值的方法,包括访问单个元素、线性引用元素和访问多个元素等。1.访问单个元素2.线性引用元素对于矩阵A,线性引用元素的格式为A(k)。通常这样的引用用于行向量或列向量,但也可用于二维矩阵。MATLAB按列优先排列的一个长列向量格式(线性引用
元素)来存储矩阵元素。3.访问多个元素操作符“:”可以用来表示矩阵的多个元素。若A是二维矩阵,其主要用法如下:A(:,:)返回矩阵A的所有元素。A(i,:)返回矩阵A第i行的所有元素。A(i,k1:k2)返回矩阵A第i行的自k1到k2列的所有元素。A(:,j)返回矩阵A第j列的
所有元素。A(k1:k2,j)返回矩阵A第j列的自k1到k2行的所有元素。若A是多维矩阵,也可以通过类似的方法实现对其访问。2.2.4矩阵信息的获取1.矩阵尺寸信息2.元素的数据类型3.矩阵的数据结构本小节介绍如何获取矩阵的信息,包
括矩阵的尺寸、元素的数据类型和矩阵的数据结构等。1.矩阵尺寸信息矩阵尺寸函数可以得到矩阵的形状和大小信息,这些函数如下表所示。2.元素的数据类型查询元素数据类型信息的部分函数如下表所示。3.矩阵的数据结构判断矩阵是否为某种指定数据结构
的函数如下表所示。2.2.5矩阵结构的改变改变矩阵结构的函数表2.2.6稀疏矩阵1.稀疏矩阵的创建2.查看稀疏矩阵3.稀疏矩阵的运算规则在MATLAB中,可以用满矩阵存储方式和稀疏矩阵存储方式来存储矩阵。若一个矩阵只有少数的元素非零,称为稀
疏矩阵。稀疏矩阵非零元素及其对应的下标来表示。用户可以创建双精度、复数和逻辑等类型的稀疏矩阵。1.稀疏矩阵的创建在MATLAB中,用函数sparse()实现满矩阵到稀疏矩阵的转换。在MATLAB中用函数full()实现稀疏矩阵到满矩阵的转换。在MATLAB中,还可以用函数sparse()直接
创建稀疏矩阵,其具体用法如下。S=sparse(i,j,s,m,n),其中,i和j分别是稀疏矩阵非零元素的行和列下标,s为相应的非零元素的值,m和n分别是矩阵的行数和列数。MATLAB还提供一些函数用于创建特殊稀疏
矩阵,这些函数如下表所示。2.查看稀疏矩阵MATLAB提供一些函数用于查看稀疏矩阵的信息,如下表所示。下面的例子都是基于MATLAB自带的稀疏矩阵west0479。3.稀疏矩阵的运算规则在MATLAB中的各种命令和函数都可以用于稀疏矩阵的运算,并且遵循如下
的一些约定。(1)把矩阵变为标量或者定长向量的函数总是给出满矩阵;(2)对于标量或者定长向量变换到矩阵的函数,如函数zeros()、ones()、eye()、rand()等总是给出满矩阵;(3)从矩阵到矩阵的变换函数将以原矩阵的形式
出现;(4)在参与矩阵扩展的子矩阵(如[AB;CD])中,只要有一个是稀疏矩阵,那么所得的结果也是稀疏矩阵;(5)在矩阵引用中,将仍以原矩阵形式给出结果。2.3运算符和特殊符号2.3.1算数运算符2.3.
2关系运算符2.3.3逻辑运算符2.3.4运算优先级在MATLAB中提供了丰富的运算符,包括算数、关系和逻辑等3种运算符。2.3.1算数运算符在MATLAB中,算数运算符的用法和功能如下表所示。续表补充说明A^B的用法如下:当A和B都为矩阵时,此运算无定义;当A和B都是标量时,表示标量
A的B次幂;当A是标量且B为矩阵时,表示标量A的B中各元素次幂;当A为方阵且B为正整数时,表示矩阵A的B次乘积;当A为方阵且B为负整数时,表示矩阵A逆的负B次乘积;当A为可对角化的方阵且B为非
整数时,有如下表达式:2.3.2关系运算符MATLAB中关系运算符的用法和功能如下表所示。值得注意的是,关系运算符只针对两个相同长度的矩阵,或其中之一是标量的情况进行运算。对于前者,是指两个矩阵的对应元素进行比较,返回具有相同
长度的矩阵;对于后者,是指这个标量与另一个矩阵的每元素进行运算。关系运算C=f(A,B)的运算结果只有0和1两种情况,其中,函数f()表示关系运算符,0表示不满足条件,1表示满足条件。2.3.3逻辑运算符MATLAB提供元素方式和比特方式等逻辑运算符。元素方式逻辑运算符的用
法和功能如下表所示,其中例子采用如下矩阵:元素方式逻辑运算符&'、'|'和'~'与函数and()、or()和not()是等价的。比特方式逻辑运算符只接受逻辑和非负整数类型的输入变量,它是针对输入变量的二进制进行
逻辑运算。比特方式逻辑运算符的用法和功能如下表所示,表中例子采用A=28和B=200,其对应的二进制分别为11100和11001000。2.3.4运算优先级运算符的优先级决定表达式求值顺序;具有相同优先级的运算符从左到右依次进行运算;不同优
先级的运算符采用先进行优先高的运算。运算符的优先等级表由表中可以看到,括号的优先级别最高,因此可以用括号来改变默认的优先等级。2.4字符串处理函数2.4.1字符串的构造2.4.2字符串的比较2.4.3字符串的查找和替换2.4.4字符串与数值间的转换MATLAB提供了丰富的字符串操作,
包括字符串的创建、合并、比较、查找以及与数值之间的转换。2.4.1字符串的构造在MATLAB中,可以用一对单引号来表示字符串。2.4.2字符串的比较1.字符串比较函数2.用关系运算符比较字符串在MATLAB中提供了对字符串、
字符串数组和字符子串的比较功能。1.字符串比较函数在MATLAB中,字符串比较函数如下表所示。2.用关系运算符比较字符串在MATLAB中,可以对字符串运用关系运算符,但要求两个字符串具有相同的长度,或者其中一个是标量。2.4.3字符串的查找和替换MATLAB提供的一
些字符串查找和替换函数如下表所示。2.4.4字符串与数值间的转换MATLAB提供的一些数值转换为字符串函数如下表所示。续表MATLAB提供的一些字符串转换为数值函数如下表所示。习题1.计算复数3+4i与5−6i的乘积。2.构建结
构体Students,属性包含Name、Age和Email,数据包括{'Zhang',18,[„zhang@163.com‟,„zhang@263.com‟]}、{„Wang‟,21,[]}和{„Li‟
,[],[]},构建后读取所有Name属性值,并且修改‘Zhang‟的Age属性值为19。3.用满矩阵和稀疏矩阵存储方式分别构造下述矩阵:4.采用向量构造符得到向量[1,5,9,…,41]。5.按水平和竖直方向分别合并下述两个矩阵:6.分别删除第5题两个结果的第2行。7.分别将第5题两个结果的第
2行最后3列的数值改为[111213]。8.分别查看第5题两个结果的各方向长度。9.分别判断pi是否为字符串和浮点数。10.分别将第5题两个结果均转换为29的矩阵。11.计算第5题矩阵A的转秩。12.分别计算第5
题矩阵A和B的A+B、A.*B和A\B。13.判断第5题矩阵A和B中哪些元素值不小于4。14.分别用函数strcat()和矩阵合并符合并如下字符串:'Thepictureis'和'verygood'。15.创建字符串数组,其中元素分别为‘Picture‟
和'Pitch'。16.在第14题结果中查找字符串'e'。17.在第15题结果中匹配字符串'Pi'。18.将字符串'verygood'转换为等值的整数。19.将十进制的50转换为二进制的字符串。20.将十六进制的字符串‘50‟转换为三进制的
整数。第三章数学运算本章将着重介绍MATLAB中与数学运算有关的函数和概念。在MATLAB中一切数据均能以矩阵的形式表示:针对矩阵整体的数学运算,称之为矩阵运算;针对矩阵元素的数学运算,称之为矩阵元素运算。目录3.1矩阵运算3.2矩阵元素运算习题3.1矩阵运算3.1
.1矩阵分析3.1.2线性方程组3.1.3矩阵分解3.1.4矩阵的特征值和特征向量3.1.5矩阵相似变换3.1.6非线性运算矩阵运算是线性代数中极其重要的部分,MATLAB具有强大的矩阵运算能力。3.1.1
矩阵分析1.向量间的距离2.矩阵的秩3.矩阵的行列式4.矩阵的迹5.矩阵的化零矩阵6.矩阵的正交空间7.矩阵的简化梯形形式8.矩阵空间之间的角度MATLAB提供的部分矩阵分析函数如下表所示。1.向量间的距离2.矩阵的秩矩阵A中线性无关的
列向量个数称为列秩,线性无关的行向量个数称为行秩。可以证明列秩与行秩是相等的。3.矩阵的行列式4.矩阵的迹矩阵的迹定义为矩阵对角元素之和。在MATLAB中用函数trace()来计算矩阵的迹。5.矩阵的化零矩阵对于非满秩矩阵A,若存在矩阵Z使得AZ=0且ZT
Z=I,则称矩阵Z为矩阵A的化零矩阵。在MATLAB中用函数null()来计算矩阵的化零矩阵。6.矩阵的正交空间矩阵A的正交空间Q满足QTQ=I,且矩阵Q与A具有相同的列基底。7.矩阵的简化梯形形式矩阵A的简化梯形形式为,其中Ir为r阶单位矩阵。*0*rI8
.矩阵空间之间的角度矩阵空间之间的角度代表具有相同行数的两个矩阵线性相关程度,夹角越小代表线性相关度越高。3.1.2线性方程组线性方程组求解问题,可以表述为给定两个矩阵A和B,求解X使得AX=B或XA=B。XA=B可以表示为A’
Y=B’,且X=Y’。下面仅讨论AX=B的情况。3.1.3矩阵分解1.Cholesky分解2.LU分解3.QR分解4.奇异值分解5.Schur分解矩阵分解是把一个矩阵分解成比较简单或者对它性质比较熟悉的若干矩阵的乘积的
形式。本小节将介绍几种矩阵分解的方法。矩阵分解函数表1.Cholesky分解Cholesky分解是把对称正定矩阵A表示为上三角矩阵R的转置与其本身的乘积,即A=RTR。对于稀疏矩阵,MATLAB中用函数cholinc()计算不完全Cholesky分解,具体用法如下:R=
full(cholinc(sparse(X),DROPTOL)),其中DROPTOL为不完全Cholesky分解的丢失容限;R=full(cholinc(sparse(X),„0‟)),完全Cholesky分解。2.LU
分解高斯消去法又称LU分解,将任意一个方阵A分解为一个交换下三角矩阵L和一个上三角矩阵U的乘积,即A=LU。交换下三角矩阵为下三角矩阵经行变换的结果。LU分解在MATLAB中用函数lu()来实现,具体用法如下:[L,U]=lu(X),X为一个方阵,L为交换下三角矩阵,U为上三角矩阵,满足关系
X=L*U;[L,U,P]=lu(X),X为一个方阵,L为下三角矩阵,U为上三角矩阵,P为置换矩阵,满足关系P*X=L*U或X=P-1*L*U。考虑线性方程组AX=B和矩阵A的LU分解,线性方程组可改写成L*U*X=B,由于左除算
符'\'可以快速处理三角矩阵,因此:X=U\(L\B)矩阵的行列式和逆也可以利用LU分解来计算,如det(A)=det(L)*det(U)inv(A)=inv(U)*inv(L)对于稀疏矩阵,在MATLAB中提
供了函数luinc()来做不完全LU分解,其具体用法如下:[LU]=luinc(X,DROPTOL),其中X、L和U的含义与函数lu()中的变量相同,DROPTOL为不完全LU分解的丢失容限。当DROPTOL设为0时,
退化为完全LU分解。[L,U]=luinc(X,„0‟),0级不完全LU分解。[L,U,P]=luinc(X,'0'),0级不完全LU分解。3.QR分解QR分解就是将m×n的矩阵A分解为m×n的矩阵Q和n×n的上三角矩阵R的乘积,且Q‘*Q=I,即A=
Q*R。在MATLAB中QR分解是由函数qr()来实现,其具体用法如下:[Q,R]=qr(A)满足A=Q*R。R=qr(A),返回上三角矩阵R。4.奇异值分解奇异值分解就是将mn的矩阵A分解为A=U*S*V’,其中U为mm的酉矩阵,V为nn的酉矩阵,S为mn的
矩阵,并可如下表示:,其中,,000S12,,,rdiag()rrankA0(1,2,,)iir在MATLAB中奇异值分解是由函数svd()来实现,其具体用法如下:5.Schur分解Schur分解就是将复方阵A分解为A=U*L*U’,其
中U为酉矩阵,L为上(下)三角矩阵,其对角线元素为A的特征值。在MATLAB中Schur分解是由函数schur()来实现,其具体用法如下:[U,L]=schur(A),满足A=U*L*U’,其中L为上三角矩阵。L=schur(A),返回上三角矩阵L。3.1.4矩阵的特征值和特征向
量方阵A的特征值λ和其对应的特征向量ν满足下式:A*ν=λ*ν在MATLAB中用函数eig()来计算特征值和其对应的特征向量,其具体用法如下:d=eig(A),返回矩阵A的所有特征值。[V,D]=eig(A),返回矩阵A的特征值和特征向量。3.1.5矩阵相似变换1.对角阵变换2.
Jordan变换矩阵相似变换是指,对于方阵A和非奇异矩阵B可得到相似矩阵X=B-1*A*B。1.对角阵变换对于方阵A,若[VD]=eig(A)得到的矩阵V非奇异,则A可经过相似变换得到对角阵,即D=V-
1*A*V,也称矩阵A可对角化。2.Jordan变换对于方阵A,若[VD]=eig(A)得到的矩阵V奇异,则A经过相似变换将不能得到对角阵,只能得到其对应的Jordan标准型。在MATLAB中用函数jordan()来实现Jordan变换,其具体用法如下
:[V,D]=jordan(A),满足D=V-1*A*V。D=jordan(A),返回矩阵A对应的Jordan标准型。3.1.6非线性运算1.矩阵指数运算2.矩阵对数运算3.矩阵开平方运算4.通用矩阵运算MATLAB提供一些矩阵的非线性运算函数,其功能如下表所示。1.矩阵指数运
算2.矩阵对数运算矩阵对数运算是矩阵指数运算的逆运算,在MATLAB中用函数logm()来计算矩阵对数,其具体用法如下:L=logm(A),返回矩阵A的对数。3.矩阵开平方运算对于方阵A,可以计算它的开平方得到矩阵X,即满足X*X=A。如果矩阵A是奇异的,它有可能不存在平方根X。在MATL
AB中,有两种计算矩阵A平方根的方法,即A^0.5和sqrtm(A)。函数sqrtm()比A^0.5的运算精度更高,其具体用法如下:X=sqrtm(A),返回矩阵A的平方根X。4.通用矩阵运算MATLAB提供通用矩阵运算的函数funm(),其具体用法如下:F=fu
nm(A,fun),将指定函数fun作用在方阵A上。可以使用的指定函数fun如下表所示。3.2矩阵元素运算3.2.1三角函数3.2.2指数和对数函数3.2.3复数函数3.2.4截断和求余函数3.2.5特殊函数本节将介
绍矩阵元素的数学函数:包括三角函数;指数/对数函数;复数函数;截断/求余函数;特殊函数。3.2.1三角函数MATLAB提供一些三角函数,其功能如下表所示。续表3.2.2指数和对数函数MATLAB提供一些指数和对数函数。指数和对数函数表3.2.3复数函数MATLAB提
供一些复数函数,其功能如下表所示。3.2.4截断和求余函数MATLAB提供一些截断和求余函数,其功能如下表所示。3.2.5特殊函数1.工程函数2.数论函数3.坐标变换函数本小节介绍一些用途比较特殊的数学函数,包括应用于工程上的函数(工程函数)、数论函数和坐标变换函数。1.工程函数工程函数经常
在数学、物理和工程等问题中出现,在MATLAB中提供一些工程函数。表工程函数2.数论函数MATLAB提供一些数论函数,其功能如下表所示。3.坐标变换函数在MATLAB中提供一些坐标变换函数,其功能如下表所示。习题1.计算矩阵A的范数、行列式、秩、化零空间和正交空间。2.求解线性方程组AX=B,
其中A如第1题所示,B=[11111]T。3.对矩阵A进行LU分解和Schur分解,其中A如第1题。1724185023571449461320431012192162111825256
A4.对矩阵A的前4行进行QR分解和奇异值分解,其中A如第1题。5.计算矩阵A的特征根及对应的特征向量,判断矩阵A是否可对角化,其中A如第1题。6.计算矩阵A的指数、开平方和余弦值,其中A如第1题。7.计算矩阵A每个元素的指数、开平方和余弦值(
元素单位为度),其中A如第1题。8.计算复数矩阵C每个元素的模、相角和共轭。9.分别使用函数fix()、floor()、ceil()和round(),计算第8题中的相角结果。10.将2-i的模结果近似为有理数,并以数值形式显示。11.计算,其中m=4!和n是4
2与35的最大公因数。12.将球坐标系中的点(1,1,1)分别转换到笛卡尔坐标系和极坐标系。3+4i2-i-i2-20C第四章基本编程MATLAB提供丰富的函数库,并可以进行程序设计,编写扩展名为.m的M文
件,实现各种程序设计功能。MATLAB提供大量的函数,包括内建函数和自带函数。用户也可以利用M文件来创建函数、函数库和脚本。目录4.1M文件基础4.2变量和语句4.3程序调试4.4函数设计和实现习题当需要创建一个M文件时,可以通过【File】
|【New】|【M-File】菜单进入文本编辑器界面。当需要打开一个M文件时,可以通过【File】|【Open】菜单进入文件选择的目录界面。本章将着重介绍M文件编程的规则和注意事项。4.1M文件基础4.1.1函数4.1.2脚本4.1.3子函数与私有函数4.1.4伪代码M
文件有函数(Functions)和脚本(Scripts)两种格式。M文件可以在任意的文本编辑器中进行创建和编辑,但推荐和默认使用MATLAB自带的文本编辑器和Notebook。4.1.1函数MATLAB中许多常用的函数都是函数式M文件。函数被调用
时,通过获取外部参数进行运算,并向外部返回运算结果。函数内部的变量都是隐含的,存放在函数本身的工作空间内。4.1.2脚本脚本也是扩展名为.m的文件,可包含MATLAB的各种命令。在命令窗口中直接键入此文件的文件名,MATLAB可逐一执行文件内的所有命令。将脚本所
在目录设置为当前工作目录,并在文本编辑器中打开脚本后,可通过如下方法运行脚本:单击【Debug】菜单下的【Run】;单击快捷键F5;单击工具条上的图标。脚本运行过程所产生的变量都是全局变量,都驻留在MATLAB工作空间内。结
合上例,对函数和脚本进行总结如下。(1)函数名必须与文件名相同。(2)脚本没有输入参数和返回值。(3)函数可以包括零个或多个输入参数和返回值,如函数nargin和nargout包含输入参数和返回值的个数。(4)函数被调用时,MATLAB会为它开辟一函数工作空间(Func
tionworkspace),用来存放中间变量,当执行完函数文件的最后一条命令或者遇到return命令时就结束该函数的运行,返回函数的输出,同时将临时工作空间清空。(5)在M文件中,从开头到第一个非注释行之间的第一个注释行组(之间无空行)是帮助文本。(6)函数中的
变量(除特殊声明外)都是局部变量,而脚本中的变量都是全局变量,关于变量的有关内容详见第4.2节。(7)在函数中调用脚本文件,等价于在函数中将脚本文件的内容粘贴在调用的位置。4.1.3子函数与私有函数一个M文件可以包含多个函
数,其中,一个是主函数,其他是子函数。主函数必须出现在最上方,其后可有若干子函数,子函数的次序可随意调整。主函数和各子函数的工作空间都是彼此独立的。私有函数是主函数的一种,它只能够在一个特定的限定函数群
中可见。当M文件中需要调用某一个函数时,MATLAB是按照以下顺序来搜寻的:检查此函数是否是子函数;检查此函数是否为私有目录的函数;从所设定的搜寻路径搜索此函数。搜索过程中,只要找到与第一个文件名相符的函数就会立即
取用而停止搜索。4.1.4伪代码一个M文件首次被调用时,MATLAB将对该M文件进行语法分析,并把生成的相应伪代码(P码)存放在内存中。此后当再次调用该M文件时,将直接运行该文件在内存中的伪代码。伪代码文件和原码文件具有相同的文件名,但其扩展名为.p。伪代码文件不是只
有当M文件被调用时才产生,也可使用pcode命令预先生成。4.2变量和语句4.2.1变量类型4.2.2程序控制结构MATLAB的主要功能虽然是数值运算,但是它也是一个完整的程序语言,包括各种语句格式和语法规则。但与C语言不同的是,MATLAB中的变量是不需要事先定义的,如前3章的例
子。4.2.1变量类型在MATLAB中,变量名必须以字母开头,之后可以是任意字母、数字或下划线,但之间不能有空格;区分大小写;第63个字符之后的部分将被忽略。除了上述命名规则外,MATLAB还提供一些特
殊的变量,如下表所示。除命名规则外,变量命名时还需要注意以下两个方面:(1)变量名不能与已有函数名相同,否则在内存中有该变量时将不能调用同名函数;(2)变量名不能与MATLAB预留的关键字和特殊变量名相同,否则系统会显示错误信息。变量按照作用范围分为局部变量和全局变
量。在MATLAB中使用命令global声明全局变量,如下所示:需要使用指定全局变量的M文件,都必须在各自的代码中声明此全局变量。只要存在声明某全局变量的M文件,则全局变量存在。在使用全局变量中需要注意以下几个方面。在使用之前必须首先定义,建议将定义放在函数体的首行位置。虽然对全局变量
的名称并没有特别的限制,但是为了提高程序的可读性,建议采用大写字符命名全局变量。全局变量会损坏函数的独立性,使程序的书写和维护变得困难,尤其是在大型程序中,不利于模块化,不推荐使用。4.2.2程序控制结构1.顺序结构2.循环结构3
.选择结构4.其他控制结构对于实现任何功能的程序,均可由顺序、循环和选择3种基本结构组合实现。为了更方便地设计程序,还需要一些特殊的控制结构,如跳出循环结构。下面将分别进行介绍。1.顺序结构顺序结构就是由前至后依次执行程序的各条代码,直至最后一条代码。脚本文件就是典型的顺序结构。01
234567891000.10.20.30.40.50.60.7StepResponseTime(sec)Amplitude2.循环结构循环结构是按照给定的条件,重复执行指定的代码。该结构一般用于有规律的重复运算。在MATLAB中包括for循环和whi
le循环。(1)for循环(2)while循环3.选择结构选择结构是根据给定的条件来执行不同的代码。在MATLAB中有if-else-end和switch-case-otherwise两种结构。(1)if-else-end结
构(2)switch-case-otherwise结构4.其他控制结构在程序设计中经常遇到提前终止循环、跳出子程序、显示出错信息等情况,主要有continue、break、return、echo、error、try…catch等。下面分别对各结构进行介绍。(1)continue其作用
是结束本次循环,即跳过循环体中尚未执行的代码,接着进行下一次是否执行循环的判断。(2)break它的作用是终止本次循环,跳出所在层循环。(3)return此命令可使正在运行的函数正常退出,并返回调用它的代
码段继续运行,它也可强制结束该函数的执行。如MATLAB自带函数showopcevents()。(4)echo执行M文件时,通常在命令窗口是看不到执行过程的,但在特殊情况下(比如演示)要求M文件的每条命令都要显示出来。这时可以用echo命令实现这样的功能。对于脚本,echo命令可以用以下方式
来实现:对于函数,echo命令可以用以下方式来实现:(5)error(6)try…catch(7)input此命令用来提示并接收用户从键盘输入数据、字符串或表达式的值,语法规则如下:(8)keyboard此命令将停止文件的执行并将控制权交给键盘,此时命令窗口的提示符由“>>”变成
“K>>”,当输入return后,控制权将交回文件。该命令对程序的调试和在程序运行中修改变量值都很方便。(9)pause此命令用于暂时中止程序的运行。该命令对程序的调试和查询中间变量值时很方便。该命令的语法规则如下:4.3程序调试4
.3.1直接调试法4.3.2工具调试法在编译和运行程序时出现错误(警告)无法避免,因此掌握程序调试的方法和技巧对提高工作效率很重要。下面针对语法错误和逻辑错误推荐两种调试方法,即直接调试法和工具调试法。4.3.1直接调试法对于简单的程序往往采用直接调试法,通常采取的措施如下。(1)通过分析后
,将重点怀疑语句后的分号删掉,将结果显示出来,然后与预期值进行比较。(2)单独调试函数时,将函数声明行注释掉,并定义输入变量的值,然后以脚本方式运行,这样可保存中间变量,进而进行分析和找出错误。(3)在程序中的适当位置添加输出变量值的代码。(4)在程序中的适当位置添加keyboard命令。复
杂的程序,必须采用工具调试法,即借助MATLAB提供的工具调试器(Debugger)进行调试。4.3.2工具调试法1.以命令行为主的程序调试2.以图形界面为主的程序调试MATLAB提供了调试程序的工具,利用这些工具可
以提高编程的效率,包括命令行的调试函数和图形界面的菜单命令。1.以命令行为主的程序调试以命令行为主的程序调试手段具有通用性,可以适用于各种平台,它主要是应用MATLAB提供的调试命令。在命令窗口输入helpdebug可以看到对于这些命令的简单描述,下面分别进行介绍。(1)设置断点
这是最重要的部分,可以利用它来指定程序代码的断点,使得程序在断点前停止执行,并进入调试模式,从而可以检查当前各个变量的值。dbstopinmfile在文件名为mfile的M文件的第一个可执行语句前设置断点。dbstopinmfi
leatlineno在文件名为mfile的M文件的第lineno行设置断点。如果第lineno行为非执行语句,则在其后的第一个可执行语句前设置断点。dbstopinmfileatsubfun在文件名为mfile的M文
件的子程序subfun的第一个可执行语句前设置断点。dbstopiferror在程序运行遇到错误时,自动设置断点。这里的错误不包括try…catch之间的错误。dbstopifallerror在程序运行遇到错误时,自动设置断点。这里的错误包括try…catch之间的错误。dbs
topifwarning在程序运行遇到警告时,自动设置断点。dbstopifcaughterror在程序运行try…catch间代码遇到错误时,自动设置断点。dbstopifnaninf或dbstopifinfnan当程序运行遇到无穷值或者非数值时
,自动设置断点。在命令窗口输入dbstopinfunction8,并打开文件function8.m就可看到如下图所示的界面,它在第一个可执行语句前设置了断点。单击图中红点,会发现红点被取消,此时回复到初始状态。然后在命令窗口依次输入dbs
topiferror和function8(magic(3)),可得到如下的运行结果和如下图所示的界面。(2)清除断点dbclearall清除所有M文件中的所有断点。dbclearallinmfile清除文件名为mfil
e的M文件中的所有断点。dbclearinmfile清除文件名为mfile的M文件中第一个可执行语句前的断点。dbclearinmfileatlineno清除文件名为mfile的M文件中第lineno行语句前的断点。dbclearinmfileatsubfun清除文件名为mfile的M文件
中子程序subfun的第一个可执行语句前的断点。dbcleariferror清除由dbstopiferror设置的断点。dbclearifwarning清除由dbstopifwarning设置的断点。db
clearifnaninf清除由dbstopifnaninf设置的断点。dbclearifinfnan清除由dbstopifinfnan设置的断点。(3)恢复执行dbcont此命令可从断点处恢复程
序的执行,直到遇到程序的另一个断点或错误。(4)调用堆栈dbstack此命令显示M文件名和断点产生的行号、调用此M文件的文件名和行号等,直到最高层的M文件,即列出了函数调用的堆栈。(5)列出所有断点dbstatus此命
令可列出所有的断点,包括错误、警告、nan和inf等。dbstatusmfile此命令可列出文件名为mfile的M文件中的所有断点。(6)执行1行或多行语句dbstep执行当前M文件下一个可执行语句。dbstepnlin
es执行当前M文件下nlines行可执行语句。dbstepin当下一条可执行语句是对另一个函数的调用,此命令将从被调用函数的第一个可执行语句执行。dbstepout此命令将执行函数剩余的代码然后停止。(7)列出文件内容dbtypemfile列
出文件名为mfile的M文件中的内容。dbtypemfilestart:end列出文件名为mfile的M文件中指定行号范围的部分。(8)切换工作空间dbdown遇到断点时,将当前工作空间切换到被调用M文件的工作空间。dbup将
当前工作空间(断点处)切换到调用文件的工作空间。(9)退出调试模式dbquit立即结束调试器并返回到基本工作空间,但所有断点仍有效。2.以图形界面为主的程序调试MATLAB自带的文本编辑器同时也是程序的编译器,用户可以在程序编
辑后直接进行调试,更加方便和直观。通过新建M文件打开文本编辑器和编译器,选择主菜单中【Debug】选项,其下拉菜单包括多种调试命令,如下图所示。下拉菜单中的命令有一部分在工具栏中有图标相对应,其功能与命令行调试程序是相同的,下面只对各命令做简单
介绍。4.4函数设计和实现4.4.1建立数学模型4.4.2编写代码4.4.3运行程序4.4.4良好的编程习惯前面介绍了MATLAB编程的语法规则,本节将通过一个实例讲述用MATLAB解决实际问题的步骤。4.4.1建
立数学模型PID控制的结构图下面按照图中各模块分别进行数学建模。PID控制器被控对象输出参考输入+-1.参考输入参考输入也称为参考信号,本例中选取单位阶跃函数作为参考输入,它满足如下所示的条件:1000trtt
2.PID控制器前面已经讲述了PID控制器参数整定方法,下面讲解它的物理含义。3.被控对象4.4.2编写代码1.参数整定2.被控对象1.参数整定2.被控对象需要说明的是,上述函数中采用中文注释,这在MATLAB中是可以识别的。而对于一些特殊的符号或字符,则需要使用函数slChara
cterEncoding()来设置解码规则,通过命令helpslCharacterEncoding可了解到它支持“Unix,Linux,Mac”,“Hp-UX”,“Windows(USA,WesternEurope)”,“Windows(Japan)”和“Windows(Other
)”。4.4.3运行程序当运行出错或运行结果不理想时,首先按照第4.3节的方法进行调试,然后在确定程序无误的情况下,检查数学模型和使用的算法是否正确和恰当。从本例中可以看出,MATLAB提供了十分强大的功能。4.4.4良好的编程习惯Matlab编程是程序开发的一种,应该符合一般程序开发的规律。良好
的编程习惯可以提高工作效率,减少不必要的失误。对于初学者来说,应该注意以下几个方面。(1)数据结构必须事先规划好,如果数据结构设计存在错误或不妥,那么程序修改的工作量将是巨大的。(2)尽量避免使用全局变量。(3)函数尽可能功能简明,使其可以重用,从而程序
实现模块化。(4)良好的编写风格,使得别人或者自己能够容易读懂之前所写的代码。具体的方法包括:变量和函数名统一按规律命名,并具有较明确的意义;代码层次分明;注释清楚且充分等。(5)注重程序的充分测试,注意警告
信息。(6)具有建立和求解数学模型的能力,能够简化程序的复杂性。Matlab编程本身也有其特有的地方,如执行速度慢,为了解决这个问题可以采用如下的措施。(1)尽量避免使用循环,一是用向量化的运算来代替循环操作,二是在多重
循环时外循环次数应小于内循环。(2)大型矩阵的预先确定各方向长度。(3)优先考虑使用MATLAB的内建函数。(4)应用MEX技术,这部分内容将在第11章中介绍。习题第五章数据显示及存取本章将着重介绍:数据的显示;数据的保存;数据
的读取。目录5.1二维绘图5.2三维绘图5.3图形处理5.4图形窗口5.5MAT文件应5.6文件I/O习题5.1二维绘图5.1.1函数plot()5.1.2函数fplot()5.1.3函数ezplot
()二维图形的绘制是MATLAB语言图形处理的基础。本节将主要介绍函数:plot();fplot();ezplot()。5.1.1函数plot()1.plot(y)2.plot(x,y)3.plot(x,y,s)1.plot(y)参数y可以是向量、实数矩
阵或复数向量;若y为向量,图形以向量索引为横坐标值,以向量元素值为纵坐标值;若y为实数矩阵,则分别绘制y的各列向量;若y为复向量,图形以复向量对应的实部向量为横坐标值,以虚部向量为纵坐标值。01020304050607
08090100-1-0.8-0.6-0.4-0.200.20.40.60.8101020304050607080901000204060801001201401601802002.plot(x,y)参数x和y均可为向量和矩阵,分以下三种情况;参数x和y均为n维向量;参数x
为n维向量且y为mn或nm的矩阵;参数x和y均为mn矩阵。01234567891011.21.41.61.822.22.42.62.833.plot(x,y,s)参数x和y的含义同plot(x,y)中的相同。常见的可用字符及其意义如下表所示。02468101
214161820-1-0.8-0.6-0.4-0.200.20.40.60.815.1.2函数fplot()函数plot()将外部的离散数据转化为图形。数据点越多绘制的曲线越精确,越能反映数据的规律;数据点
少,则可能无法正确反映数据的规律。函数fplot()帮助用户构建所需要绘制函数的数据,函数plot()的具体用法如下:其中各项参数的含义如下。function:待绘制的函数。limits:定义x轴(自变量)的取值
范围[xminxmax],或x轴和y轴(应变量)的范围[xminxmaxyminymax]。LineSpec:定义绘图的线型、颜色等。tol:相对误差容忍度,默认值为2e-3。n:当n≥1时,至少绘制n+1个点,默认值为1。axes_hand
le:坐标轴句柄,函数的图形将绘制在这个坐标系中。P1,P2…:向函数传递参数值。X,Y…:采样的自变量和对应的函数值。-3-2-10123-1-0.8-0.6-0.4-0.200.20.40.60.815.1.3函数
ezplot()函数ezplot()用于绘制函数在某一自变量区域内的图形,它的具体使用方法如下:当f=f(x)时,各参数的含义如下。ezplot(f):绘制函数在默认区域-2*pi<x<2*pi内的图形。
ezplot(f,[min,max]):绘制函数在区域min<x<max内的图形。当f=f(x,y)时,各参数的含义如下。ezplot(f):绘制函数在默认区域-2*pi<x<2*pi,-2*pi<y<2
*pi内的图形。ezplot(f,[xmin,xmax,ymin,ymax]):绘制函数f(x,y)=0在区域xmin<x<xmax,ymin<y<ymax内的图形。ezplot(f,[min,max]):绘制函数f(x,y)=0在区域min<x<max、min<y<max内的图形。ez
plot(x,y):绘制参数方程组x=x(t),y=y(t)在默认区域0<t<2*pi内的图形。ezplot(x,y,[tmin,tmax]):绘制参数方程组x=x(t),y=y(t)在区域tmin<t<tmax内的图形。ezp
lot(...,figure_handle):在句柄为figure_handle的窗口中绘制图形。ezplot(axes_handle,...):在句柄为axes_handle的坐标系上绘制图形。h=ezplot(...):返回图形的句柄。需要说明的是,上述函数中的
自变量名称不局限于x和y。-3-2-10123-3-2-10123uzu2+z2-4=05.2三维绘图5.2.1函数plot3()5.2.2函数mesh()5.2.3函数surf()5.2.4改进的三维绘图函数最常用的三维绘图:三维曲线图,
对应的MATLAB函数为plot3()网格图和,对应的MATLAB函数为mesh()曲面图,对应的MATLAB函数为和surf()5.2.1函数plot3()函数plot3()具体使用方法如下:其中X1、Y1、Z1为向量
或矩阵,LineSpec定义曲线线型、颜色等,PropertyName为线对象的属性名,PropertyValue为相应属性的值,h是用于存放曲线簇中每一个线对象的句柄变量。当X1、Y1、Z1为长度相同的向量时,函数plot3()将绘得一条分别以向量X1、Y1
、Z1为x,y,z轴坐标值的空间曲线;当X1、Y1、Z1均为mn的矩阵时,函数plot3()将绘得m条空间曲线,其中,第I条空间曲线分别以X1、Y1、Z1矩阵的第I列分量为x,y,z轴坐标值的空间曲线。-1-0.
500.51-1-0.500.510.811.21.41.61.825.2.2函数mesh()函数mesh()可以绘出在某一区间内的完整曲面,其具体使用方法如下:其中:C用于定义颜色;X和Y必须均为向量若X和Y的长度分别为m和n,则Z必须
为mn的矩阵,在这种情况下,网格线的顶点为(X(j),Y(i),Z(i,j));若参数中没有提供X,Y,则将(i,j)作为Z(i,j)的X,Y轴坐标值。020406080100050100-0.500.515.2.3函数surf()与函数mesh()不同,函数mesh()绘制得到的是网格
图,而函数surf()绘制得到的是着色的三维曲面,其具体使用方法如下:其中,各参数的含义与函数mesh()命令中的相同。-4-2024-4-2024-10-50510-4-2024-4-2024-10-505105.2.4改进的
三维绘图函数1.函数meshc()和meshz()2.函数surfc()前面介绍了3个基本的三维绘图函数,下面介绍一些常用的图形处理功能。1.函数meshc()和meshz()函数meshc()在函数mesh()绘制的三维曲面图基础上再绘出等高线。01020300102030-10-5
0510函数meshz()的作用是在函数mesh()绘制的三维曲面图基础上再绘出边界面。01020300102030-10-505102.函数surfc()函数surfc()在函数surf()绘制的三维图形基础上再绘出等高线。5.3图形处理5.3.1图形标注5.3.2坐标轴的控制5.3
.3图形数据取点5.3.4子图和图形保持5.3.5图形的打印和输出MATLAB提供了强大的图形处理功能。下面具体的介绍图形标注坐标轴的控制图形数据取点子图和图形保持图形的打印和输出5.3.1图形标注1.标注坐标轴和图形标题2.文本标注图形3.标注图例MATLAB提供了丰富的图形标注函
数,可以方便地对所绘图形进行标注。1.标注坐标轴和图形标题实现标注坐标轴和填加图形标题的函数主要有xlabel()、ylabel()、zlabel()和title()等,具体使用方法基本相同并如下表示。其中:string是标注所用的文本;fname是一个函数名,该函数的返回
值必须是字符串;‘PropertyName‟定义标注文本的属性;PropertyValue为对应的属性值。1234567-1-0.8-0.6-0.4-0.200.20.40.60.81x(0-2)y=sin(x)正弦
函数在标注过程中经常会遇到特殊符号的输入问题,MATLAB提供了相应的字符转换。常见的转换如下表所示。可以对标注文本进行显示控制,方式如下。\bf:黑体。\it:斜体。\sl:透视。\rm:标准形式。\fontname{fontname}:定义标注文字的字体。\fo
ntsize{fontsize}:定义标注文字的字体大小。2.文本标注图形在MATLAB中的文本标注:函数text(),函数gtext()使用方法如下:1234567-1-0.8-0.6-0.4-0.200
.20.40.60.81x(0-2)y=sin(x)正弦函数sin(t)=.707sin(t)=0sin(t)=-.7071234567-1-0.8-0.6-0.4-0.200.20.40.60.81y=sin(x)3.标注图例使用函数legen
d()为曲线填加图例以便区分,能够为图形中的所有曲线进行标注,并以输入变量作为标注文本,其具体使用方法如下:其中:‘string1‟,„string2‟等分别标注绘图过程中按绘制先后顺序所生成的曲线,‘Location‟定义标注位置属性,location用于定义属性值。图例标注位置属性
值表-4-3-2-101234-1-0.8-0.6-0.4-0.200.20.40.60.81cossin5.3.2坐标轴的控制1.函数axis()2.命令zoom3.命令grid4.命令box在MATLAB中可以通过设置参数来实现对坐标轴的各种控制,这里仅介绍常用的控制函数。1
.函数axis()该函数的作用是控制坐标轴的刻度范围及显示形式,使用方法如下:其中:[xminxmaxyminymaxzminzmax]用于定义坐标轴的范围;string是控制字符串,可用的string。函数axis()的控制字符串表00.511.5-1.5-1-0
.500.511.52.命令zoom该命令的作用是控制二维图形的坐标轴缩放,使用方法如下:其中,string为控制字符串。命令zoom的控制字符串表3.命令grid该命令的作用是绘制坐标网格,使用方法如下:-4-3-2-101234-1-0.8-0.
6-0.4-0.200.20.40.60.814.命令box该命令的作用是在图形边界显示坐标刻度,使用方法如下:-4-3-2-101234-1-0.8-0.6-0.4-0.200.20.40.60.815.3.3图形数据取点当希望从已完成
的图形中读取若干自变量对应的函数值时,使用函数ginput()读取二维图形的数据,使用方法如下:5.3.4子图和图形保持1.命令hold2.函数subplot()在绘图过程中,经常会碰到下面两种情况:在已绘制的图上填加新曲线
;将几个子图绘制在一个图形上。MATLAB提供命令hold和函数subplot()解决上述问题。1.命令hold该命令常用的使用方法如下:-4-3-2-101234-1-0.8-0.6-0.4-0.200.20.40.60.812.函数subplot()该
函数的作用是将一个图形分隔成若干子区域,在指定子区域显示指定子图,使用方法如下。-505-1-0.500.51First:cos-505-1-0.500.51Second:sin-50501234Third:abs-505-4-2024Fourth:
floor-505-4-2024Fifth:round-505-1-0.500.51Sixth:sign-505-1-0.8-0.6-0.4-0.200.20.40.60.81TheFirstblock:cos-4-2024-1-0.500.51TheSe
condblock:sin-505-4-2024TheThirdblock:round-505-1-0.500.51TheFourthblock:sign5.3.5图形的打印和输出MATLAB提供了几种方式输出当前的图形。通过图形窗口的【Edit】菜单下的【CopyFigure】
命令,拷贝的选项可以通过【CopyOptions】进行设置。使用内置打印引擎或系统的打印服务。5.4图形窗口1.创建与控制2.菜单操作3.工具栏1.创建与控制创建图形窗口的函数是figure(),使用方法如下:同时
可以通过下面两个函数查阅和设置图形窗口的属性和参数。2.菜单操作下面简要介绍图形窗口的各菜单。(1)【File】菜单【New】选项用于新建一个M-文件(M-File)、图形窗口(Figure)、Simul
ink模型(Model)、MATLAB工作空间的变量(Variable)或用户界面(GUI)。【GenerateM-File】选项用于生成M-函数文件。【ImportData】选项用于导入数据。【SaveWorkspaceAs】选项用于将图形窗口中的图形数据存储在二进制ma
t文件中,它们可以供其他的编程语言(如C语言等)调用。【Preferences】选项用于定义图形窗口的各种设置,包括字体、颜色等。【ExportSetup】选项用于打开【图形输出】话框,可以把图形以emf、ai、bmp、eps、jpg、pdf等格式保存,并设置有关图形窗口的显示等方
面的参数。【PageSetup】选项用于打开【页面设置】话框。设置图形尺寸、纸张大小、线型及文本类型以及坐标轴和图形设置。【PrintSetup】选项用于打开【打印设置】话框。在这里可以设置图片的题图等。【PrintPreview】选项用于打开【打印预览】对话框。
【Print】选项用于打开【打印】对话框。(2)【Edit】菜单【CopyFigure】选项用于复制图形。【CopyOption】选项用于打开【复制设置】对话框,设置图形复制的格式、图形背景颜色和图形大小等。该选项
打开的对话框界面与【File】|【Preferences】的界面相同,只是当前显示的面板不同。【FigureProperties】选项用于打开图形窗口的属性设置对话框。【AxesProperties】
选项用于打开【设置坐标轴属性】对话框。【CurrentObjectProperties】选项用于打开设置图形窗口中当前对象(如窗口中的坐标轴、图形等)属性的对话框。【Colormap】选项用于打开【色图编辑】对话框。【ClearFigure】、【C
learCommandWindow】、【ClearCommandHistory】和【ClearWorkspace】选项分别用于清除图形窗口中的图形、命令窗口、历史命令和工作空间。(3)【View】菜单该菜单用于打开各种工具栏和
控制面板。①图形窗口工具条用于对图形进行各种处理。②照相工具条用于设置图形的视角和光照等,可以实现从不同角度来观察所绘三维图形,并且为图形设置不同的光照情况。③绘图编辑工具条用于向图形中添加文本标注和各种标注图形等。④绘图浏览器用于浏览
当前图形窗口中的所有图形对象。(4)【Insert】菜单该菜单用于向当前图形窗口中插入各种标注图形。(5)【Tools】菜单该菜单中大部分选项实现的功能,与前面介绍的几个工具条相关图标的功能一致。(6)【Desktop】菜单该菜单用于将窗口合并到MATLAB主界面的窗
口中。(7)【Window】菜单和【Help】菜单这两个菜单与Windows系统中各种应用程序界面的相关菜单很类似。3.工具栏图形窗口工具栏表续表5.5MAT文件应用下面重点介绍数据的保存和调用。MA
T文件是MATLAB数据存储的默认文件格式,文件扩展名是.mat。可借助命令save和load实现MATLAB对数据的读写,使用方法如下:5.6文件I/O5.6.1打开和关闭文件5.6.2存取二进制文件5.6.
3存取文本文件5.6.4文件内的位置控制MATLAB提供对二进制文件或ASCII文件进行方便的打开、关闭和存储等操作。5.6.1打开和关闭文件1.打开文件2.关闭文件1.打开文件根据操作系统的要求,在程序中要使用或者创建一个磁盘文件时,必须向操作系统发出
打开文件的命令,使用完毕后,还必须关闭这个文件。在MATLAB中,使用C语言中的同名函数fopen()来完成打开文件的功能,其具体使用方法如下:其中,filename是要打开的文件名称,permission表示对文件的处理方式,包括如下的设置参数。'r':只读
文件。‘w‟:只写文件,覆盖文件原有内容(如果文件名不存在,则生成新文件)。‘a‟:增补文件,在文件尾增加数据(如果文件名不存在,则生成新文件)。'r+':读写文件(不生成文件)。‘w+‟:创建一个新文件或者删除已有文件内容,并可进行读写操作。‘a+‟:读取和增补文件(如果文件名不存在,
则生成新文件)。2.关闭文件所有打开的文件必须关闭,否则会造成系统资源浪费,其具体使用方法如下:可通过检查status的值来确认文件是否关闭,如果关闭成功,则返回0;否则返回−1。上述代码是关闭文件标识为fid的文件,如果要关闭所有打开的文件,则只需执行下面的代码:需要说明的是,打开
和关闭文件的操作都比较费时,尽量不要将它们置于循环体中。5.6.2存取二进制文件1.读取文件2.写入文件1.读取文件函数fread()可以从文件中读取二进制数据。它将读出每一个(特殊)字符对应的ASCII码,并以矩阵的形式返回,同时将文件指针放在
读取的内容后,使用方法如下:其中,fid是某打开文件对应的文件标识,size控制返回矩阵的大小和形式,它的有效输入如下所示。n:读取前n个字符,并写入一个列向量中。inf:读至文件末尾。[m,n]:读取数据到mn的
矩阵中,按列排序。precision包括两部分:一是数据类型和精度定义,比如int、float等;二是一次读取的位数。常用的精度如下表所示,并且与C语言中的类似形式进行对比。还有一些类型是与平台有关的,平台不同可
能位数不同,如下表所示。2.写入文件函数fwrite()的作用是将矩阵元素按指定的二进制格式写入某个打开的文件,并返回成功写入的数据个数,使用方法如下:其中:fid是从某打开文件对应的文件标识;a是待写入的矩阵;p
recision设定了结果的精度。5.6.3存取文本文件1.读取文件2.写入文件1.读取文件采用函数fgetl()和函数fgets()读出文本文件中的某行内容时,使用方法如下:两个函数区别:fgetl会舍弃换行符;而fgets则保留
换行符。当确定文件的ASCII码格式时,可用函数fscanf()进行更精确的读取,使用方法如下:其中:fid为打开文件对应的文件标识;format为指定的字符串格式;a为返回矩阵;count为可选项,表示
成功读取的数据个数;size为可选项,可限制从文件读取的数据数目。format用于指定读入数据的类型,常用的格式如下。%s:按字符串进行转换。%d:按十进制数据进行转换。%f:按浮点数进行转换。2.写入文件函数fprintf()将数据转换成指定字符串格式
,并写入文本文件中,使用方法如下:其中:fid是要写入已打开文件的标识;format是指定字符串格式;y是要写入的数据;count是成功写入的字节数。fid值可以代表标准输出的1和代表标准出错的2,如果fid字段省略,则默认值为1,即输出到屏幕上。常用的格式类型说明符如
下。%e:科学计数形式,即数值表示成a10b形式。%f:固定小数点位置的数据形式。%g:在上述两种格式中自动选取较短的格式。5.6.4文件内的位置控制读写数据时默认从磁盘文件头开始,并顺序向后,直至文件末尾
。操作系统通过一个文件指针,来指示当前的读写位置。控制文件内位置指针的函数表(1)函数feof()函数feof()用于测试指针是否在文件结束位置,使用方法如下:如果指针位于标识为fid的已打开文件的末尾,则返回1,否则返回0
。(2)函数fseek()函数fseek()用于设定指针位置,使用方法如下:其中:fid是已打开文件的标识;offset是偏移量,以字节为单位;origin是基准点;status为0表示操作成功,-1表示操作失败;如果要了解更多信息可以调用函ferror
()。(3)函数ftell()函数ftell()用于返回现在的位置指针,其具体使用方法如下:position是距离文件起始位置的字节数,如果值为-1则说明操作失败。(4)函数frewind()函数frewind()用于将指针返回到文件开始,使用方
法如下:习题第六章数值计算MATLAB提供大量具有强大数值计算功能的函数。本章着重介绍关于数值计算的函数。目录6.1多项式运算6.2插值运算6.3数据分析6.4功能函数6.5微分方程组数值解习题6.1多项式运算1.多项式表示法2.多项式
求值3.多项式乘法和除法4.多项式的微积分5.多项式的根和由根创建多6.多项式部分分式展开7.多项式曲线拟合8.多曲线拟合图形用户接口MATLAB提供了关于多项式的函数:多项式的值;多项式的根和微分;多项式拟合曲线;部分分式。多项式函数1.多项式表示法MATLAB采用行向量
表示多项式系数,多项式系数按降幂排列。函数poly2str()将多项式系数向量转换为完整形式。2.多项式求值函数polyval()计算多项式的值,其具体使用方法如下:y=polyval(p,x),p为多项式系
数行向量,x代入多项式的值;Y=polyvalm(p,X),把矩阵X代入多项式p中进行计算。3.多项式乘法和除法函数conv()和deconv()进行多项式乘法和除法,其具体使用方法如下:w=conv(u,v),实现多项式乘法,返回结果多项式的系数行向量;
[q,r]=deconv(u,v),实现多项式除法。4.多项式的微积分(1)多项式的微分函数polyder()计算多项式的微分,其具体使用方法如下:k=polyder(p),返回多项式p微分的系数向量;k=polyder(a,b),返回多
项式ab乘积微分的系数向量;[q,d]=polyder(b,a),返回多项式b/a微分的系数向量。(2)多项式的积分函数polyint()计算多项式的不定积分,其具体使用方法如下:s=polyint(p,k),返回多项式p不定积分的系数向量。5.多项式的根和由根
创建多项式(1)多项式的根函数roots()求多项式的根,其具体使用方法如下:r=roots(c),返回多项式c的所有根r。(2)由根创建多项式函数poly()实现由根创建多项式,其具体使用方法如下:p=poly(r),输入r是多项式所有根,返回值为多项式的系数向量;p=poly
(A),输入A是方阵,返回值为A的特征多项式的系数向量。6.多项式部分分式展开函数residue()将多项式之比按部分分式展开,其具体使用方法如下:[r,p,k]=residue(b,a),求多项式
b/a的部分分式展开;[b,a]=residue(r,p,k),从部分分式得到多项式向量。7.多项式曲线拟合函数polyfit()采用最小二乘法对给定数据进行多项式拟合,其具体使用方法如下:p=polyfit(x
,y,n),采用n次多项式p来拟合数据x和y。运行结果如下图所示。8.多曲线拟合图形用户接口曲线拟合的图形用户接口可通过图形窗口的【Tools】菜单中【BasicFitting】选项启动。运行结果如下图所示。6.2插值
运算6.2.1一维插值6.2.2二维插值插值是根据已知输入/输出数据集和当前输入估计输出值。MATLAB提供大量的插值函数,如下表所示。插值函数6.2.1一维插值一维插值就是对函数y=f(x)进行插值,一维插值的原理如下图所示。函数interp1()实现一维插值,其具体使用方法如下
:yi=interp1(x,y,xi),x,y是已知数据集且具有相同长度的向量;yi=interp1(y,xi),默认x为1:n,其中n为向量y的长度;yi=interp1(x,y,xi,meth
od),method用于指定插值的方法。运行结果如下图所示。6.2.2二维插值二维插值是对两变量的函数z=f(x,y)进行插值,二维插值的原理如下图所示:函数interp2()实现二维插值,其具体使用方法如下:zi=interp2(x,y,z,xi,yi),x,y,z为原始数
据,返回值zi是插值结果;zi=interp2(z,xi,yi),若z=n×m,则x=1:n,y=1:m;zi=interp2(x,y,z,xi,yi,method),method用于指定插值的方法。运行结果如下图所示。6.3数据
分析6.3.1基本数据分析函数6.3.2协方差和相关系数矩阵6.3.3有限差分和梯度6.3.4信号滤波和卷积6.3.5傅立叶变换MATLAB提供大量数据分析的函数,首先给出如下约定:一维数据分析时,数据可以用行向量
或者列向量来表示;二维数据分析时,数据可以用多个向量或者二维矩阵来表示。6.3.1基本数据分析函数1.最大值、最小值、平均值、中间值、元素求和2.标准差和方差3.元素排序基本数据分析函数续表1.最大值、最小值、平均值、中间值、元素求和运行结果如下,并
如下图所示。2.标准差和方差3.元素排序MATLAB提供对实数、复数和字符串的排序函数。函数sort()实现数值的排序;函数sortrows()实现对行的排序。6.3.2协方差和相关系数矩阵函数cov()计算随机变量的协方差矩阵,其具体使用方法如下:C=
cov(X),计算X代表的随机变量的协方差矩阵;C=cov(x,y),x和y必须是具有相同长度的向量;C=cov(X,1),计算X代表的随机变量的协方差矩阵;C=cov(x,y,1),x和y必须是具有相同长度的向量。函数corrcoef(
)计算随机变量的相关系数矩阵,其具体使用方法如下:R=corrcoef(X),返回X代表的随机变量的相关系数矩阵;R=corrcoef(x,y),x和y必须是具有相同长度的向量。6.3.3有限差分和梯度函数dif
f()计算差分,其具体使用方法如下:Y=diff(X),X可以是向量或矩阵;Y=diff(X,n),返回n阶差分;Y=diff(X,n,dim),返回在dim维上的n阶差分。运行结果如下图所示。函数gradient()计算梯度,其具体使用方法
如下:FX=gradient(F),返回F在x方向上的梯度;[FX,FY]=gradient(F),FX是F在x方向的近似偏导数,FY是F在y方向的近似偏导数;[Fx,Fy,Fz,...]=gra
dient(F),返回N个方向的近似偏导数;[...]=gradient(F,h),h用于指定所有方向上自变量的间距;[...]=gradient(F,h1,h2,...),用多个标量来指定各个方向上自变量
的间距。运行结果如下图所示。6.3.4信号滤波和卷积1.一维数字滤波2.信号卷积3.去除信号直流或线性成分MATLAB提供如下表所示的信号滤波和卷积的函数。信号滤波和卷积函数1.一维数字滤波函数filter()实现一维数字滤波,该函数的具体使用方法如下:y=filter(b,
a,X),X为用于滤波的数据,Y为数据X通过滤波器之后的值;[y,zf]=filter(b,a,X),附加返回一个表示数据延迟时间的量zf;[y,zf]=filter(b,a,X,zi),zi为初始数据延迟,zf等于最终数据延迟;y=filter(b,a,X,zi,dim),在
dim维上进行数据滤波。2.信号卷积函数conv()计算卷积。运行结果如下图所示。3.去除信号直流或线性成分detrend()函数实现去除信号中的直流或者线性成分,其具体使用方法如下:y=detrend(x),如果x是一个向量,从信号x中减去线性成分;如果x是一个矩阵,去除x所有
列中的线性成分;y=detrend(x,„constant‟),如果x是一个向量,减去信号中的直流成分;如果x是一个矩阵,去除所有列中的直流成分;y=detrend(x,'linear',bp),从信号x中减去分段线性函数。6.3.5傅立叶变
换1.一维傅立叶变换和逆变换2.二维傅立叶变换和逆变换傅立叶变换既可以对连续信号进行变换,也可以对离散信号进行变换。本小节只介绍离散傅立叶变换。傅立叶变换函数1.一维傅立叶变换和逆变换函数fft()实现一
维离散傅立叶变换,其具体使用方法如下:Y=fft(X),如果X是向量,返回向量X的傅立叶变换;如果X是矩阵,函数对矩阵X的每一列进行傅立叶变换;Y=fft(X,n),用输入n指定傅立叶变换的长度;Y=fft(X,[],dim),
在dim维上进行傅立叶变换;Y=fft(X,n,dim),在dim维上进行傅立叶变换,并指定傅立叶变换的长度。函数ifft()实现一维离散傅立叶逆变换,其具体使用方法与函数fft()类似,只是添加一个选项。y=ifft(...,'symmetric
');y=ifft(...,'nonsymmetric')。2.二维傅立叶变换和逆变换函数fft2()实现二维傅立叶变换,用函数ifft2来实现二维傅立叶逆变换。函数fft2()的具体使用方法如下:Y=fft2(X),X是矩阵,对矩阵X进行二维傅立叶变换;Y=fft2(X,m,n),m和n指
定傅立叶变换的长度。6.4功能函数1.函数的表示2.函数画图3.函数最小值和零点4.数值积分5.在功能函数中使用含参函数函数可以通过以下方式来表示:M文件;匿名函数;函数inline()。1.函数的表示2.函数画图MATLAB提供函数画图的函数如下表所示。
函数画图的函数以函数fplot()为例介绍画图函数的用法,其具体使用方法如下:fplot(function,limits),function为待画图的函数,limits是横坐标数值范围或横纵坐标数值范围;fplot(function,li
mits,LineSpec),LineSpec指定画图的线条属性;fplot(function,limits,tol),tol指定画图相对精度;fplot(function,limits,tol,LineSpec),指定画图的线条属性和画图相对精
度。运行结果如下图所示。-5-4-3-2-10123450.40.50.60.70.80.91函数y=cos((x+1)/(x2+1))xy3.函数最小值和零点求函数的最小值和零点的函数,如下表所示。求函数最小值和零点(1)求一元函数最小值函数
fminbnd()求一元函数在给定区间内的最小值,其具体使用方法如下:x=fminbnd(fun,,x1,x2),在区间[x1x2]内寻找函数最小值;x=fminbnd(fun,x1,x2,options),使用options选项来指定的优化器的参
数;[x,fval]=fminbnd(...),附加返回函数最小值。(2)求多元函数的最小值函数fminsearch()求多元函数的最小值。其具体使用方法如下:x=fminsearch(fun,x0),在初始x0附近寻找局部最小值;x=fminsearch(fu
n,x0,options),使用options选项来指定优化器的参数;[x,fval]=fminsearch(...),附加返回函数最小值。(3)求一元函数的零点函数fzero()求一元函数的零点,其具体使用方法如下:x=fzero(fun,x0),在x0点附近寻找函数的
零点;x=fzero(fun,[x0,x1]),在[x0,x1]区间内寻找函数的零点;x=fzero(fun,x0,options),用options指定寻找零点的优化器参数;[x,fval]=fzero(...),附加自变量为x时的函数值。(4)优化器参数函数optimset()设定优化器
参数,其具体使用方法如下:options=optimset('param1',value1,'param2',value2,...),用参数名和对应的参数值设定优化器的参数;optimset,显示优化器的所有参数名和有效的参数值;options=optimset,返回一个优化器的结
构体;options=optimset(optimfun),返回函数optimfun()对应的优化器参数;options=optimset(oldopts,'param1',value1,...),在原优化器参数oldopt
s的基础上,改动指定优化器参数;options=optimset(oldopts,newopts),用newopts的所有非空参数覆盖oldopts中的值。在函数optimset()中常用的优化器参数如下表所示。优化器参数函数optimget()得到目前优化器
的参数,其具体使用方法如下:val=optimget(options,'param'),返回优化器参数'param'的值;val=optimget(options,'param',default),返回优化器参数'param'的值。4.数值积分MATLAB提供一些的数值积分函
数,如下表所示。数值积分函数(1)一元函数的数值积分函数quad()和函数quadl()来计算一元函数的积分。函数quad()的具体使用方法如下:q=quad(fun,a,b),计算函数fun在[ab]区间内的定积分;q=quad(fun,a,b,tol),以绝对误
差容限tol计算函数fun在[ab]区间内的定积分;q=quad(fun,a,b,tol,trace),当trace为非零值时,显示迭代过程的中间值。(2)矢量数值积分矢量数值积分等价于多个一元定积分。(3)二重和三重积分函数dblquad()计算二重积分。其具体使用方法如下:
q=dblquad(fun,xmin,xmax,ymin,ymax),计算二元函数的二重积分;q=dblquad(fun,xmin,xmax,ymin,ymax,tol),用tol指定绝对计算精度;q=dblquad(fun,xmin,xmax,y
min,ymax,tol,method),用method指定计算一维积分时采用的函数。5.在功能函数中使用含参函数功能函数中的含参函数的两种解决方法:嵌套函数匿名函数编写M文件的函数时:首先将含参
函数的参数作为输入;其次在其中调用功能函数,形成嵌套;最后通过调用该函数进行计算。(1)用嵌套函数提供函数参数运行结果如下图所示。-10-8-6-4-20246810-12-10-8-6-4-2024b零点(2)用匿名函数提供函数参数用匿名函数提供函数参数的具体步骤如下:创
建一个含参函数,并保存为M文件格式;调用功能函数的M文件中给参数赋值;用含参函数创建匿名函数;把匿名函数句柄传递给功能函数计算。6.5微分方程组数值解6.5.1常微分方程组的初值问题6.5.2延迟微分方程的问题6.5.3常微分
方程组的边界问题在MATLAB中,可以计算微分方程数值解,如:常微分方程组的初值问题;延迟微分方程的问题;常微分方程组的边界问题。6.5.1常微分方程组的初值问题1.显式常微分方程组2.设置解法器参数3.线性隐式常微分方程组4.完全隐
式常微分方程组在MATLAB中可以计算以下初值问题的数值解。显式常微分方程组;线性隐式常微分方程组;完全隐式常微分方程组。1.显式常微分方程组在MATLAB中,用函数实现不同的解法,如下表所示。常微分方程组解法对比2.设
置解法器参数函数odeset()设定解法器参数,其具体使用方法如下:options=odeset('name1',value1,'name2',value2,…),用参数名和相应参数值设定解法器的参数;options=odes
et(oldopts,‘name1’,value1,…),修改原来的解法器options结构体oldopts;options=odeset(oldopts,newopts),合并两个解法器options结构体oldopts和newopts;odeset,显示所有的参数值和它们的
默认值。常微分方程组解法器参数3.线性隐式常微分方程组线性隐式常微分方程组可以利用解法器参数options来求解。运行结果如下图所示。00.20.40.60.811.21.41.61.8224681012141618ty4.完全隐式常微分方程组函数ode15i
()求解完全隐式常微分方程组,其具体使用方法如下:[t,Y]=ode15i(odefun,tspan,y0,yp0);[t,Y]=ode15i(odefun,tspan,y0,yp0,options)。函数decic()得到自洽初始值,其具体使用方法如下:[
y0mod,yp0mod]=decic(odefun,t0,y0,fixed_y0,yp0,fixed_yp0);[y0mod,yp0mod]=decic(odefun,t0,y0,fixed_y0,yp0,fixed_yp0,op
tions)。运行结果如下图所示。123456789101234567891011ty6.5.2延迟微分方程的问题函数dde23()求解延迟微分方程组,其具体使用方法如下:sol=dde23(ddefun,lags,history,tspan);sol=dde23(ddefun,lags,h
istory,tspan,option),option结构体用于设置解法器的参数。函数dde23()的返回值是一个结构体,它包含7个属性,其中重要的5个属性如下:sol.x,dde23选择计算的时间点;sol.y,在时间点x上的解y(x);sol.yp,在时间点x上解的一
阶导数y’(x);sol.history,方程初始值;sol.solver,解法器的名字‘dde23‟;若需得到tint时刻的解,可以使用函数deval,即yint=deval(sol,tint)。6.5.3
常微分方程组的边界问题函数bvp4c()的具体使用方法如下:sol=bvp4c(odefun,bcfun,solinit),odefun代表常微分方程组的函数,bcfun是描述边界条件的函数,solinit是对方程解的猜测解;sol=bvp4c(odefun,bcfun,solin
it,options),使用options结构体来设定解法器的参数。运行结果如下图所示。00.511.522.53-1-0.8-0.6-0.4-0.200.20.40.60.81Mathieu方程在边界条件下的解xy4阶Mathie
u方程的特征值=17.0973习题第七章符号计算符号计算是数字运算的自然扩展,其特点包括:不受计算误差的困扰;计算可以给出完全正确的封闭解或任意精度的数值解;计算的指令比较简单,所需要的时间较长。目录7.1符号计算入门7.2符号对象的
创建和使用7.3任意精度计算7.4符号表达式的化简和替换7.5符号矩阵计算7.6符号微积分7.7符号积分变换7.8符号方程求解7.9可视化数学分析界面习题7.1符号计算入门1.求解代数方程2.求解微分方程3.计算导数4.计算定积分自然
科学理论分析中的公式、关系式及其推导是符号计算要解决的问题。MATLAB数值计算的对象是数值,而符号计算的对象则是非数值的符号字符串。1.求解代数方程2.求解微分方程3.计算导数4.计算定积分7.2符号对象的创建和使用
7.2.1创建符号对象和表达式7.2.2符号对象的基本运算在符号计算中,需定义一种新的数据类型sym类。sym类的实例就是符号对象,符号对象是一种数据结构,用来存储代表符号变量、表达式和矩阵的字符串。7.2.1创建符号对象和表达式1.符号常量2.符号变量3
.符号表达式4.符号矩阵函数sym()和命令syms创建符号常量、变量、函数以及表达式,函数class()检验符号对象类型。(1)函数sym()函数sym()的具体使用方法如下:s=sym(A,flag);s=sym(„A‟,flag)。(2)命令s
yms命令syms的具体使用方法如下:symss1,…,snflag。(3)函数class()函数class()的具体使用方法如下:str=class(object)。1.符号常量符号常量是一种符号对象。数值常量如果作为函数命令sym()的输入参量,就建立了一个符号对象—符号常量。2.
符号变量符号变量通常是由一个或几个特定的字符表示。符号变量的命名规则如下所示:变量名可以由英文字母、数字和下划线组成;变量名应以英语字母开头;组成变量名的字母长度不大于31个;区分大小写。在MATLAB中,用函数sym()和命令syms来创建符号变量。3.符号表达式符号表达式是由以
下部分组成的符号对象:符号常量;符号变量;符号运算符;专用函数。4.符号矩阵元素是符号对象的矩阵叫做符号矩阵。7.2.2符号对象的基本运算1.基本运算符2.关系运算符3.三角函数、双曲函数以及它们
的反函数4.指数、对数函数5.复数函数6.矩阵函数运算符“+”、“-”、“*”、“\”、“/”、“^”分别实现矩阵的加、减、乘、左除、右除和求幂运算。运算符“.*”、“./”、“.\”、“.^”分
别实现“元素对元素”的数组乘、左除、右除和求幂运算。运算符“'”、“.'”分别实现矩阵的共轭转置和非共轭转置。1.基本运算符运算符“==”和“~=”分别对运算符两边的对象进行“相等”、“不等”的比较。当事实为“真”时,返回结果1;当事实
为“假”时,返回结果0。2.关系运算符除函数atan2()仅能用于数值计算外,其余的三角函数、双曲函数及它们的反函数都能用于符号计算。3.三角函数、双曲函数及其反函数4.指数、对数函数函数sqrt()、exp()、expm()、log()、log2()和log10()都能用于符号计算。函数con
j()、real()、imag()和abs()都能用于符号计算,但相角函数没有提供。5.复数函数6.矩阵函数函数diag()、triu()、tril()、inv()、det()、rank()、rref()、null()、colspace()、poly()、expm()和eig()都能用
于符号计算。7.3任意精度计算1.digits(d)2.vpa(A,d)3.double(A)符号计算的显著特点是计算过程中不会出现舍入误差,从而可以得到任意精度的数值解。MATLAB提供以下函数实现将符号计算得到的精确值转换成任意精度。设定精度为d位有效数字,默认值是32。1.digits
(d)2.vpa(A,d)对符号计算得到的精确值进行近似,有效位数为d位,若不指定d,则按当前有效位数输出。3.double(A)对符号计算得到的精确值转换为双精度。7.4符号表达式的化简和替换7.4.1符号
表达式的化简7.4.2符号表达式的替换MATLAB提供函数实现对符号计算的结果进行化简和替换,如:因式分解;同类项合并;符号表达式展开、化简;通分、符号替换。7.4.1符号表达式的化简1.函数co
llect()2.函数expand()3.函数horner()4.函数factor()5.函数simplify()6.函数simple()1.函数collect()函数collect()将符号表达式中同类项合并,其具体使用方法如下:R=collect(S):将表达式S中的相同次幂的项合
并;R=collect(S,v):将表达式S中变量v的相同次幂的项合并。2.函数expand()函数expand()将符号表达式进行展开,其具体使用方法如下:R=expand(S):将表达式S中的各项进行展开
。3.函数horner()函数horner()将符号表达式转换成嵌套形式,其具体使用方法如下:R=horner(S):将符号多项式矩阵S中的每个多项式转换成它们的嵌套形式。4.函数factor()函数factor()对符
号多项式进行因式分解,其具体使用方法如下:R=factor(X):如果X是一个多项式或多项式矩阵,该函数将X表示成低阶多项式相乘的形式;如果X不能分解成有理多项式乘积的形式,则返回X本身。5.函数simplify()函数simplify()将符号表达
式按一定规则简化,其具体使用方法如下:R=simplify(S):该函数可应用于包含和式、方根、分数的乘方、等符号表达式矩阵S。6.函数simple()该函数是将符号表达式表示成最简形式,其具体使用方法如下:r=simple(S):用几种不同的算术简化规则对符号表达式进行简化,并显示中
间过程;[r,how]=simple(S):不显示中间过程,并附加返回最简形式对应的简化方法。7.4.2符号表达式的替换1.函数subexpr()2.函数subs()在MATLAB中,用函数subexp
r()和subs()来实现符号替换,从而简化符号表达式。1.函数subexpr()函数subexpr()将符号表达式中重复出现的字符串用符号变量代替,其具体使用方法如下:[Y,SIGMA]=subexpr(S,SIGMA):指定用符号变量SIGMA来代替符号表达式中重复出现的字符串;[
Y,SIGMA]=subexpr(S,„SIGMA‟):这种形式和上一种形式的不同在于第2个输入参数是字符或字符串。2.函数subs()函数subs()用指定符号替换符号表达式中的某一特定符号,其具体使用方法如下:R=subs(S,Old,New):用新符号变量N
ew替代原来符号表达式S中的变量Old。7.5符号矩阵计算1.基本代数运算2.线性代数运算3.特征值分解4.约当标准型5.奇异值分解1.基本代数运算两符号矩阵进行加减运算时必须满足数值矩阵加减的规则。符号矩阵进行线性代数运算时和数值矩阵的一样。2.线性代数运算
3.特征值分解函数eig()求符号方阵的特征值和特征向量,其具体用法如下:E=eig(A):求符号方阵A的符号特征值E;[v,E]=eig(A):求符号方阵A的符号特征值E和相应的特征向量v。函数jordan()求矩阵的约当标准形,其具体用法如下:J=jordan(A):计算矩
阵A的约当标准型;[V,J]=jordan(A):附加返回相应的变换矩阵V。4.约当标准型5.奇异值分解函数svd()求矩阵的奇异值分解,其具体用法如下:S=svd(A):给出符号矩阵的奇异值对角矩阵,其计算精度由函数digits()来指定;[U,S,V]
=svd(A):附加给出U和V两个正交矩阵且满足A=U*S*V'。7.6符号微积分1.符号表达式的极限2.符号表达式的微分3.符号表达式的积分4.级数求和5.泰勒级数1.符号表达式的极限函数limit()求表达式的极限,其具体用法如下:
limit(F,x,a):求当x→a时,符号表达式F的极限;limit(F,a):求符号表达式F的默认自变量趋近于a时的极限;limit(F):求符号表达式F的默认自变量趋近于0时的极限;limit(
F,x,a,'right')或limit(F,x,a,'left'):分别求取符号表达式F的右极限和左极限。函数diff()来求表达式的微分,其具体用法如下:diff(S,„v‟):将符号“v”视作变量,对符号表达式
或矩阵S求微分;2.符号表达式的微分diff(S,n):将S中的默认变量求n阶微分;diff(S,'v',n):将符号“v”视作变量,对符号表达式或矩阵S求n阶微分。函数int()求表达式的积分,其具体用法如下:R=int(S):用默认变量
求符号表达式S的不定积分;3.符号表达式的积分R=int(S,v):用符号标量v作为变量求符号表达式S的不定积分值;R=int(S,a,b):符号表达式采用默认变量;R=int(S,v,a,b):符号表达式采用符号标量v作为标量,求当v从a到b时,符号表达式S
的定积分值。函数symsum()来对符号表达式进行求和,其具体用法如下:r=symsum(s,a,b):求符号表达式s中默认变量从a到b的有限和;r=symsum(s,v,a,b):求符号表达式s中变量v从a到b的有限和
。4.级数求和函数taylor()对符号表达式进行泰勒级数展开,其具体用法如下:r=taylor(f):返回f在变量等于0处的5阶泰勒展开式;5.泰勒级数r=taylor(f,n,v):符号表达式f以符号标量v作为自变量,返回f的n-1阶泰勒展开式。r
=taylor(f,n,v,a):返回符号表达式f在v=a处的n-1阶泰勒展开式。7.7符号积分变换1.Fourier变换2.Laplace变换3.Z变换在数学中经常采用变换的方法,将复杂的运算转化为简单的运算,如数量的乘除可以通过对数变换成加减。积分变换就是通过积分
运算实现变换。1.Fourier变换Fw=fourier(ft,t,w):求时域函数ft的Fourier变换Fw;ft=ifourier(Fw,w,t):求频域函数Fw的Fourier反变换。2.Laplace变换函数laplace()和i
laplace()实现f(t)到F(s)和F(s)到f(t)的变换,其具体用法如下:Fs=laplace(ft,t,s):求时域函数ft的Laplace变换Fs;ft=ilaplace(Fs,s,t):求频域函数Fs的
Laplace反变换ft。3.Z变换函数ztrans()和iztrans()来实现f(n)到F(z)和F(z)到f(n)的变换,其具体用法如下:FZ=ztrans(fn,n,z):求采样点fn的Z变换FZ;fn=iztrans(FZ,z,n):求
FZ的Z反变换fn。7.8符号方程求解1.代数方程2.微分方程符号方程可以分为代数方程和微分方程。代数方程可以细分为线性方程和非线性方程两类;微分方程可以细分为常微分方程和偏微分方程。1.代数方程函数solve()求解代数方程,其具体用法如下:g=solve(eq):其中eq可以是
符号表达式或不带符号的字符串,该函数求解方程eq=0;g=solve(eq,var):求解方程eq=0,其自变量由参数var指定;g=solve(eq1,eq2,…,eqn):求解由符号表达式或不
带符号的字符串eq1,eq2,…,eqn组成的方程组;g=solve(eq1,eq2,…,eqn,var1,var2,…,varn):求解由符号表达式或不带等号的字符串eq1,eq2,…,eqn组成的方程组。2.微分方程函数dsolve()求解微分方程,其具体用法如下。r=dsolve(
„eq1,eq2,…‟,„cond1,cond2,…‟,„v‟):求由eq1,eq2……指定的常微分方程组的符号解;r=dsolve('eq1','eq2',…,'cond1','cond2',…,'v'):求由eq1,eq2……指定的常微分方程组的符号解。7.9可视化数学分析界面1.图示化符号
函数计算器2.泰勒级数逼近分析器在MATLAB中,为符号函数可视化提供图示化符号函数计算器(由命令funtool启动)和泰勒级数逼近分析器(由命令taylortool启动)。1.图示化符号函数计算器运行命令funto
ol后,可看到如下图所示的图示化符号函数计算器界面。两个图形窗口只有一个能处于激活状态,函数运算控制窗口上的任何操作都只能对被激活的图形窗口起作用。(1)第1排按键只对函数f起作用,如计算导数、积分、简化、提取分子和分母
、1/f以及反函数。(2)第2排按键处理函数f和常数a之间的加、减、乘、除等运算。(3)第3排的前4个按键对函数f和g进行算术运算。第5个按键求复合函数,第6个按键把f函数传递给g,最后一个按键实现f和g的互换。(4)第4排按键对计
算器自身进行操作,该计算器包含一个函数列表fxlist,这7个按键的功能依次如下。Insert:把当前激活窗的函数写入列表;Cycle:依次循环显示fxlist中的函数;Delete:从fxlist列表中
删除激活窗的函数;Reset:使计算器恢复到初始调用状态;Help:获得关于界面的在线提示说明;Demo:自动演示。2.泰勒级数逼近分析器运行命令taylortool后,可看到如下图所示的泰勒级数逼近分析器界面。该界面用于观察函数f(x)在给定
区间上被N阶泰勒多项式TN(x)逼近的情况;函数f(x)在界面的f(x)栏中直接键入并回车即可;界面中N被缺省为7,可以用右侧的按键增减阶数,也可以直接写入阶数;界面上的a是级数的展开点,缺省为0;函数的观察区可被设置,缺省为(−2,2)。
习题1.计算一元三次方程320(0)axbxcxda根的通式。2.计算定积分sinedbxaxx。3.计算导数(sine)xx。4.计算矩阵22()ijAa和22()ijBb的加减乘。5.针对第4题中的A和B,计算2A,sinB
和1AB。6.因式分解符号多项式1(1,2,,10)nxn,并化简结果。第八章图形用户界面(GUI)本章将介绍:图形用户界面的设计原则;图形用户界面的操作步骤。目录8.1GUI设计向导8.2编程设计GUI8.3图形用户界面设计实例习题8.1GUI设计
向导8.1.1GUI概述8.1.2启动GUIDE8.1.3GUIDE提供的控件本节介绍:图形用户界面(GUI)的基本概念;GUI开发环境GUIDE;GUI组成部分的用途和使用方法;GUI创建的详细步骤。8.1.1GUI概述GUI是一种包含多种对象的图形窗口,并为GUI开发提供一个方便
高效的集成开发环境GUIDE。GUIDE主要是一个界面设计工具集,MATLAB将所有GUI支持的控件都集成在这个环境中。GUIDE将设计好的GUI保存在一个FIG文件中,同时生成M文件框架。FIG文件
:该文件包括GUI图形窗口及其所有FIG文件包含序列化的图形窗口对象;M文件:该文件包括GUI设计、控制函数以及定义为子函数的用户控件回调函数。GUIDE可以根据GUI设计过程直接自动生成M文件框架,优
点如下:M文件已经包含一些必要的代码;管理图形对象句柄并执行回调函数子程序;提供管理全局数据的途径;支持自动插入回调函数原型。GUI创建包括界面设计和控件编程两部分,主要步骤如下:通过设置GUIDE应用程序的选项来运行GUIDE;使用界面设计编辑器进行界面设计;编写控件行为响应
控制(即回调函数)代码。8.1.2启动GUIDE在MATLAB中,GUIDE提供多个模板来定制GUI。这些模板均已包括相关的回调函数,可以通过修改对应的M文件函数,实现指定功能。在MATLAB中,可以通过如下两种方法来访问模板:直接输入命令GUIDE,打开如下图所示的界
面;如果GUIDE已经打开,通过【File】菜单下的【New】选项也可以打开如下图所示的界面。在模板设计界面中,可以选择创建新的GUI或者打开原有的GUI。在创建新的GUI时MATLAB提供以下4种模板:空白模板;带有控制按钮模板;带
有坐标轴和菜单模板;问答式对话框模板。其中的空白模板如下图所示。8.1.3GUIDE提供的控件在空白模板中,GUIDE提供界面控件以及设计工具集来实现界面设计,其中,控件分布在界面设计编辑器的左侧,如下图所示。按钮:通过鼠标单击按钮可以实现某种
行为,并调用相应的回调函数。滚动条:能够通过移动滚动条来改变指定范围内的数值输入,滚动条的位置代表输入数值。单选按钮:单选按钮通常以组为单位,一组单选按钮之间是一种互相排斥的关系。复选框:复选框与单选按钮类似,只是多个复选框可以同时有效。编辑框:编辑框可编
辑或修改字符串的文本域。静态文本:静态文本通常作为其他控件的标签使用。弹出式菜单:弹出式菜单将打开并显示选项列表。列表框:列表框显示列表项,并能够选择其中的一项或多项。拴牢按钮:拴牢能够产生一个二进制
状态的行动。组合框:组合框是图形窗口中的一个封闭区域,它把相关联的控件组合在一起。按钮组:按钮组类似于组合框,但是它可以响应单选按钮以及拴牢按钮的高级属性。坐标轴:坐标轴可以设置关于外观和行为的参数。8.1.4界面设计工具集1.界面设计编辑器2
.属性检查器3.对象浏览器4.菜单编辑器GUIDE提供的界面设计工具集包括如下内容:界面设计编辑器:添加并排列图形窗口中的控件对象。属性检查器:检查并设置控件的属性值。对象浏览器:观察此次MATLAB运行过程中图形对象的句柄集成关系表。
菜单编辑器:创建窗口菜单和上下文菜单。1.界面设计编辑器界面设计编辑器能够从控件面板中选择控件,并将它们排列在图形窗口中。界面设计编辑器由以下4个部分组成:控件面板;工具栏;菜单栏;界面区域。其中:控件面板包含所有控件;工具栏和菜单栏可以用来启动其他界面设计工具;界面区域实
际上就是激活后的GUI图形窗口。(1)控件面板在GUI界面中放置控件:单击控件面板中需要放置控件的按钮;在光标变为十字形后,使用十字形光标的中心点来确定控件左上角的位置;可以通过拖动鼠标来确定控件的大小。所有控件布置好后,可以使用激活按钮或选择【Tools】菜单下的【ActivateFigu
re】选项检查GUIDE的设计结果,激活时将(提示)保存FIG文件和M文件。(2)上下文菜单使用界面设计编辑器进行界面设计时:选择一个对象;单击鼠标右键来显示其对应的上下文菜单。下图描述了一个与按钮相联系
的上下文菜单,同时所有已定义的回调函数都可列出。(3)排列工具可以在界面区域内通过选择并拖动任意控件(群)对其进行控件排列,当选择【Tools】菜单下的【AlignObjects】选项时即可打开下图所示的排列工具栏。(4
)网线和标线界面区域内可以使用网格和标线辅助设计,当选择【Tools】菜单下的【GridandRulers】选项时即可打开下图所示的网格和标线对话框。2.属性检查器属性检查器提供所选择对象的可设置属性列表及当前属性值,并可以进行手动设置,当选择【View】菜单下的【PropertyIn
spector】选项时即可打开类似下图所示的属性检查器。3.对象浏览器对象浏览器可以显示图形窗口中所有对象的继承关系。4.菜单编辑器GUIDE能够创建菜单栏和上下文菜单。当选择【Tools】菜单下的【MenuEditor】选项时即可打开下图所示的菜单编辑
器。(1)菜单栏菜单使用【NewMenu】工具栏创建一个菜单;指定其隶属关系;指定其属性。下图显示一个设计的菜单,当激活图形窗口时即可看到结果。(2)上下文菜单上下文菜单设计好后,当单击鼠标右键
时它随之出现。使用【NewContextMenu】工具栏创建一个菜单;指定其隶属关系;指定其属性。8.1.5GUI组态1.窗口重画行为2.命令行访问3.生成FIG文件和M文件在添加控件前,应使用GUIDE应用程序选项对话框
对GUI组态进行设置。选择界面设计编辑器的【Tools】菜单下的【ApplicationOptions】选项打开如下图所示选项对话框。该对话框能够设置的选项如下:窗口重画行为(Resizebehavior);
命令行访问(Command-lineaccessibility);生成FIG文件和M文件(GenerateFIG-fileandM-file);生成回调函数原型(Generatecallbackf
unctionprototypes);同一时刻仅允许运行一个应用程序实例(GUIallowsonlyoneinstancetorun(singleton));使用系统背景颜色设置(Usingthesystembackgroundco
lors);仅生成FIG文件(GenerateFIG-fileOnly)。8.1.6GUI界面设计GUI界面设计是通过使用界面设计编辑器进行的,控件的布置前面已经介绍,但在布置后往往需要定义控件的属性。用鼠标双
击该控件,即可看到其对应的属性检查器。当第一次将按钮布置在界面后,双击该按钮即可看到如下图所示的属性检查器,其中包含属性Tag和Callback。8.2编程设计GUI1.M文件及数据管理2.回调函数的使用方法3.图形窗口的
行为控制GUI的编程方法:系统生成的应用程序M文件的含义,以及利用句柄结构体管理GUI数据的方法;GUI控件回调函数的类型和中断方法;GUI图形窗口的行为控制。1.M文件及数据管理(1)M文件GUI的一个重要任务就是通过控件响应指定行为。GUIDE给添加
到应用程序M文件中的回调函数自动命名,并使控件被激活时该函数能够被调用。(2)数据管理GUIDE使用应用程序M文件来定义和实现数据的存储和读取,文件中包含所有GUI控件对象句柄的结构体handles。2.回调函数的使用方法(1)回
调函数类型①图形对象的回调函数ButtonDownFcn:当用户将鼠标放置在某个对象时,单击鼠标左键,MATLAB将调用回调函数。CreatFcn:MATLAB将在创建对象时,调用回调函数。DeleteFcn:MATLAB在删除对象
之前调用回调函数。②图形窗口的回调函数CloseRequestFcn:当请求关闭图形窗口时,调用回调函数。KeyPressFcn:当用户在图形窗口内按下鼠标键时,调用回调函数。ResizeFcn:当用户重画图形窗口时,调用回调函数。WindowButtonDownFcn:当用户在图
形窗口内无控件的地方按下鼠标键时,调用回调函数。WindowButtonMotionFcn:当用户在图形窗口中移动鼠标时,调用回调函数。WindowButtonUpFcn:当用户在图形窗口中释放鼠标键时,调用回调函数。(2)回调函数执行中断默认情况下MATLAB允许回调函数执行
中断,且可以随时终止操作,则终止操作对应的回调函数将会中断装载数据操作对应的回调函数。①可执行中断设置图形对象都包含属性Interruptible,该属性的默认值为on,表示回调函数可以执行中断。同时图形对象都包含属性BusyA
ction,它有如下两种可能的取值:queue:将事件保存在事件序列中并等待不可中断回调函数执行完毕后处理。cancel:放弃该事件并将事件从序列中删除。②执行中断的规则遇到命令drawnow、figure、getframe、pause或waitfor,MATLAB将该回调函数
挂起并开始处理事件序列。事件序列的顶端事件要求重画图形窗口,MATLAB将执行重画并继续处理事件序列中的下一个事件。事件序列的顶端事件将会导致一个回调函数的执行,MATLAB将判断回调函数被挂起的
对象是否可中断。当所有事件都被处理后,MATLAB恢复被中断函数的执行。3.图形窗口的行为控制在设计GUI时,需要考虑GUI图形窗口的行为控制,主要包括如下3种情况:实现图形注释的工具GUI,通常一幅图形需要一个新的工具实例。询问用户并阻止MATLAB运行直至用户作出回答,此时图形
窗口仅可以被观察。警告用户其指定的操作将会破坏文件的对话框,该对话框能够执行用户所需的操作前强迫用户作出回答。下面3种技术能够有效地解决上述3种情况。允许单个或多个GUI实例同时运行。在显示GUI时阻止MATLAB的运行。使用
模态图形窗口使用户只能与当前执行的GUI进行交互。8.3图形用户界面设计实例编写函数,这些函数都包含在随图形用户界面设计时产生的M文件中。1.图形用户界面打开时自动运行的函数simple_gui_OpeningFcn(),其具体代码序列如
下:2.3个按钮的回调函数(Callback),其具体代码序列如下:3.下拉菜单的回调函数(Callback),其具体代码序列如下:4.菜单项Close的回调函数(Callback),其具体代码序列如下:最后激活的图形用户界面如下图所示。当在下拉菜单中选择【sinc】且单击【Mesh】按钮,可得
到如下图所示的结果。当选择【File】菜单下的【Close】选项,图形用户界面将关闭。关闭guide后,在命令窗口直接输入如下代码序列也可以运行图形用户界面。clearsimple_gui由上面的例子,可以总结出图形用户界面
设计的基本流程:首先新建一个模板,并设置GUI应用程序选项,保存文件;其次布置界面,并设置模板和控件的属性;再次设置初始/结束函数和回调函数;最后激活/运行图形用户界面。习题1.利用图形用户界面,实现记事本【File】菜单下的【新建】、【打开】、【保存】、
【另存为】和【退出】菜单项功能。2.利用图形用户界面,设计能够完成增、删、改通讯簿记录的程序。第九章Simulink仿真本章主要讲解:Simulink的概念及其应用;Simulink搭建系统模型的方法及特点;Simulink环境中的仿真及
调试。目录9.1Simulink概述9.2模型的创建9.3子系统及其封装9.4过零检测9.5代数环9.6回调函数9.7运行仿真9.8仿真结果分析9.9模型的调试9.10S函数9.11实例习题9.1Simuli
nk概述9.1.1Simulink的概念9.1.2Simulink的工作环境9.1.3Simulink的工作原理9.1.4Simulink模型的特点9.1.5Simulink里的数据类型9.1.6Simulink里的
模块和模块库9.1.1Simulink的概念Simulink是MATLAB提供的实现动态系统建模和仿真的软件包,是MATLAB相对独立的重要的组成部分。Simulink的突出特点是支持图形用户界面(GUI),模型由模块组成的框图来表示。启动Simulink(6.0版)有如下3
种方式:在MATLAB的命令窗口直接键入命令Simulink;用鼠标左键单击MATLAB工具条上的按钮;在MATLAB菜单上选择【File】|【New】|【Model】选项。运行后会弹出如下图所示的Simulink模块库浏览器窗口。使用第3种方式打开时还会弹出如下图所示的新建模
型窗口。1.【File】菜单2.【Edit】菜单3.【View】菜单9.1.2Simulink的工作环境4.【Simulation】菜单5.【Format】菜单6.【Tools】菜单7.【Help】菜单Simulink模块库浏览器各部分的用途
,如下图所示。1.【File】菜单【File】菜单中各选项的名称与功能如下表所示。【File】菜单2.【Edit】菜单【Edit】菜单中各选项的名称与功能如下表所示。【Edit】菜单3.【View】菜单【View】菜单中部
分主要选项的名称与功能如下表所示。【View】菜单4.【Simulation】菜单【Simulation】菜单如下图所示。【Simulation】菜单各选项的功能如下:【Start】:开始运行仿真;【Stop】:停止仿真;【ConfigurationParameters】:
设置仿真参数和选择解法器;【Normal】、【Accelerator】、【External】分别表示正常工作模式、加速仿真和外部工作模式。5.【Format】菜单【Format】菜单用于设置字体、屏幕颜色、模块名的显示、模块显示颜色、信号和端
口类型和宽度等。该菜单部分主要选项的名称与功能如下表所示。【Format】菜单6.【Tools】菜单【Tools】菜单中部分主要选项的名称与功能如下表所示。【Tools】菜单7.【Help】菜单【Help】菜单中部分主要选项的名称与功能如下表所示。【Help】菜单9.1.3
Simulink的工作原理1.图形化模型与数学模型间的关系2.图形化模型的仿真过程1.图形化模型与数学模型间的关系现实中每个系统都有输入、输出和状态3个基本要素,以及它们之间随时间变化的数学函数关系,即数学模型。图形化模型也体现了输入、输出和状态间随时间变化的某种关
系,如下图所示。只要这两种关系在数学上是等价的,那么就可以图形化模型代替数学模型。2.图形化模型的仿真过程Simulink的仿真过程包括如下几个阶段:模型编译阶段;连接阶段;仿真环阶段。(1)模型编译阶段Simulink引擎调用模型编译器,将模
型编译成可执行文件。编译器完成以下任务:计算模块参数的表达式以确定它们的值;确定信号属性(如名字、数据类型等);传递信号属性以确定未定义信号的属性。优化模块;展开模型的继承关系(如子系统);确定模块运行的优先级;确定模块的采样时间。(2)
连接阶段Simulink引擎按执行次序创建运行列表,初始化每个模块的运行信息。(3)仿真环阶段Simulink引擎从仿真的开始到结束,在每一个采样点按运行列表计算各模块的状态和输出。仿真环阶段又分成以下两个子阶段:初始化阶段:该阶段只运行一次,用于初始化
系统的状态和输出;迭代阶段:该阶段在定义的时间段内按采样点间的步长重复运行。9.1.4Simulink模型的特点Simulink建立的模型具有以下3个特点:仿真结果的可视化;模型的层次性;可封装子系统
。9.1.5Simulink里的数据类型1.Simulink支持的数据类型2.数据类型的传播3.使用复数信号Simulink在仿真开始之前和运行过程中会自动确认模型的类型安全性,以保证该模型产生的代码不会出现上溢或下溢。1.Simulink支持的数据类型Simulink支持所有的MATLA
B内置数据类型,除此之外Simulink还支持布尔类型。打开Simulink模型窗口中的菜单Help下的选项BlockSupportTable,打开如下图所示的帮助窗口,总结了所有Simulink库中的模块所支持的数据类型。打开Simulink模型
窗口的【Format】|【Port/SignalDisplays】|【PortDataTypes】,查看信号的数据类型和模块输入/输出端口的数据类型,如下图所示。2.数据类型的传播相连模块的输出/输入信号
所支持的数据类型如果是不相同的,在仿真中就会弹出错误提示对话框,告知出现冲突的信号和端口。此时可以尝试在冲突的模块间插入DataTypeConversion模块来解决类型冲突。3.使用复数信号Simulink默认的信号值都是实数,但
在实际问题中有时需要处理复数信号。在Simulink中通常用下面两种方法来建立处理复数信号的模型,如下图所示。在模型中加入Constant模块,并将其参数设为复数。分别生成复数的虚部和实部,再用Real-Image
toComplex模块把它们联合成一个复数。分别生成复数的幅值和幅角,再用Magnitue-AngletoComplex模块把它们联合成一个复数。9.1.6Simulink里的模块和模块库模块库提供
各种基本模块,它按应用领域以及功能组成若干子库,并按树状结构进行显示。模块是Simulink建模的基本元素。下表详细介绍了Simulink中常用子库中常用模块的功能。CommonlyUsedBlocks子库Continuous子库Disc
ontinuities子库Discrete子库LogicandBitOperations子库续表MathOperations子库续表Ports&Subsystems子库续表Sinks子库Sources子库User-DefinedFunctions子库
9.2模型的创建1.模块的基本操作2.创建模型的基本步骤3.模型文件格式1.模块的基本操作下表汇总了Simulink对模块进行操作的部分方法。对模块进行操作续表下表汇总了Simulink对直线进行操作的部分方法。对直线进行
操作双击模块将会弹出【参数设置】对话框,如下图所示的增益模块,进而设置参数值。鼠标右键单击模块并在弹出的上下文菜单中选择【BlockProperties】,会弹出属性设置对话框,如下图所示,其中包括如下三项内容。【General】页;【BlockAnnot
ation】页;【Callbacks】页。(1)【General】页Description:用于对该模块在模型中的用法进行注释;Priority:定义该模块在模型中执行的优先顺序;Tag:为模块添加文本
格式的标记。(2)【BlockAnnotation】页用于指定在图标下显示模块的参数、取值及格式。(3)【Callbacks】页用于定义该模块发生某种指定行为时所要执行的回调函数。对信号进行标注以及对模型
进行注释,方法如下表所示。在连线上反映信息对注释进行处理2.创建模型的基本步骤利用Simulink进行系统建模和仿真的一般步骤如下。绘制系统流图;启动Simulink模块库浏览器,新建一个空白模型窗口;将所需模块放入空白模型窗
口中,按系统流图的布局连接各模块,并封装子系统;设置各模块的参数以及与仿真有关的各种参数;保存模型,模型文件的后缀名为.mdl;运行并调试模型。3.模型文件格式Simulink还提供了通过命令行建立模型和设置模型参数的方
法。Simulink将每一个模型(包括库)都保存在一个以.mdl为后缀的文件里,称为模型文件。一个模型文件就是一个结构化的ASCII文件,它包括关键字和各种参数的值。9.3子系统及其封装9.3.1创建子系统9.3.2封装子系统9.3.3自定义模块库9.3.1创建子系统1.子系统的作用2.子系统的
创建方法3.子系统创建示例1.子系统的作用通过子系统可以把复杂的模型分割成若干个简单的模型,具有以下优点:减少模型窗口中模块的个数,使得模型窗口整洁。把一些功能相关的模块集成在一起,可以复用。通过子系统可以实
现模型图表的层次化。2.子系统的创建方法Simulink有如下两种创建子系统的方法。通过子系统模块来创建子系统:先向模型中添加Subsystem模块,然后打开该模块并向其中添加模块;组合已存在的模块集。3.子系
统创建示例例通过Subsystem模块创建子系统。具体步骤如下。从Ports&Subsystems中复制Subsystem模块到模型中,如下图所示;用鼠标左键双击Subsystem模块图标打开如下图所示Subsystem模块编辑窗口;在新
的空白窗口创建子系统,然后保存;运行仿真并保存。例通过组合已存在的模块创建子系统。具体步骤如下。创建如下图所示的系统;选中要创建成子系统的模块,如下图所示;选择【Edit】|【CreateSubsys
tem】菜单,结果如下图所示;运行仿真并保存。9.3.2封装子系统1.封装的作用2.封装的过程3.封装示例封装后的子系统与Simulink提供的模块一样拥有图标,并且用鼠标左键双击图标时会出现一个用户自定义的【参数设置】对话框,实现在对话框中设置子系统中的参数。1.封装
的作用子系统中各个模块的参数通过参数对话框就可以进行设置。为子系统创建可以反映子系统功能的图标。可以避免用户在无意中修改子系统中模块的参数。2.封装的过程选择需要封装的子系统,并选择【Edit】|【MaskSubsystem】菜单进行封
装。选择【Edit】|【Editmask】菜单,这时会弹出如下图所示的封装编辑器,通过它进行各种设置。单击【Apply】或【OK】按钮保存设置。3.封装示例例简介封装的过程。具体步骤如下:(1)建立如下图所示的含有子系统的模型,并设置子系统中Gain模块的Gain参数为一变
量m。(2)选中模型中的Subsystem子系统,选择【Edit】|【MaskSubsystem】菜单进行封装,进而选择【Edit】|【Editmask】菜单(或用鼠标右键单击子系统弹出上下文菜单,选择【Editmask】菜单)打开封装编辑
器,如下图所示。(3)按照如下图所示设置【Icon页】。①Iconoptions面板:定义图标的边框是否可见等。②Drawingcommands文本框:定义绘制模型图标的方式。③Examplesofdrawingcommands面板:说明各种绘制图标的命令,每种命令都对应一个示例。(4)按照如
下图所示设置【Parameters】页。定义封装子系统参数设置对话框的可设置参数,其中各项设置的含义如下图所示。(5)按照如下图所示设置【Initialization】页。定义封装子系统的初始化命令,包括MATLAB表达式、函数、运算符和在【Parameters】页定义的变量。(6)按照如
下图所示设置【Documentation】页定义封装子系统的封装类型、模块描述和模块帮助信息,其中各项设置的含义如下图所示。(7)设置参数后运行仿真,用鼠标左键双击模型中的Scope模块,看到如下图所示的结果。9.3.3自定义模块库大量封装子系统模块按照功能需要分门别类
地来存储,以方便查找,每一类即为一模块库。通过自定义模块库,可以将为某个领域服务的所有模块集中存放。通过选择Simulink界面的【File】|【New】|【Library】菜单来创建模块库。选中该菜单后将弹出一个空白的库窗口;
然后将需要存放在同一模块库中的模块复制到模块库窗口中即可,如下图所示。9.4过零检测过零检测通过Simulink为模块注册若干过零函数,当变化趋势剧烈时,过零函数发生符号变化。每个采样点仿真结束时Simulink检测是否有过零
函数符号变化,如果检测到过零点,Simulink将在前一个采样点和目前采样点间内插值。下表列出了Simulink中支持过零检测的模块。支持过零点检测的模块9.5代数环如果Simulink模块的输入是依赖于该模块的输出,就会产生一个代数环,如下图所示。这意味着无
法进行仿真,因为没有输入就得不到输出,没有输出也得不到输入。解决代数环的办法包括以下几种:尽量不形成代数环的结构,采用替代结构;为可以设置初始值的模块设置初值;对于离散系统,在模块的输出一侧增加unitdelay模块;对于连续系统,
在模块的输出一侧增加memory模块。为模型或模块设置回调函数的方法有下面两种:通过模型或模块的属性对话框来设置;通过MATLAB相关的命令来设置。9.6回调函数模型属性设置见下图。模块属性设置见下图。模
型属性设置对话框中的Callbacks页给出了回调函数列表,如下表所示。模型的回调参数模块的回调参数续表9.7运行仿真1.使用窗口运行仿真2.仿真参数设置3.仿真诊断对话框4.使用命令运行仿真5.改善仿真性能及精度1.使用窗口运行仿真建立好模型后,可以直
接在模型窗口通过菜单项或工具栏进行仿真,如下图所示。2.仿真参数设置可以通过模型窗口的【Simulation】|【ConfigurationParameters】菜单项打开设置仿真参数的对话框,如下图所示。3.仿真诊断对话框如果模型在运行过程中遇到错误
,将停止仿真,并弹出仿真诊断对话框。通过该对话框,可以了解模型出错的位置和原因,如下图所示。4.使用命令运行仿真MATLAB允许通过命令窗口运行仿真。MATLAB提供函数sim()运行仿真,其具体使用方法如下:[t,x,y]=sim(filename,times
pan,options,ut);[t,x,y1,y2,...,yn]=sim(filename,timespan,options,ut)。只有参量filename是必需的,各参量的含义如下表所示。函数sim()参
量5.改善仿真性能及精度Simulink的仿真性能和精度受许多因素的影响,包括模型的设计、仿真参数的设置等。但是对于某些问题,适当的调整仿真参数可以得到更好的结果,如:加速仿真提高精度9.8仿真结果分析1.观看输出结果2.线性化分析3.平衡点分析1.观看输出结果在Simulink中有
如下3种方法绘制模型的仿真结果。在模型中将信号输入到Scope模块;将输出写入ToWorkspace模块,然后使用MATLAB绘图功能。将输出写入ToFile模块,然后使用MATLAB文件读取和绘图功能。2.
线性化分析Matlab中用函数linmod()和dlinmod()来分别实现连续模型和离散系统、混杂系统的线性化,其具体使用方法如下:[A,B,C,D]=linmod(filename);[A,B,C,D]=dlinmod(filename,Ts)。3
.平衡点分析Simulink通过函数trim()来计算动态系统的平衡点。并不是所有时候都有解,如果无解,函数trim()将返回离期望状态最近的解。9.9模型的调试1.Simulink调试器2.命令行调试3.设置断点4.显示仿真的信息5.显示模型的信息Simulink提供了调试器,以方便查找和诊断
模型中的错误,它允许通过单步运行仿真显示模块的即时状态、输入和输出。1.Simulink调试器下表对该对话框工具栏各按钮的功能进行了详细介绍。调试器工具栏2.命令行调试许多Simulink命令和消息是通过MethodID和B
lockID来引用方法和模块的。MethodID是按方法被调用的顺序从0开始分配的一个整数;BlockID是在编译阶段分配的,形式为sid:bid。3.设置断点断点就是使仿真运行到该位置时停止,同时可以使用命令cont
inue使仿真继续运行。调试器允许定义无条件断点和有条件断点。(1)设置无条件断点设置无条件断点有如下3种方式:通过调试器工具栏;通过调试器SimulationLoop页;通过在MATLAB命令窗口运行相关命令。(2)设置有条件断点
设置有条件断点可以通过在调试器【Breakonconditions】页中设置相应的断点条件来实现。4.显示仿真的信息Simulink调试器工具条中的按钮用于显示模块的输入/输出信息。首先在模型窗口选中模块;然后用鼠标左键单击该按钮,被选中
的模块在当前采样点的输入、输出和状态信息将显示在调试器窗口的【Outputs】页中。5.显示模型的信息调试器除了可以显示仿真的相关信息外,还可以显示模型的相关信息。在MATLAB命令窗口中,可以用命令slist显示系统中各模块的索引,模块的索引就是它们的执行顺序,它与调试器窗
口中【SortedList】页显示的内容是一样。9.10S函数9.10.1概念9.10.2功能9.10.3工作流程9.10.4书写规范9.10.5应用示例9.10.1概念S函数是一种描述动态系统的计算机语言,可以用MATLAB、C、C++
、Ada或Fortran语言书写。S函数采用一种特殊的调用语法使得S函数可以和Simulink解法器进行交互。S函数可以用来描述连续、离散和混杂系统。9.10.2功能S函数可以实现以下操作。可以通过它用多种语言来创建
新的通用性的Simulink模块。编写好的S函数,可以在User-DefinedFunctions模块库的S-function模块中通过名称来调用,并可以进行封装。可以通过S函数将一个系统描述成一个数学方
程。便于图形化仿真。可以创建代表硬件驱动的模块。9.10.3工作流程1.模块输入、状态和输出间的数学关系2.Simulink仿真流程3.S函数的回调函数1.模块输入、状态和输出间的数学关系描述一个Simulink模块需要3个基本元素:输入向量(u);状态向量(x);输出向量(y)
。输出是输入向量、状态向量和采样时间的函数。在计算中,往往需要利用如下所示的3种关系。Simulink在仿真时把上面的关系对应为不同的函数,它们分别实现计算模块的输出、更新模块的离散状态和计算连续状态的微分。2.Simulink仿真流程Simulink仿真按照
如下图所示的流程进行。初始化阶段,Simulink将库中的模块并入到自建模型中;然后进入仿真循环;如此循环直至仿真结束。3.S函数的回调函数一个S函数是由一系列回调函数组成,在仿真循环中的每个仿真阶段都由Simulink调用回调函数来执行相应的任务。S函数的回调函数可
以完成以下任务。初始化;计算下一个采样点;计算当前仿真步的输出;更新当前仿真步的离散状态;积分。9.10.4书写规范每一个M文件S函数具有如下的形式:[sys,x0,str,ts]=f(t,x,u,flag,p1,p2
,...)下表列出了上面各参数的含义。函数各参数的含义续表书写M文件S函数时只需用MATLAB语言来编写每个flag值对应的子函数即可。下表列出了在各个仿真阶段对应要执行的回调函数以及相应的flag参数值。各个仿真阶段对应要执行的S函数方法9.10.5应用示例利用“Us
er-DefinedFunctions”库中的S-Function模块创建由MATLAB语言书写的M文件S函数。运行Simulink模型可得到如下图所示的仿真结果。上下两个模块的输出结果一样,证明了S函数的功能是正确的。9.11实例例针对平面直角坐标系,实现坐标在几种
常用坐标系间的变换,具体步骤如下。首先列出常用的坐标系。(1)直角坐标系(oxy)原点o位于任意位置,轴ox指向任意方向,轴oy垂直于轴ox。(2)极坐标系(ox)极点o与直角坐标系的原点o重合,极轴ox与直角坐标
系的轴ox重合,矢径与极轴ox的夹角为极角。(3)平移直角坐标系(o1x1y1)原点o1在原直角坐标系的坐标为(g,h),轴o1x1和o1y1分别平行于原直角坐标系的轴ox和oy。(4)旋转直角坐标系(ox2y2)原点o与原直角坐标系的原点o重合,轴ox2和oy2分别逆时针旋转角度
。其次写出坐标在不同坐标系间的转换关系。再次构造Simulink框图。(1)由极坐标系转换到直角坐标系的框图如下图所示。按下“Ctrl+A”键选中所有模块和连线,并创建子系统。双击该子系统,修改模块In1的标注为“极坐标”,模块Out1的标注为“直角坐标”。得到如下图所示的结果。
然后封装该子系统并设置参数,同保存该子系统为.mdl文件。(2)由平移直角坐标系转换到直角坐标系的框图。类似于上面的步骤,创建的子系统如下图所示。其中,利用到模块Constant、Demux、Mux和Fcn。封装该子系统并设置参数,双击如下图所示的子系统。可
看到如下图所示的结果。(3)由旋转直角坐标系转换到直角坐标系的框图。建立如下图所示的子系统,并进行如下图所示的封装设置。最后构成并保存自建模型库,如下图所示。习题第十一章外部接口本章将着重介绍MATLAB的外部接口,包括:
与Word/Excel的混合使用;编译器;应用程序接口。目录11.1与Word/Excel的混合使用11.2编译器11.3应用程序接口习题11.1与Word/Excel的混合使用11.1.1Notebook的使用11.1.2Excelli
nk的使用在Word环境中可以使用MATLAB的资源。同时MATLAB也可以与Excel混合使用。11.1.1Notebook的使用1.在Word中执行代码的基本过程2.Notebook使用中应该注意的问题安装Notebook(又称M-book)时,计算机中必须已经安装Word和MAT
LAB,其具体步骤如下。1.在Word中执行代码的基本过程Notebook采用输入细胞(InputCell)来定义MATLAB的代码,具体操作步骤如下。采用文本格式输入代码,末尾不要加回车和空格。通过Notebook菜单中的【DefineIn
putCell】选项定义输入细胞,其中输入细胞都显示为黑方括号包括绿色字符的形式。通过Notebook菜单中的【EvaluateCell】选项或者按Ctrl+Enter键,运行输入细胞内的代码,并得到黑方括号包括蓝色字
符形式的输出细胞。0246810121416182000.20.40.60.811.21.41.61.82TimeAmplitude2.Notebook使用中应该注意的问题。M-book文档中的MATLAB代码必须在英文状态下输入。带鼠标操作交互的代码最好不在M-book文档中运行。在运
行M-book文档时,最好不运行其他程序与任务,以免影响M-book文档中程序的正确执行。采用以下方法解决代码执行中出现的异常情况:代码以命令clear开始;重新启动计算机后,再执行M-book文档中的程序;将M-book文档的代码拷贝到M文件,再到MATLAB的命令窗口执行。M
-book文档的代码运行速度要比在MATLAB命令窗口中执行慢很多。当编辑科技论文或其他文档时,最后可将细胞转换为普通文本。可使用Notebook菜单中的【BringMATLABtoFont】选项或者按组合键Alt+M把MATLAB的命令窗口调到前台。可使用Not
ebook菜单中的【ToogleGraphOutputforCell】选项控制是否显示输入细胞或输出细胞的输出图形。11.1.2Excellink的使用1.Excellink的安装2.Excellink的启动3.Exc
ellink的终止4.Excellink使用时需要注意的几个问题Excellink是在MicrosoftWindows环境下实现MicrosoftExcel和MATLAB进行交互的插件。使用Excellink时,不必脱离Excel环境。Excellink提供11条功能
函数来实现数据的链接和操作。1.Excellink的安装系统需要在Windows环境下先安装Excel,然后再安装MATLAB和Excellink。Excellink随安装MATLAB时安装的,即在MATLAB安装组件中选中Excellink。需要在Excel中设置
,具体步骤如下。启动MicrosoftExcel,单击工具菜单(Tools),执行【加载宏】命令,得到如下图所示的结果。在打开的【加载宏】对话框中单击【浏览】按钮,选择MATLAB安装目录下的\toolbox\exlink子目录里的excllink.xla文件,然后单击【
确定】按钮,如下图所示。返回【加载宏】窗口,此时已经选中了【Excellink】选项,如下图所示。单击【确定】按钮后,Excellink插件即可加载MATLAB,并可以看到其运行窗口。2.Excellink的启动按照上面的设置
,每次启动Excel时Excellink和MATLAB将自动运行。如果不希望Excellink和MATLAB自动运行,可以通过在Excel数据表单元中输入“=MLAutoStart(”no“)”即可改变设置,如下图所
示。同时可以从Excel环境中手动启动Excellink和MATLAB。首先,在Tools菜单中选择【宏】选项,如下图所示;在如下图所示的对话框中输入“MATLABinit”,单击【执行】按钮后即可启动Excell
ink,并同时启动MATLAB。3.Excellink的终止当终止Excel的时候,Excellink和MATLAB会被同时终止。如果需要在Excel环境中终止MATLAB和Excellink的运行,则在工作表单元中输入“=MLClose()”即可,如下图所示。当
需要重新启动Excellink和MATLAB时,可以使用MATLABinit命令。4.Excellink使用时需要注意的几个问题Excellink函数名对字母的大小写不作区分,而MATLAB函数名是区分大小写的。Excel工
作表等式通常以“+”或“=”作为起始标记。在大多数Excellink函数中有两种定义变量的方式,即直接定义和间接定义。Excellink函数执行过程中其所在数据单元将一直显示其函数内容,函数执行完毕后,数据单元将被赋值为0。建议设置Excel【工具】工具
菜单里【选项】的【编辑】页中【按Enter键后移动】选项为【向下】,以保证输入完毕且经确认后再改变当前工作单元。11.2编译器11.2.1编译器概述11.2.2编译器的安装和配置11.2.3编译器的使用MATLAB编译器是指将M文件作为其输入,同时生成独立的可执行文件或相关软件
组件的程序,它可以由命令mcc调出。11.2.1编译器概述MATLAB编译器4.0版本采用了MATLABComponentRuntime(MCR)技术。MCR提供了对MATLAB语言的完全支持。MATLAB编译器采用了ComponentTechnologyFile
(CTF)存档来组织配置文件包。所有的M文件均采用了高级加密标准(AES)进行了密钥为1024位的加密,保存为CTF格式。每一个由MATLAB编译器生成的应用程序或者共享库均有一个与之相对应的CTF存档。
MATLAB编译器自动生成独立文件或软件组件。为了生成独立运行的MATLAB应用程序,只需要用来构成应用程序的M文件,然后编译器将会自动执行以下操作。依赖性分析;代码生成;存档生成;编译;链接。11.2.2编译器的安装和配置1.安装ANSIC/C++编译器2
.安装MATLAB编译器3.配置编译器4.安装MCR1.安装ANSIC/C++编译器2.安装MATLAB编译器MATLAB编译器的安装过程包含在安装MATLAB之中,当选择Typical的安装模式时,MATLABCompiler会被自动选为MATL
AB的安装组件。当选择Custom安装模式时,在默认情况下,MATLABCompiler选项是被选中的,如下图所示。3.配置编译器下面将介绍如何配置C或C++编译器,使其可以与MATLAB编译器一起进行工作
。4.安装MCR将MATLAB安装路径中的\toolbox\compiler\deploy\win32子目录下的文件MCRInstaller.exe拷贝到其他路径;双击进行安装,直到提示安装结束。11.2.3编译器的使用1.编译指令mcc2.
创建独立执行程序1.编译指令mcc不管是生成独立执行程序,还是C共享库以及软件组件,只要源码是M文件都可以借助编译命令mcc实现。2.创建独立执行程序下面以3个例子说明不同类型的编译过程。打开DOS窗口,将路径变更为e
xm2.exe所在目录,并运行exm2.exe,运行结果如下图所示。11.3应用程序接口11.3.1创建C语言MEX文件11.3.2Java接口11.3.3DDE技术11.3.4ActiveX技术MATLA
B提供应用程序接口(ApplicationProgramInterface,API)来实现与其他外部程序的沟通。11.3.1创建C语言MEX文件1.MEX文件简介2.编写MEX文件源程序1.MEX文件简介MEX是MATLAB和Executable两个单词的缩写。MEX文件一般使用C或
者Fortran语言编写,通过编译生成的目标文件能够被MATLAB调用执行。MEX文件主要应用于已存在较大规模的C或者Fortran程序。矩阵是MATLAB唯一能处理的对象,在C语言中矩阵用结构体mxArray来定义。2.编写MEX文件源程序编写MEX文件源程序时,要用到两类A
PI库函数:mx-库函数,用于在C语言中创建、访问、操作和删除结构体mxArray;mex-库函数,用于与MATLAB环境进行交互。11.3.2Java接口Java语言是一种面向对象的高级编程语言。在MATLAB中可以直接调用Java的应用程序。利用MATLAB的
Java接口可以完成下列工作:①调用JavaAPI类和包;②调用第三方Java类;③在MATLAB环境下创建Java对象;④通过Java语法或者MATLAB语法使用Java对象的方法;⑤在Java对象和MATLAB之间交互数据。在MAT
LAB中创建Java对象有两种方法:直接用Java类用函数javaObject()创建。11.3.3DDE技术1.DDE的一般性说明2.DDE中的MATLAB服务器3.DDE中的MATLAB客户动态数据交换(DynamicDataExc
hange,DDE)允许各Windows应用程序间交换数据的通信机制。Windows平台上的MATLAB作为一个应用程序,具有借助DDE与其他应用程序通信的功能。1.DDE的一般性说明应用程序可以借助DDE通话实现彼此间的通信。请求建立对话的应用程序称为客户(C
lient)响应对话请求的应用程序被称为服务器(Server)。当客户应用程序创建DDE对话时,必须识别被呼叫服务器的两个DDE参数:服务名(Servicename),即被请求对话的应用程序名;话题(T
opic),即对话主题。由这两个参数构成了区分不同对话的惟一标识。2.DDE中的MATLAB服务器客户可以采用不同方法访问作为服务器的MATLAB。假如客户应用程序能够提供管理DDE对话的函数或宏,则应该充分利用它们;假如客户应用程序是自行编制的,则可利用MATLAB引擎库
或直接利用DDE。MATLAB用作服务器时的工作原理如下图所示。DDE服务器模块MATLABDDE函数模块客户应用程序对话当MATLAB作为DDE服务器使用时,所能选用的具体名称和它们间的层次关系如下图所示。MATLABSystemEngineFormatSysIterms<matrixname>
EngFigureResultEngStringResultEnEvalStringTopics服务Service话题Topic内容Items3.DDE中的MATLAB客户当MATLAB以客户身份建立DDE通信时,其工作原理如下图所示。DDE客户模块MATLA
BDDE服务器模块服务器应用程序对话在Excel开启的前提下,运行结果如以下两图所示。0510152005101520-10-5051011.3.4ActiveX技术1.ActiveX技术的一般性说明2.自动化客户3.自动化服务器1.ActiveX技术的一般性说
明ActiveX是一种基于MicrosoftWindows操作系统的组件集成协议,是各种面向对象技术的集合。每个ActiveX都支持一个或多个赋名的界面,而界面是一组逻辑相关方法、属性和事件的组合。MATLAB支持两种ActiveX技术,即ActiveX控件和ActiveX自
动化。MATLAB自动化客户的功能仅是MATLABActiveX控件功能的子集。2.自动化客户若需要MATLAB通过ActiveX自动化客户支持调用其他ActiveX组件,则须先查阅该ActiveX组建的相关文件,从中得到该组件的名字、该组件所采用的接口名
、方法、属性和事件等。指令actcontrol用于创建ActiveX自动化客户支持。该指令运行后将引出指定组件名的对象默认界面。通过该对象属性的获取和设置、方法的激活,可以改变该对象的界面和行为。在第21行代码执行前产生如下图所示的Excel界面。3
.自动化服务器通过MATLABActiveX自动化服务器,可以在指定应用程序中执行MATLAB命令,并可以与MATLAB的工作空间交换数据。习题