1、MATLAB是什么?n用于科学工程计算的高效率高级语言n语言开发系统n适合多学科、多种工作平台的功能强大的大型软件1MATLAB的主要构成n编程语言:以矩阵和数组为基本数据单位的编程语言;n工作环境:一系列应用工具提供编写、调试程序的环境;n图形处理:包括绘制图形和创建GUI等。n数学库函数:包含丰富的数学函数和其他复杂功能函数;nAPI:为MATLAB与其它语言编写的程序进行交互提供接口。MATLAB语言特点(一):n采用统一的数据和变量对象矩阵,即数据是矩阵元素的数据,变量是矩阵变量;n在生成矩阵对象时,不要求做明确的维数说明,有丰富的矩阵处理功能;n功能强、易学易用,还可根据实际需要扩充
2、功能;n一条语句或一个函数相当于C语言中的一个子程序或一个处理功能;nMATLAB还拥有各种实用的软件,提供了许多通信系统模型,能对系统直接进行仿真;MATLAB语言特点(二):n用户可以自己编写函数,绘制系统响应曲线;nMATLAB还具有符号运算功能,直接用符号算式进行演算;nMATLAB提供了SIMULINK软件包,该软件包提供了通信和控制系统方块图的图形编程形式,这样利用通信系统方块图的图形对系统直接进行仿真,使得一个很复杂的系统仿真变得相当容易。nMATLAB采用了面向对象的技术,以矩阵作为基本数据结构和以矩阵运算为基础,集科学计算和图形可视化为一体。nMATLAB是高层次的矩阵/数组
3、语言,具有条件控制、函数调用、数据结构、输入输出、面向对象等程序语言特性。nMATLAB还带有许多针对不同应用所开发的工具箱(Toolboxs)。5MATLAB语言特点(三):MATLAB的其他主要特色:n面向对象特性,图形、窗口等都是对象,可以通过属性改变它们;n矩阵自动动态伸缩,矩阵的阶数几乎可以任意大(只与虚拟内存有关);n功能强大的图形处理与数字计算功能;n系统扩充方便,可以随时向系统增加函数;n可以自己设计自己需要的工具箱。6MATLAB语言重要性nMATLAB已成为各种系统仿真、数字信号处理、科学可视化的标准语言。nMATLAB已确认为必须掌握的计算工具,是从理论通向实际的桥梁,是
4、最可信赖的科技资源之一。7MATLAB软件特点可归纳如下:n简单易学;n代码短小高效;n计算功能非常强大;n强大的图形表达功能;n可扩展性能8MATLAB产品族可以用来进行如下工作:* 数值分析;* 数值和符号计算;* 工程与科学绘图;* 控制系统的设计与仿真;* 数字图像处理;* 数字信号处理;* 通讯系统设计与仿真;* 财务与金融工程。 9操作桌面的缺省外貌10q命令窗口(指令窗)命令窗口(指令窗)q工作空间窗口(浏览器)工作空间窗口(浏览器)q当前路径(当前目录)窗口当前路径(当前目录)窗口q命令历史窗口(历史指令窗)命令历史窗口(历史指令窗)通用操作界面n命令窗口(指令窗)(Comma
5、nd Window)n工作空间窗口(浏览器) ( Workspace Browser )n命令历史窗口(历史指令窗)(Command History)n当前路径(当前目录)窗口( Current Directory Browser)n内存数组编辑器(Array Editor )nM文件编辑/调试器( Editor/Debugger )n帮助导航/浏览器(Help Navigator/Browser)n图形窗口(Figure)11数值、变量和表达式(一)数值的记述(二)变量命名规则(三) MATLAB默认的预定义变量(四)运算符和表达式(五)复数和复数矩阵12(一 )数值的记述n采用习惯的十进制
6、表示,可带小数点或负号。以下记述都合法。 3 -99 0.001 9.456 1.3e-3 4.5e3313(二 )变量命名规则n变量名、函数名是对字母大小写敏感的。qMyvar myvar MyVar My VarqSin SIN sinn变量名的第一个字符必须是英文字母,最多可包含31个字符(英文、数字和下连符)。qmyvar201n变量名中不得包含空格、标点,但可包含下连符。qmy_var_201(对)qmy,var 201(错)14(三)MATLAB默认的预定义变量n每当MATLAB启动时,预定义变量(Predefined variable)就被产生。15建议:建议:不要对预定义变量名
7、重新赋值,以免产生混淆。不要对预定义变量名重新赋值,以免产生混淆。预定义变预定义变量量含义含义预定义变预定义变量量含义含义ans计算结果的缺省变量计算结果的缺省变量名名NaN或或nan不是一个数不是一个数(Not a Number),如如0/0,/eps机器零阀值机器零阀值nargin函数输入宗量数目函数输入宗量数目Inf或或inf无穷大,如无穷大,如1/0nargout函数输入宗量数目函数输入宗量数目i或或j虚单元虚单元i=jrealmax最大正实数最大正实数pi圆周率圆周率realmin最小正实数最小正实数(四 )运算符和表达式n经典教科书上的算术运算符在MATLAB中的表达方式。16数学
8、表达式数学表达式MATLAB运算符运算符MATLAB表达式表达式加加a+b+a+b减减a-b-a-b乘乘a b*a * b除除ab/或或a/b或或ba幂幂ababMATLAB书写表达式的规则:n表达式由变量名、运算符和函数名组成。n表达式将按与常规相同的优先级自左至右执行运算。n优先级的规定是:指数运算级别最高,乘除运算次之,加减运算级别最低。n括号可以改变运算的次序。n书写表达式时,赋值符“=”和运算符两侧允许有空格,以增加可读性。17(五)复数和复数矩阵nMATLAB把复数作为一个整体处理,虚数单位用自定义变量i或j表示。n复数z=a+bi=rei直角坐标表示和极坐标表示之间转换的MATL
9、AB指令如下:real(z) z的实部a=rcosimag(z) z的虚部b=rsinabs(z) z的模r=(a2+b2)angle(z) z的相角=arctg(b/a)nMATLAB的矩阵元素允许是复数、复变量和由它们组成的表达式。18n经典教科书的直角坐标表示法qz1=3+4in采用运算符构成的直角坐标表示法和极坐标表示法qz2=1+2*iqz3=2*exp(i*pi/6)qz=z1*z2/z319指令行中的标点符号名名 称称标标 点点作作 用用空格空格(为机器辨认)用作数组元素分隔符号(为机器辨认)用作数组元素分隔符号逗号逗号,用作要显示计算结果的指令与其后指令的分隔;用作输入量与输入
10、量之间的用作要显示计算结果的指令与其后指令的分隔;用作输入量与输入量之间的分隔符;用作数组元素分隔符号分隔符;用作数组元素分隔符号黑点黑点.用作数值表示中的小数点用作数值表示中的小数点分号分号;用作不显示计算结果指令的用作不显示计算结果指令的“结尾结尾”标志;用作不显示计算结果指令与其后标志;用作不显示计算结果指令与其后指令的分隔;用作数组的行间分隔符;指令的分隔;用作数组的行间分隔符;冒号冒号:用以生成一维数组;用作单下标援引时,表示全部元素构成的长列;用作多用以生成一维数组;用作单下标援引时,表示全部元素构成的长列;用作多下标援引时,表示那维上的全部下标援引时,表示那维上的全部注释号注释号
11、%由它由它“启首启首”后的所有物理行部分被看作非执行的注释后的所有物理行部分被看作非执行的注释单引号对单引号对 字符串记述符字符串记述符圆括号圆括号( )在数组援引时用;函数指令输入宗量列表时用在数组援引时用;函数指令输入宗量列表时用方括号方括号 输入数组时用;函数指令输出宗量列表时用输入数组时用;函数指令输出宗量列表时用花括号花括号 元胞数组记述符元胞数组记述符下连符下连符_(为使人易读)用作一个变量、函数或文件名中的连字符(为使人易读)用作一个变量、函数或文件名中的连字符续行号续行号.由由4个以上连续黑点构成。它把其下的物理行看作该行的个以上连续黑点构成。它把其下的物理行看作该行的“逻辑逻
12、辑”继续,以继续,以构成一个构成一个“较长较长”的完整指令的完整指令“At”号号放在函数名前,形成函数句柄;放在目录名前,形成用户对象类目录放在函数名前,形成函数句柄;放在目录名前,形成用户对象类目录说明说明为保证指令正确执行,以上符号一定要在英文状态下输入。为保证指令正确执行,以上符号一定要在英文状态下输入。20例:na=10*2;b=a+5,c=a*b;d=c+a,nA=1 2 3;4 5 6;7 8 9nB=1,2 34,5,67 8 9nC=1;2;321命令窗口的常用控制指令22指指 令令含含 义义cd设置当前工作目录设置当前工作目录clf清除图形窗清除图形窗clc清除指令窗中显示内
13、容清除指令窗中显示内容clear清除清除MATLAB工作空间中保存的变量工作空间中保存的变量dir列出指定目录下的文件和子目录清单列出指定目录下的文件和子目录清单edit打开打开M文件编辑器文件编辑器exit关闭关闭/退出退出MATLABquit关闭关闭/退出退出MATLABmd创建目录创建目录more使其后的显示内容分页进行使其后的显示内容分页进行type显示指定显示指定M文件的内容文件的内容which指出其后文件所在的目录指出其后文件所在的目录命令窗口中指令行的编辑n为方便操作,MATLAB不但允许用户在指令窗中对输入指令进行各种编辑和运行,而且允许用户对已经输入的指令进行回调、编辑和重运
14、行。23键键 名名作作 用用前寻式调回已输入过的指令行前寻式调回已输入过的指令行后寻式调回已输入过的指令行后寻式调回已输入过的指令行在当前行中左移光标在当前行中左移光标在当前行中右移光标在当前行中右移光标PageUp前寻式翻阅当前窗中的内容前寻式翻阅当前窗中的内容PageDown后寻式翻阅当前窗中的内容后寻式翻阅当前窗中的内容Home使光标移到当前行的首端使光标移到当前行的首端End使光标移到当前行的尾端使光标移到当前行的尾端Delete删去光标右边的字符删去光标右边的字符Backspace删去光标左边的字符删去光标左边的字符Esc清除当前行的全部内容清除当前行的全部内容Workspace B
15、rowser和Array Editor一、Workspace Browser工作空间窗口简介q列出数据的变量信息,包括变量名、变量数组大小(尺寸)、变量字节大小和变量类型。q基本工作空间或简称为工作空间(Workspace)n MATLAB在进行运算时,将变量存储在内存中,这些存储变量的内存空间称为基本工作空间,简称工作空间。q暂时(临时)工作空间:n每当MATLAB在调用执行某一函数时,即进入该函数的暂时工作空间(可视为基本工作空间的下层空间),函数在此空间进行运算,而不影响到基本空间内的变量,当函数执行结束后,MATLAB会同时删除函数的暂时工作空间,并回到基本空间。24二、内存变量查阅、
16、删除的指令操作法q在指令窗中运用who, whos查阅MATLAB内存变量。nwho命令:查看现存于基本空间的变量nwhos命令:详细查看现存于基本空间的变量q在指令窗中运用clear指令可以删除内存(工作空间内)的某一或所有变量n如:clear A , clearall25Command History命令历史窗口n历史指令窗记录着用户在MATLAB指令窗中所输入过的所有指令。n历史记录包括:每次开启MATLAB的时间,每次开启MATLAB后在指令窗中运行过的所有指令。n历史指令窗具有多种应用功能:单行或多行指令的复制和运行、生成M文件等。26Current Directory、路径设置器n
17、Current Directory当前路径窗口简介q一 用户目录和当前目录设置q二 借助当前路径窗口获取M和MAT文件信息 n MATLAB的搜索路径和路径设置器q搜索路径27在matlab提示符下输入x,matlab解释器将按照以下步骤处理:1 检查x是否为一个变量。2 检查x是否为一个内部函数。3检查当前文件夹下是否存在x.dll,x.mex,x.m依次执行。4 检查matlab搜索目录下是否存在x.dll,x.mex,x.m,依次执行 path(c:hello,path);28Editor/Debugger M文件编辑器简介nM文件编辑器不仅可以编辑M文件,而且可以对M文件进行交互式调试
18、;不仅可处理带.m扩展名的文件,而且可阅读和编辑其他ASCII码文件。nM编辑器的启动方法 29M脚本文件编写初步n所谓M脚本文件是指:q该文件中的指令形式和前后位置,与解决同一个问题时在命令窗中输入的那组指令没有任何区别。qMATLAB在运行这个脚本时,只是简单地从文件中读取一条条指令,送到MATLAB中去执行。q与在指令窗中直接运行命令一样,脚本文件运行产生的变量都驻留在MATLAB基本工作空间中。q文件扩展名是“.m”。30M脚本文件编写初步n所谓M脚本文件是指:q该文件中的指令形式和前后位置,与解决同一个问题时在命令窗中输入的那组指令没有任何区别。qMATLAB在运行这个脚本时,只是简
19、单地从文件中读取一条条指令,送到MATLAB中去执行。q与在指令窗中直接运行命令一样,脚本文件运行产生的变量都驻留在MATLAB基本工作空间中。q文件扩展名是“.m”。31帮助系统n帮助方式概述q一 “纯文本”帮助 q二 “导航/浏览器交互界面”帮助q三 PDF帮助q四 其他帮助nHelp Navigator/Browser帮助导航/浏览器简介q一 Contents帮助文件目录窗q二 Index帮助索引窗q三 Search搜索窗q四 Favorites书签窗32思考:一、指令clear,clf,clc各有什么用处?二、在MATLAB指令表达式中,标点符号“空格”和“逗号”各有什么作用?在哪些情
20、况下,两者的作用相同?在哪些情况下,两者的作用不同?举例说明。33MATLAB编程基础 n数据类型、数据结构和函数n数值、比较和逻辑计算n符号计算nM文件脚本和函数nMATLAB绘图34MATLAB编程基础数据类型、数据结构和函数 35nMATLAB定义了数值、字符、逻辑、符号和函数指针等多种数据类型nMATLAB定义了矩阵、数组、单元数组和结构等多种数据结构n函数是MATLAB的基本功能单元,调用方式为 函数名(参数1,参数2,)MATLAB编程基础数值、比较和逻辑计算36数学表达式数学表达式MATLAB运算符运算符MATLAB表达式表达式加加a+b+a+b减减a-b-a-b乘乘a b*a
21、* b除除ab/或或a/b或或ba幂幂ababMATLAB的数值运算的数值运算 MATLAB编程基础数值、比较和逻辑计算37MATLAB中的关系运算符中的关系运算符 运算符运算符说明说明运算符运算符说明说明= =等于等于大于大于=不等于不等于=小于等于小于等于=大于等于大于等于MATLAB编程基础数值、比较和逻辑计算38MATLAB的逻辑运算的逻辑运算 运运 算算 符符说说 明明&具有短路作用的逻辑与操作,仅能处理标量具有短路作用的逻辑与操作,仅能处理标量|具有短路作用的逻辑或操作,仅能处理标量具有短路作用的逻辑或操作,仅能处理标量&元素与操作元素与操作|元素或操作元素或操作逻辑非操作逻辑非操
22、作xor逻辑异或操作逻辑异或操作any当向量中的元素有非零元素时,返回真当向量中的元素有非零元素时,返回真all当向量中的元素都是非零元素时,返回真当向量中的元素都是非零元素时,返回真MATLAB编程基础符号计算n数值法描述信号是工程专业的基础,符号方法描述信数值法描述信号是工程专业的基础,符号方法描述信号的优点:理论性强,简单直观号的优点:理论性强,简单直观n符号变量的定义:符号变量的定义:var = sym(str)或或 syms var1 var2 n符号表达式到数值变量的转换:符号表达式到数值变量的转换:subs(f,x,y) %用用y替换掉表达式替换掉表达式f中中x39MATLAB编
23、程基础 M文件(脚本和函数) nMATLAB使用使用M语言进行编程语言进行编程(解释性语言解释性语言)n M语言文件其文件的扩展名为语言文件其文件的扩展名为.m(脚本和函数)(脚本和函数)n函数主要有两类,函数主要有两类,a内建内建(Build-in)函数,各类工具箱。函数,各类工具箱。b自己开发的函数(文件名为自己开发的函数(文件名为*.m或或*.mex)n运行运行meditor的方法:的方法: edit 或或“File”菜单中菜单中“New”子菜子菜单单40脚本文件n脚本文件是指:q该文件中的指令形式和前后位置,与解决同一个问题时在命令窗中输入的那组指令没有任何区别。qMATLAB在运行这
24、个脚本时,只是简单地从文件中读取一条条指令,送到MATLAB中去执行。q与在指令窗中直接运行命令一样,脚本文件运行产生的变量都驻留在MATLAB基本工作空间中。q文件扩展名是“.m”。4142meditor的运行界面的运行界面 流 程 控 制 n选择结构选择结构 当人们判断某一条件是否满足,根据判断的结果来选择不同的解决问题的方法时,就需要使用选择结构。和C语言类似,MATLAB的条件判断可以使用if语句或者switch 语句。 n循环结构循环结构 在解决很多问题的时候需要使用循环结构,例如求解数列的和或者进行某种迭代法求解数值方程时,都需要循环结构配合完成计算。 在MATLAB中包含两种循环
25、结构,一种是循环次数不确定的while循环,而另一种是循环次数确定的for循环。 43提高运算性能nM语言和其他的高级语言不同,由于采用了解释型语言,所以M语言的执行效率肯定低于编译型语言(例如C语言)。然而,随着MATLAB版本的不断升级,再加之合理利用MATLAB向量运算等特点可以较大幅度地提高M语言代码的执行效率。在本小节结合一些具体的例子来讲述M语言编程以及MATLAB软件本身在提高程序执行效率方面的一些特性。 4445 1向量化运算向量化运算 首先,希望牢记这样一点,MATLAB最初的目的是提供便利的矩阵数据操作能力。所以在大多数的应用程序中,不要使用循环结构操作矩阵的元素,应直接使
26、用矩阵元素的索引或者矩阵运算的函数,这样做不仅能够提高代码的执行效率,而且还能够提高程序的可读性,这就是所谓的向量化的运算,也就是说,尽量将使用while循环或者for循环的语句结构转换成等价的向量或者矩阵运算,以提高程序的运算速度。 46例子例子 向量化运算向量化运算array_vs_loops.m。001Mass = rand(5,10000);002Length = rand(5,10000);003Width = rand(5,10000);004Height = rand(5,10000);005006rows, cols = size(Mass);007008disp(char(1
27、0), 使用数组运算:)%char(10) 回车009tic %t1=cputime010Density = Mass./(Length.*Width.*Height);011toc %t2=cputime012013disp(char(10), 使用循环结构:)%sprintf(%sn,使用吗,sd)014tic;015for I = 1:rows016 for J = 1:cols017 Density(I) = Mass(I,J)/(Length(I,J)*Width(I,J)*Height(I,J);018 end019end020toc 例子比较了循环结构和数组运算的执行效率,程序中
28、分别在010行使用数组运算和在015019行使用循环结构完成了同样的工作。程序的运行结果如下:程序的运行结果如下: array_vs_loops使用数组运算:elapsed_time = 0使用循环结构:elapsed_time = 0.0100 47 2预分配存储空间预分配存储空间 另外一种能够提高运算效率的方法就是进行内存变量存储空间的预分配,首先察看例子。 例子例子 内存预分配的例子内存预分配的例子 pre_allocate.m。001 disp(char(10), 使用内存预分配:)002 pre_allo = zeros(10000,1); 003 tic;004 for I = 1
29、:10000005 pre_allo(I) = rand(1); 006 end 007toc008009disp(char(10), 不使用内存预分配:)010tic;011for J = 1:10000012 not_pre_allo(J) = rand(1); 013end014toc 例子的执行结果如下:例子的执行结果如下: pre_allocate使用内存预分配:elapsed_time = 0.0900不使用内存预分配:elapsed_time = 0.3410 48 上面两种不同的运算惟一的区别就是程序002行,执行这行语句之后,MATLAB自动分配了10 000个连续的内存空间
30、用于存储数据,MATLAB将一次创建足够的存储空间,然后依次赋值。而后者not_pre_alloc变量没有进行相应的操作,所以带来了两次运算结果的不同。 在不使用内存预分配的运算中,MATLAB是如何进行操作的呢? 当I=1时,MATLAB将使用一小块长度为一个单元大小的内存保存一位随机数。 当I=2时,MATLAB寻找一块两单元大小的内存区,一个单元放第一个随机数,第二个放另外一个随机数。 当I = 10000 时,MATLAB 寻找一块容纳10000单元的内存区存放以前的9999个随机数,同时把最新的一个随机数加入进去。代码运行的结果造成了存储空间的浪费,降低了程序的执行速度。 所以,在编
31、写M语言程序的时候需要尽量使用内存的预分配,而少使用或者不使用数组内存空间的自动扩充方式。 M 文 件 调 试 nM语言文件的编辑器meditor不仅仅是一个文件编辑器,同时还是一个可视化的调试开发环境。在M文件编辑器中可以对M脚本文件、函数文件进行调试,以排查程序的错误。M文件的调试不仅可以在文件编辑器中进行,而且还可以在命令行中结合具体的命令进行,但是过程相对麻烦一些,所以重点讲述在M文件编辑器中进行可视化调试的过程。n一般地来说,应用程序的错误有两类,一类是语法错误,另外一类是运行时的错误。其中,语法错误包括了词法或者文法的错误,例如函数名称的拼写错误等。而运行时的错误是指那些程序运行过
32、程中得到的结果不是用户需要的情况。但是,由于M文件是一种解释型语言,语法错误和运行时的错误都只有在运行过程中才能发现,所以程序的调试往往是在程序无法得到正确结果时进行程序修正的惟一手段。 49 M语言的断点( Breakpoints ) 为了能够有效地处理各种情况,M语言的断点类型除了类似C语言的用户定义的断点外,还有几种自动断点,分别为* Stop if Error。* Stop if Warning。* Stop if NaN or Inf。* Stop if All Errors。 这些自动断点可以在程序中设置,当程序运行过程中发生了错误或者警告,则程序运行中断,进入调试状态50M文件编
33、辑器的Breakpoints菜单 51调试程序的按钮 52函 数 文 件 nM函数文件和脚本文件不同,函数文件不仅有自己特殊的文件格式,不同的函数还分别具有自己的工作空间。n同其他高级语言类似,M函数文件也有局部变量和全局变量。5354例子例子 函数文件示例average.m。001function y = average(x)002% AVERAGE 求向量元素的均值003% 语法:004% Y = average(X)005% 其中,X 是向量,Y为计算得到向量元素的均值006% 若输入参数为非向量则出错007008009m,n = size(x);010% 判断输入参数是否为向量 011
34、if (m = 1) | (n = 1) | (m = 1 & n = 1)012 % 若输入参数不是向量,则出错013 error(Input must be a vector)014end015% 计算向量元素的均值016y = sum(x)/length(x); 在MATLAB命令行中,键入下面的指令运行例子的代码: z = 1:99; y = average(z)y = 50函数文件基本结构* 函数定义行* 在线帮助* 注释行* M语言代码 55例子例子 函数文件示例average.m。001function y = average(x)002% AVERAGE 求向量元素的均值003
35、% 语法:004% Y = average(X)005% 其中,X 是向量,Y为计算得到向量元素的均值006% 若输入参数为非向量则出错007008009m,n = size(x);010% 判断输入参数是否为向量 011if (m = 1) | (n = 1) | (m = 1 & n = 1)012% 若输入参数不是向量,则出错013 error(Input must be a vector)014end015% 计算向量元素的均值016y = sum(x)/length(x); 函数定义行n 这一行代码中包括关键字function、函数输出参数y、函数的名称average和函数的输入参数
36、x。需要注意的是函数的名称,函数的名称定义要求必须以字符开头,后面可以用字符、数字和下划线的组合构成函数名称。MATLAB对函数名称的长度有限定,读者可以在自己的MATLAB中,通过执行namelengthmax函数获取相应的数值。假设该函数返回的数值为N,若函数的名称长度超过了N,则MATLAB使用函数名称的前N个字符作为函数名称。n一般推荐将函数名称用小写的英文字符表示,同时函数的同时函数的M文件名文件名称最好和函数名称保持一致称最好和函数名称保持一致,若文件名称和函数名称不一致,则若文件名称和函数名称不一致,则调用函数的时候需要使用文件名称而非函数名称。调用函数的时候需要使用文件名称而非
37、函数名称。 56函数注释行n M函数文件的在线帮助为紧随在函数定义行的注释行。在例子中,average函数的在线帮助为002006行的注释行。若在MATLAB命令行中键入下面的指令:q help average(average是文件名)q在MATLAB的命令窗口中就会出现:57AVERAGE 求向量元素的均值语法:Y = average(X)其中,X是向量,Y为计算得到向量元素的均值若输入参数为非向量则出错 58 其中,在线帮助中比较重要而且特殊的是在线帮助的第一行,在MATLAB中将这行注释称为H1帮助行,它是在线帮助的第一行,若使用lookfor函数查询函数时,仅查询并显示函数的H1帮助行
38、,例如,在MATLAB命令行中键入下面的指令: lookfor average在MATLAB的命令窗口中就会出现:AVERAGE 求向量元素的均值MEAN Average or mean value. 由于H1帮助行的特殊作用,所以在用户自己定义M函数文件时,一定要编写相应的H1帮助行,对函数进行简明、扼要的说明或者解释。 例子的010、012、015行代码分别是程序具体的注释行,这些注释行不会显示在在线帮助中,主要原因就是这些注释行没有紧随在H1帮助行的后面,从010行开始一直到文件的结尾都是M函数文件的代码行,这些代码行需要完成具体的算法,实现用户的具体功能。代码行就是用户开发的算法M语言
39、的实现。子函数和私有函数n同一个M函数文件中可以包含多个函数。如果在同一个M函数文件中包含了多个函数,那么将出现在文件中的第一个M函数称为主函数(primary function),其余的函数称为子函数(subfunction)。nM函数文件的名称一般与主函数的名称保持一致,其他函数都必须按照函数的基本结构来书写,每一个函数的开始都是函数定义行,函数的结尾是另一个函数的定义行的开始或者整个M文件的结尾(最后一个子函数的结尾就是文件结束符)。不过,子函数不像主函数,一般子函数没有在线帮助,子函数的作用范围有限,它只能被那些在定义子函数的M文件中定义的函数(包括主函数和其他子函数)调用,不能被其他
40、M文件定义的函数调用。 59私有函数n 在MATLAB中有一类函数被称为私有函数,这类函数被放置在名称为private的子目录中。每一个函数文件都是标准的M语言函数文件,没有特殊的关键字。但是,这些函数仅能被那些位于private子目录的上一层目录中的函数调用。例如,假设在MATLAB的搜索路径中包含路径ProjectA ,那么所有位于 ProjectAprivate路径下的函数,只能在其上一层路径 ProjectA中的函数文件中调用。由于私有函数作用范围的特殊性,不同父路径下的私有函数可以使用相同的函数名。由于MATLAB搜索函数时优先搜索私有函数,所以如果同时存在私有函数名func1.m和
41、非私有函数名func1.m,则私有函数func1.m被优先执行。 n 创建私有函数的方法非常简单,只要将那些需要设置为私有的函数都拷贝到一个private子目录中,则这些函数就能被那些位于父层目录中的M函数调用了。 60私有函数和子函数比较 61局部变量和全局变量(1)n同C语言类似,在M语言函数中也存在局部变量和全局变量。n所谓局部变量,就是那些在M函数内部声明并使用的变量。这些变量仅能在函数调用执行期间被使用,一旦函数结束运行,则这些变量占用的内存空间将自动被释放,变量的数值也就不存在了。这是由于MATLAB的解释器在解释执行函数的时候,为不同的函数创建不同的工作空间,函数彼此的工作空间相
42、互独立,一旦函数执行完毕,则函数的工作空间就不存在了。62局部变量和全局变量(2)n使用全局变量时,需要小心留意,因为全局变量可以在任何的函数中进行读写,这样,可能在比较复杂的程序中查找全局变量错误的时候就非常的麻烦。global xyz;%声明全局变量xyz10;63 局部变量和全局变量(3)在MATLAB中还有一类变量被声明为persistent,本书将其称之为保留变量,这类变量类似于C语言函数中被声明为static类型的变量。这类变量在函数退出的时候不被释放,当函数再一次被调用的时候,这些变量保留上次函数退出时的数值。被声明为persistent的变量具有以下特征:* 变量仅能在声明变量
43、的函数内使用,其他函数不能直接使用这些变量。* 函数执行退出后,MATLAB不清除这些变量占用的内存。* 当函数被清除或者重新编辑后,保留的变量被清除。 64MATLAB编程基础 MATLAB绘图nMATLAB基本绘图基本绘图plot,stem,subplot,ezplot,hold on n交互式绘图交互式绘图65小 结nMATLAB提供了一种高级编程语言M语言,这种语言的语法结构与C语言非常类似,任何熟悉C语言的用户学习使用M语言都不会有任何障碍。n尽管M语言是一种解释性的编程语言,但是随着MATLAB版本的不断升级,以及充分利用MATLAB提供的各种编程技巧,能够有效提高M语言应用程序的执行效率,使M语言成为了工程领域中最适合进行算法开发验证的编程语言。 66MATLAB基础编程n谱分析谱分析n系统分析系统分析n滤波器设计滤波器设计 数字信号处理软件方法数字信号处理软件方法MATLAB基础练习基础练习.doc