MATLAB语言程序设计.ppt_第1页
MATLAB语言程序设计.ppt_第2页
MATLAB语言程序设计.ppt_第3页
MATLAB语言程序设计.ppt_第4页
MATLAB语言程序设计.ppt_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

电子发烧友电子技术论坛 MATLAB程序语言设计 应自炉五邑大学信息学院2007年 ziluy ziluy 电子发烧友电子技术论坛 第六讲MATLAB语言程序设计 6 1MATLAB语言的函数的基本结构6 2全局 局部变量 子函数与私有目录6 3MATLAB函数的跟踪调试6 4MATLAB工具箱编写技巧6 5MATLAB语言的程序流程语句6 6MATLAB中新的数据结构6 7MATLAB语言编程技巧6 8例子与习题 电子发烧友电子技术论坛 6 1MATLAB语言函数的基本结构 MATLAB语言提供了两种源程序文件格式 M脚本文件 它实际上是MATLAB命令窗中一系列命令的组合 它没有输入输出参数传递的过程 它直接对工作区中的变量进行处理操作 M函数 这是MATLAB程序设计的主流 它可以传递参数及返回结果 我们主要介绍M函数的编写方法与技巧 电子发烧友电子技术论坛 6 1MATLAB语言函数的基本结构 M函数是由function语句引导的 其基本格式如下 function 返回变量列表 函数名 输入变量列表 由该符号引导的注释语句段 在MATLAB命令窗 中用命令help函数名所得到的帮助就是这段文字 输入 返回变量格式的检测函数体语句 只要进入该函数 MATLAB就自动生成nargin和nargout两个变量 分别表示输入变量和输出变量的个数 程序中可以根据这两个变量的值来判断用户输入参数的情况 电子发烧友电子技术论坛 6 1MATLAB语言函数的基本结构 M函数典型例子 function magout phase w bode a b c d iu w BODEBodefrequencyresponseofLTImodels BODE SYS drawstheBodeplotoftheLTImodelSYS createdwith eitherTF ZPK SS orFRD Thefrequencyrangeandnumberof pointsarechosenautomatically SeealsoBODEMAG NICHOLS NYQUIST SIGMAni nargin no nargout endbode 电子发烧友电子技术论坛 6 1MATLAB语言函数的基本结构 说明 注释符号 引导的内容不能含空行 否则 后续的内容不能由help命令看到 大部分作者及版权信息都是空行后的注释内容 当返回变量只有一个时 不用方框号 括起来 函数名与该函数存盘用的文件名要一样 否则MATLAB寻找的是文件名符合的函数 而且老版本的MATLAB不能用超过8个字符的函数名 电子发烧友电子技术论坛 6 1MATLAB语言函数的基本结构 说明 续 可以用type函数名来看函数文件的内容 可以用edit函数名来查看或编辑函数文件 为了使得MATLAB认识该函数 要将该函数所在的目录用cd命令设为当前目录 或用命令addpath添加到MATLAB的路径中去 也可以用MATLAB菜单下的PATH命令 电子发烧友电子技术论坛 6 2全局 局部变量 子函数与私有目录 MATLAB工作区中的变量和M函数内部的变量都是局部变量 他们是互不干扰的 但也可以显性地把变量定义为全局变量 使得他们在整个程序中都起作用 全局变量定义格式为globalabcd注意变量之间不能用逗号分开 在MATLAB工作区和M函数内部同时要声明该变量为全局变量 为保证函数的独立性 一般情况下不建议使用全局变量 电子发烧友电子技术论坛 6 2全局 局部变量 子函数与私有目录 从MATLAB5 0开始引入子函数 所谓子函数就是一个函数文件中不但包含该函数本身 还包含专门由该函数调用的下一级函数 这样的专门函数称为子函数 子函数是不能有其他文件中的函数调用的 私有目录即在当前的MATLAB目录下建立一个private子目录 该目录下的内容只能由当前目录下的函数调用 而不能有其他函数调用 电子发烧友电子技术论坛 6 3MATLAB函数的跟踪调试 用MATLAB自带的编辑器EDIT编辑所要跟踪调试的程序 在希望的语句上设置断点 在MATLAB命令窗按正常方式运行命令 程序会自动停留在所设的断点处 调试状态下 MATLAB命令窗的命令提示符变为K 这时可输入任何MATLAB命令 变量为函数内部的局部变量 而不是工作区中的变量 调试状态下 鼠标指针指向想查询的局部变量上将立即能显示出该变量值 电子发烧友电子技术论坛 6 3MATLAB函数的跟踪调试 跟踪调试程序中Debug菜单下的子菜单项的功能如下表 电子发烧友电子技术论坛 6 4MATLAB工具箱编写技巧 将为某种专门目的编写一组MATLAB函数放在一个目录下 就形成了一个新的工具箱 为了使得用户能象MATLAB提供的工具箱一样使用该工具箱 必须将该工具箱所在的目录用命令addpath添加到MATLAB的搜索路径中去 为了能使得命令help工具箱名能列出该工具箱的所有函数的功能介绍 应该按下述格式编写一个名为contents m的文件 第一行给出工具箱名称 第二行给出版本信息 由命令ver工具箱名可以获得该工具箱的版本信息 一般在该工具箱下还有一文件readme m用来存放有关该工具箱的版本升级信息 使用命令whatsnew工具箱名查看的就是该文件的信息 电子发烧友电子技术论坛 6 4MATLAB工具箱编写技巧 typecontents m SymbolicMathToolbox Version2 1 2 R12 1 11 Sep 2000 NewFeatures Readme Overviewofthenewfeaturesin changesmadeto theSymbolicandExtendedSymbolicMathToolboxes Calculus diff Differentiate LinearAlgebra poly Characteristicpolynomial Simplification simplify Simplify SolutionofEquations solve Symbolicsolutionofalgebraicequations VariablePrecisionArithmetic vpa Variableprecisionarithmetic 电子发烧友电子技术论坛 6 5MATLAB语言的程序流程语句 MATLAB提供了循环语句结构 条件语句结构 开关语句结构以及试探语句 for循环变量 s1 s2 s3循环体语句组end 循环语句结构 for循环变量 Vector循环体语句组end 电子发烧友电子技术论坛 6 5MATLAB语言的程序流程语句 例一 t 0 fori 1 1 100 t t i end 循环语句结构 例二 w 0 1 0 05 1 1 5 0 5 10 15 5 100 150 50 1000 a 01 1 2 b 0 1 c 12 d 0 m I eye size A fori w m m C inv sqrt 1 I I A B D end 电子发烧友电子技术论坛 6 5MATLAB语言的程序流程语句 条件语句结构 if条件式1条件块语句组1else条件块语句组2end if条件式1条件块语句组1elseif条件式2条件块语句组2 else条件块语句组n 1end 电子发烧友电子技术论坛 6 5MATLAB语言的程序流程语句 条件语句结构 例一ifa 0a 1 elsea 1 end 例二ifa 0a 1elseifa 0a 1elsea 0end 电子发烧友电子技术论坛 6 5MATLAB语言的程序流程语句 开关结构 switch开关表达式case表达式1语句段1case 表达式2 表达式3 表达式m 语句段2 otherwise语句段nend 电子发烧友电子技术论坛 6 6MATLAB中新的数据结构 数据结构体struct 从5 0版本开始 MATLAB提供了几种新的数据结构类型 他们是数据结构体struct 类class和单元结构cell 与C语言不同 MATLAB中数据结构类型的变量不用定义一个结构体先 直接用就可以 如下例 student rec number 1 student rec name Ying student rec height 165 student rec test 100 80 75 77 60 92 67 28 80 100 89 78 student recstudent rec number 1name Ying height 165test 4x3double 电子发烧友电子技术论坛 6 6MATLAB中新的数据结构 数据结构体struct 引用成员变量 student rec testans 10080757760926728801008978 建立结构体类型的数组 b 50 2 struct student rec b 50 x2structarraywithfields numbernameheighttest 电子发烧友电子技术论坛 6 6MATLAB中新的数据结构 数据结构体struct 修改结构数值元素的取值 增加结构体成员 b 43 2 number 50 43 b 43 2 name Gan b 43 2 height 156 b 43 2 test 83 80 78 97 80 62 90 20 30 30 20 80 b 1 1 weight 90b 50 x2structarraywithfields numbernameheighttestweight 删除结构体成员 b rmfield b weight b 50 x2structarraywithfields numbernameheighttest 电子发烧友电子技术论坛 6 6MATLAB中新的数据结构 类class 类不但包含成员变量 还包含成员函数 我们通过一个例子来介绍类的构造 下面建立多项式类 首先选定一个类的名字 如多项式类我们选为polynom 以这个名字在当前目录下建立一个子目录 而且要加符号 即建立子目录 polynom 该目录无需在MATLAB路径下再指定 电子发烧友电子技术论坛 6 6MATLAB中新的数据结构 polynom类的数据结构 多项式类只包含一个数据成员即p c 它即是多项式系数 幂次从高到底 该成员变量只能被 polynom目录下的成员函数访问 polynom类的成员函数 构造函数polynom m多项式到双精度数的转换函数多项式到字符串的转换函数显示函数Asubsrefmethod重载运算符 和 重载函数roots polyval plot 和diff 电子发烧友电子技术论坛 functionp polynom a POLYNOMPolynomialclassconstructor p POLYNOM v createsapolynomialobjectfromthevectorv containingthecoefficientsofdescendingpowersofx ifnargin 0p c p class p polynom elseifisa a polynom p a elsep c a p class p polynom end 6 6MATLAB中新的数据结构 polynom类的构造函数polynom m p polynom 10 2 5 p polynomobject 1 by 1 电子发烧友电子技术论坛 6 6MATLAB中新的数据结构 functionc double p POLYNOM DOUBLEConvertpolynomobjecttocoefficientvector c DOUBLE p convertsapolynomialobjecttothevectorc containingthecoefficientsofdescendingpowersofx c p c polynom类的转换函数double m functiondisplay p POLYNOM DISPLAYCommandwindowdisplayofapolynomdisp disp inputname 1 disp disp char p disp polynom类的显示函数display m double p ans 10 2 5 display p p x 3 2 x 5 电子发烧友电子技术论坛 6 6MATLAB中新的数据结构 functionr plus p q POLYNOM PLUSImplementp qforpolynoms p polynom p q polynom q k length q c length p c r polynom zeros 1 k p c zeros 1 k q c polynom类重载 运算符plus m functionr mtimes p q POLYNOM MTIMESImplementp qforpolynoms p polynom p q polynom q r polynom conv p c q c polynom类重载 运算符mtimes m 电子发烧友电子技术论坛 6 6MATLAB中新的数据结构 单元结构cell 单元结构类似于数组 但单元结构中各元素可以是不同属性的数据 见下例 访问单元数据要用带有大括号下标的形式 不能用圆括号 可以使用celldisp函数来直接显示整个单元 删除第n个单元元素用下面命令 a n 注意用圆括号 a 1 Ying 180 magic 3 a 1 Ying 180 3x3double a 4 ans 816357492 电子发烧友电子技术论坛 6 6MATLAB中新的数据结构 单元结构cell应用 varargin表示输入变量列表 是一个单元结构变量varargout表示输出变量列表 是一个单元结构变量 functiona convs varargin a varargin 1 fori 2 length varargin a conv a varargin i end p 12405 q 12 f 123 g convs p q f 11 13 14 g 1115617637657867864852731590 电子发烧友电子技术论坛 6 7MATLAB语言编程技巧 MATLAB运行机制 MATLAB语言在函数调用中或文件执行时 如果遇到了某一个名字 则按照下面的优先级顺序对这个名字进行判定 判定这个名字是否为变量名判定这个名字是否为本函数内部的子函数判定这个名字是否为本目录下的私有目录内函数判定这个名字是否为MATLAB的内在函数名判定这个名字是否为MATLAB路径下的Mex型文件判定这个名字是否为MATLAB路径下的M函数 MATLAB搜索路径的顺序是按照其路径设定文件pathdef m中的先后次序来进行的 电子发烧友电子技术论坛 6 7MATLAB语言编程技巧 MATLAB运行机制 用户可以用命令exist来查询当前的工作区下是否存在一个名字 其调用格式为 i exist 字符串 例如i exist A i 1 则表示当前工作区下存在变量Ai 2 则表示MALTAB工作路径下存在文件A mi 3 则表示MATLAB工作路径下存在文件A dlli 4 则表示表示存在Simulink文件

温馨提示

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

评论

0/150

提交评论