Matlab程序设计与提高.ppt_第1页
Matlab程序设计与提高.ppt_第2页
Matlab程序设计与提高.ppt_第3页
Matlab程序设计与提高.ppt_第4页
Matlab程序设计与提高.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

入门与提高 MATLAB TheLanguageofTechnicalComputing 7 文件操作 3 MATLAB的程序结构和控制流 5 面向对象编程 2 函数调用和参数传递 4 辅助函数 1 脚本文件和函数文件 6 M文件的调试 程序设计 利用Maltab的程序设计语言 你可以将很多的Matlab语句写到一个文件中用一个命令来运行 这种文件一般我们以 m结尾 从而使她成为Matlab所识别的一个新命令 KindsofM Files TherearetwokindsofM files 1 脚本文件和函数文件 1 1M脚本文件 对于一些比较简单的问题 在指令窗中直接输入指令计算 对于复杂计算 采用脚本文件 Scriptfile 最为合适 MATLAB只是按文件所写的指令执行 M文件有两种形式 脚本文件 ScriptFile 和函数文件 FunctionFile 这两种文件的扩展名 均为 m M脚本文件的特点是 脚本文件的构成比较简单 只是一串按用户意图排列而成的 包括控制流向指令在内的 MATLAB指令集合 脚本文件运行后 所产生的所有变量都驻留在MATLAB基本工作空间 Baseworkspace 中 只要用户不使用清除指令 clear MATLAB指令窗不关闭 这些变量将一直保存在基本工作空间中 与脚本文件不同 函数文件犹如一个 黑箱 把一些数据送进并经加工处理 再把结果送出来 MATLAB提供的函数指令大部分都是由函数文件定义的 1 2M函数文件 M函数文件的特点是 从形式上看 与脚本文件不同 函数文件的笫一行总是以 function 引导的 函数申明行 从运行上看 与脚本文件运行不同 每当函数文件运行 MATLAB就会专门为它开辟一个临时工作空间 称为函数工作空间 Functionworkspace 当执行文件最后一条指令时 就结束该函数文件的运行 同时该临时函数空间及其所有的中间变量就立即被清除 MATLAB允许使用比 标称数目 较少的输入输出宗量 实现对函数的调用 1 3M文件的一般结构 由于从结构上看 脚本文件只是比函数文件少一个 函数申明行 所以只须描述清楚函数文件的结构 典型M函数文件的结构如下 函数申明行 位于函数文件的首行 以关键字function开头 函数名以及函数的输入输出宗量都在这一行被定义 笫一注释行 紧随函数申明行之后以 开头笫一注释行 该行供lookfor关键词查询和help在线帮助使用 在线帮助文本区 笫一注释行及其之后的连续以 开头的所有注释行构成整个在线帮助文本 编写和修改记录 与在线帮助文本区相隔一个 空 行 也以 开头 标志编写及修改该M文件的作者和日期等 函数体 为清晰起见 它与前面的注释以 空 行相隔 小提示 要养成良好的注释习惯 以方便自己或其他用户的调用 2函数调用和参数传递 2 1局部变量和全局变量 局部 Local 变量 它存在于函数空间内部的中间变量 产生于该函数的运行过程中 其影响范围也仅限于该函数本身 全局 Global 变量 通过global指令 MATLAB也允许几个不同的函数空间以及基本工作空间共享同一个变量 这种被共享的变量称为全局变量 注 1 在任何地方使用全局变量的函数中 都需事前对全局变量作定义 在命令窗口也不例外 2 一般来说尽量不要使用全局变量 2 2函数调用 在MATLAB中 调用函数的常用形式是 输出参数1 输出参数2 函数名 输入参数1 输入参数2 函数调用可以嵌套 一个函数可以调用别的函数 甚至调用它自己 递归调用 Function后的语句定义函数名和输入输出参数 在函数被调用过程中将按此输入输入格式执行 注 文件名与函数名必须一一对应 这样才能保证调用成功 如果函数名和文件名不一致时以文件名为准 2 3参数传递 MATLAB在函数调用上有一个与众不同之处 函数所传递的参数具有可调性 传递参数数目的可调性来源于如下两个MATLAB永久变量 函数体内的nargin给出调用该函数时的输入参数数目 函数体内的nargout给出调用该函数时的输出参数数目 值得注意 nargin nargout本身都是函数 不是变量 所以用户不能赋值 也不能显示 变长度 输入输出宗量 varargin varrgout 具有接受 任意多输入 返回 任意多输出 的能力 跨空间变量传递 evalin 只要在函数文件中包括这两个变量 就可以知道该函数文件调用时的输入参数和输出参数数目 参考 circle m am1 m 2 4子函数与局部函数 函数文件中开头定义的函数为主函数 而在函数体内定义的其他函数均被视为子函数 子函数只能被住函数或同一主函数下的其他子函数所调用 子函数示例 Functionc test a b C test1 a b test2 a b Functionc test1 a b C a b Funtionc test2 a b C a b Matlab语言中把放置在目录private下的函数称为局部函数 这些函数只有private目录的父目录中的函数才可以调用 而子函数则只能被其所在M文件的主函数所调用 所以 局部函数在可用范围上大于子函数 注 Matlab的M文件调用函数时 将首先检测该函数是否为此文件的子函数 如果不是的话 再检测是否为可用的局部函数 仍然为否定结果时 再检测该函数是否为Matlab搜索路径上的的其他M文件 3 MATLAB的程序结构和控制流 3 1程序结构 循环结构 MATLAB提供两种循环方式 顺序结构 分支结构 if else end for end循环和while end循环 switch case结构 try catch结构 1 for循环 for循环的特点是 它的循环判断条件通常是对循环次数的判断 也就是说它的循环次数时可以预定的 例 N 10 forI 1 N forJ 1 N A I J 1 I J 1 endend for的引用格式 FORvariable expr statement statementEND WHILEexpressionstatementsEND 2 while循环 while的引用格式 while循环的特点是 它的循环判断条件是一个逻辑判断语句 因此它的适用范围会更广一些 其实 for语句可以用while语句来完成 但反过来就不行 如 fori 1 n end用while表达时whilei n 1 end 3 ifelse选择 if的引用格式 复杂的计算常常需要根据表达式的情况是否满足来确定下一步该做什么 Matlab提供了if else end语句来进行判断选择 IFexpressionstatementsELSEIFexpressionstatementsELSEstatementsEND 判断表达使紧跟在关键字if后面 使得它可以首先被计算 判断表达式的计算结果 结果为 判断为假 结果为 判断为真 若判断值为真 则执行其后的判断语句 否则跳过 不予执行 Matlab的if语句和其他的程序设计语言的选择语句一样 分三步执行 说明 else语句可以是复合语句或其他控制语句if必须与else必须一一对应 ifI JA I J 2 elseifabs I J 1A I J 1 elseA I J 0 end 4 switch分支选择 switch的引用格式 SWITCHswitch exprCASEcase expr statement statementCASE case expr1 case expr2 case expr3 statement statement OTHERWISE statement statementEND 注 在执行时 只执行一个case后面的命令并跳出开关 method Bilinear switchlower METHOD case linear bilinear disp Methodislinear case cubic disp Methodiscubic case nearest disp Methodisnearest otherwisedisp Unknownmethod end结果Methodislinear 常用指令 return echo input pause keyboard break 警示指令 error warning 4 辅助函数 4 1 人机交互语句 1 echo命令 Echo命令可以使文件命令在执行时可见 这对程序的调试和演示很有用 2 用户输入提示命令input yesinput 3 请求键盘输入命令keyboard 4 等待用户反应命令pause 5 中断命令break 4 2 其它辅助函数 1 执行函数 2 容错函数 error warnling Displaymessageandabortfunction Displaywarningmessage 3 时间函数 Tic toc TICStartastopwatchtimer ThesequenceofcommandsTIC operation TOCprintsthenumberofsecondsrequiredfortheoperation CPUTIMECPUtimeinseconds CPUTIMEreturnstheCPUtimeinsecondsthathasbeenusedbytheMATLABprocesssinceMATLABstarted Forexample t cputime your operation cputime treturnsthecputimeusedtorunyour operation cputime 5 面向对象编程 图形用户界面 GUI 编程 现代的主流应用程序已经从命令行的交互方式转变为以图形界面为主的交互方式 这主要是由于它给用户带来了操作和控制的方便与灵活性 面向对象编程 MATLAB能够以比较简单的方式实现一系列的图形界面功能 通过对控件 菜单属性的设置和Callback的编写 就能够满足大多数用户的需求 控件的Callback属性 Callback属性的取值是字符串 可以是某个M文件名或一小段MATLAB语句 当用户激活控件对象 例如 在控件对象图标上单击鼠标左键 时 应用程序就运行Callback属性定义的子程序 菜单的Callback属性 Callback属性的取值是字符串 可以是某个M文件名或一小段MATLAB语句 当用户激活菜单对象时 若没有子菜单就运行Callback属性定义的子程序 若有 先运行Callback属性定义的子程序 再显示子菜单 6 M文件的调试 编写M文件时 错误 Bug 在所难免 错误有两种 语法 Syntax 错误和运行 Run time 错误 语法错误是指变量名 函数名的误写 标点符号的缺 漏等 对于这类错误 通常能在运行时发现 终止执行 并给出相应的错误原因以及所在行号 运行错误是算法本身引起的 发生在运行过程中 相对语法错误而言 运行错误较难处理 尤其是M函数文件 它一旦运行停止 其中间变量被删除一空 错误很难查找 有两种调试方法 直接调试法和工具调试法 直接调试法 可以用下面方法发现某些运行错误 在M文件中 将某些语句后面的分号去掉 迫使M文件输出一些中间计算结果 以便发现可能的错误 在适当的位置 添加显示某些关键变量值的语句 包括使用disp在内 利用echo指令 使运行时在屏幕上逐行显示文件内容 echoon能显示M脚本文件 echoFunNsmeon能显示名为FunNsme的M函数文件 在原M脚本或函数文件的适当位置 增添指令keyboard keyboard语句可以设置程序的断点 通过将原M函数文件的函数申明行注释掉 可使一个中间变量难于观察的M函数文件变为一个所有变量都保留在基本工作空间中的M脚本文件 1 打开文件 fid fopen filename permission permission指打开文件的模式 可以为 r 打开文件读 r 打开文件读写 w 删除已经存在的文件内容或建立一个新文件 并打开文件写 w 删除已经存在的文件内容或建立一个新文件 并打开文件读写 a 建立并打一个新文件或打开一个已经存在的文件写 在文件的结尾处添加内容 a 建立并打一个新文件或打开一个已经存在的文件读写 在文件的结尾处添加内容 7 文件操作 2 格式读写文件函数fscanf和fprintf 1 fscanf fscanf的调用格式为 A count fscanf fid format size 从文件指针fid指向的文件中读取数据并返回给矩阵A count为成功读取数据的个数 参数size有以下几种取值方式 n 读n个数据到一个列向量 inf 一直读到文件结尾 读出的数据放到一个列向量中 m n 读出的数据等于一个mxn的矩阵的元素总数 读出的数据按列的顺序填充矩阵 其中n可以是inf 表示读到文件结尾 而m不可以 参数format指定读取数据格式 format与C语言的格式字符串基本相同 有 c d e f g i o s u x等 一个例子 fid fopen edge result dat r nodenumber count fscanf fid d 1 gridnumber co

温馨提示

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

评论

0/150

提交评论