




已阅读5页,还剩130页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 4章 M脚本与 M函数 第 4章 M脚本与 M函数 4.1 使用 M文件编程4.2 M函数4.3 函数的调用与函数句柄4.4 函数编程的实例第 4章 M脚本与 M函数 4.1 使用 M文件编程 4.1.1 M文件的结构1函数 M文件一个函数 M文件与脚本文件类似,它们都是一个扩展名为 “.m”的文本文件。同脚本 M文件一样,函数 M文件不进入命令窗口,而是由文本编辑器所创建的外部文本文件。函数M文件不是独立执行的文件,它接受输入参数、提供输出参数,只能被程序调用。一个 函数 M文件通常包含以下部分: 函数定义语句; H1帮助行; 帮助文本; 函数体或者脚本文件语句; 注释语句。 第 4章 M脚本与 M函数 为了易于理解,可以在书写代码时添加注释语句。这些注释语句在编译程序时会被忽略,因此不会影响编译速度和程序运行速度,但是能够增加程序的可读性。一个完整的函数 M文件的结构如下:function f = fact(n) 函数定义语句% Compute a factorial value. H1行% FACT(N) returns the factorial of N, 帮助文本% usually denoted by N!% Put simply, FACT(N) is PROD(1:N). 注释语句f = prod(1:n); 函数体函数定义语句只在函数文件中存在,定义函数名称、输入 /输出参数的数量和顺序,脚本文件中没有该语句。 第 4章 M脚本与 M函数 2脚本 M文件脚本文件也叫命令文件,是独立执行的文件,它不接受输入参数,不返回任何值,而是代码的结合,该方法允许用户将一系列 MATLAB命令输入到一个简单的脚本 “.m”文件中,只要在 MATLAB命令窗口中执行该文件,则会依次执行该文件中的命令。脚本 M文件中包含一族由 MATLAB语言所支持的语句,它类似于 DOS下的批处理文件,它的执行方式很简单,用户只需在 MATLAB 的提示符 “”下键入该 M文件的文件名,这样 MATLAB就会自动执行该 M文件中的各条语句,并将结果直接返回到 MATLAB 的工作空间。 第 4章 M脚本与 M函数 在使用脚本文件时需要注意一点:如果当前工作区中存在与该脚本同名的变量,则当输入该文件名时,系统将其作为变量名执行。MATLAB中有一个专门用于寻找 “.m”文件的路径搜索器。 “.m”文件是以目录和文件夹的方式分布于文件系统中的,一部分 “.m”文件的目录是 MATLAB的子目录,由于MATLAB的一切操作都是在它的搜索路径,包括当前路径中进行的,因此如果调用的函数在搜索路径之外,MATLAB就会认为此函数不存在。 第 4章 M脚本与 M函数 3块注释 在 MATLAB 5以前的版本中,注释是逐行进行的,采用百分号 (%)进行标记。逐行注释不利于用户增加和修改注释内容。在 MATLAB 5及以后的版本中,用户可以使用“%”和 “%”符号进行块注释, “%”和 “%”分别代表注释块的起始和结束。 第 4章 M脚本与 M函数 4代码单元 一个代码单元指用户在 M文件中指定的一段代码,以一个代码单元符号:两个百分号加空格,即 “%”为开始标志,到另一个代码单元符号结束。如果不存在代码单元符号,则直到该文件结束。用户可以通过 MATLAB编辑器中的 cell 菜单创建和管理代码单元。需要注意的是,代码单元只能在 MATLAB 编辑器窗口中创建和使用,而在 MATLAB 命令窗口中是无效的。当在命令窗口中运行 M 文件时,将执行文件中的全部语句。第 4章 M脚本与 M函数 4.1.2 M文件的建立、运行与命名规则M文件的语法类似于一般高级语言,是一种程序化的编程语言,但是与传统的高级语言相比, M文件又有其特点。它只是一个简单的ASCII码型文本文件,因此,它的语法比一般的高级语言要简单,程序也容易调试,并具有很好的交互性。1 M文件的建立与运行M文件的建立与运行都可以在 M文本编辑器中进行。在 MATLAB主窗口中,单击菜单命令 “File | New | Script”或 “Function”即可打开 M文本编辑器,如图 4-1所示。输入完程序命令代码后,按照 M文件的命名规则对文件进行命名并保存。单击菜单命令 “Debug | Run”或 “F5”即可运行脚本程序。 M函数程序的运行需要由其他程序调用。 第 4章 M脚本与 M函数 图 4-1 M文本编辑器 第 4章 M脚本与 M函数 2 M文件的命名规则M文件的命名规则如下:(1) 文件名命名要用英文字符,第一个字符必须是字母而不能是数字,其中间不能有非法字符。(2) 文件名不要取为 MATLAB的固有函数,尽量不要是简单的英文单词,最好是由大小写英文、数字、下划线等组合而成的。原因是简单的单词命名容易与内部函数名同名,结果会出现一些莫名其妙的错误。(3) 文件存储路径一定要为英文。(4) 文件名不能为两个单词,如 random walk,应该写成random_walk,即中间不能有空格等非法字符。 第 4章 M脚本与 M函数 4.1.3 程序的调试 在开发函数或 M文件过程中,会不可避免地出现错误,即运行故障。 MATLAB提供了很多函数和方法,来帮助调试函数或脚本程序。 在 MATLAB的 M文本编辑器窗口中,单击菜单命令 “Debug | Save File and Run”,即可运行 M文本编辑器中的内容。在 MATLAB表达式中,有两类错误:语法错误和运行错误。在运行过程中,可能存在一些语法或其他错误而自动终止执行,而需要进行类似于修正错误或更改参数的调试。当 MATLAB计算一个表达式的值或一个函数被编译到内存时会发现语法错误。一旦发现语法错误, MATLAB立即标志这些错误,并提供有关所遇到的错误类型,以及 M文件中发生错误处的行数。给定这些反馈信息后,就很容易纠正这些错误。第 4章 M脚本与 M函数 而另一方面,即使 MATLAB标志了运行错误,但找出错误一般比较困难。当发现运行错误时, MATLAB把控制权返回给命令窗口和 MATLAB的工作空间,失去了对发生错误的函数空间的访问权,因此用户不能询问函数工作空间中的内容排除问题。MATLAB程序的调试一般使用两种方法:直接调试法和利用调试工具。 第 4章 M脚本与 M函数 1直接调试法 MATLAB 语言具有强大的运算能力,指令系统简单,因此程序通常非常简洁。对于简单的程序可以采用直接调试的方法。在程序调试时,程序运行中变量的值为一个重要的线索。由于在函数调用时只返回最后的输出参数,而不返回中间变量,因此,可以选择下面的方法查看程序运行中的变量值。(1) 通过分析后,将可能出错的语句后面的分号 (;)删除,将结果显示在命令窗口中,与预期值进行比较。第 4章 M脚本与 M函数 (2) 利用函数 disp()显示中间变量的值。(3) 在程序中的适当位置添加 keyboard指令。程序运行至此时将暂停,在命令窗口中显示 k提示符,用户可以查看工作区中的变量,可以改变变量的值。输入 return 指定返回程序,继续运行。(4) 在调试一个单独的函数时,可以将函数改写为脚本文件,此时可以直接对输入参数赋值,然后以脚本方式运行该 M文件,这样可以保存中间变量,在运行完成后,可以查看中间变量的值,对结果进行分析,查找错误所在。 第 4章 M脚本与 M函数 2利用调试工具可采用的调试工具有命令行调试程序和调试器界面调试程序。文本编辑器中的 Debug菜单提供了全部的调试选项,另外, MATLAB主窗口中的 Debug 菜单提供了一些调试命令,方便调试时在命令窗口中查看运行状态。调试选项及其功能如表 4-1所示。 第 4章 M脚本与 M函数 表 4-1 调 试 菜 单 项第 4章 M脚本与 M函数 Set/Clear Breakpoint:设置或清除断点。可以选择该选项对当前行进行操作,或者通过快捷键 F12,或者直接点击该行左侧的 “-”。设置断点时该处显示为红点。再次进行相同的操作则删除该断点。一旦这些断点被设置,程序将会运行到第一个断点并在那里停止。在调试的过程中,会有一个绿色的箭头出现在当前行。一旦到达某个断点,程序员可以通过在命令窗口中键入变量名的方法检查或修改在工作区内的任一变量。当程序员对程序的这一点感到满意时,可以通过重复按 F10键一行一行地进行调试,也可以按 F5键运行到下一个断点。它总是能检测程序中的每一个断点中的任何一个变量的值。 第 4章 M脚本与 M函数 Set/Modify Conditional Breakpoint :该选项用于设置或修改条件断点。条件断点为一种特殊的断点,当满足指定的条件时则程序执行至此即停止,条件不满足时则程序继续进行。其设置界面如图 4-2所示,在输入框中输入断点条件则将当前行设置为条件断点。 第 4章 M脚本与 M函数 图 4-2 设置或修改条件断点对话框 第 4章 M脚本与 M函数 Enable/Disable Breakpoint:该选项用于开启或关闭当前行的断点,如果当前行不存在断点,则设置当前行为断点;如果当前行是断点,则改变该断点的状态。在调试时,被关闭的断点将会被忽略。在程序调试中,变量的值是查找错误的重要线索,在MATLAB中有三种查看变量值的方法:(1) 在编辑器中将鼠标放置在待查看的变量处停留,则在此处显示该变量的值;(2) 在工作区浏览器中查看该变量的值;(3) 在命令窗口中输入该变量的变量名,则显示该变量的值。 第 4章 M脚本与 M函数 调试器的另外一个重要特性是可在 “Debug”菜单的 “Stop if Errors/Warnings”项目中找到错误。如果程序中发生了一个错误,这个错误导致了电脑死机或产生了错误信息,程序员可以打开这些选项,并执行这个程序。这个程序将会运行到错误或警告的断点并停在那儿,它允许程序员检查变量的每一个值,并帮助找出出错的原因。若一个错误被发现,程序员能用编辑器来更正这个 MALTAB程序,并把更新的版本存到磁盘上,在调试没结束之前,它必须重复以上的动作。这个步骤将会重复下去直到这个程序没有错误出现。 第 4章 M脚本与 M函数 4.1.4 程序错误的检测和处理在 MATLAB的命令表达式中可能存在两种类型的错误,即语法错误和运行错误。 语法错误。语法错误发生在 M文件程序代码的生成过程中,一般是由于编程人员的错误操作引起的,常见的如变量或函数名拼写错误、引号或括号以及标点符号缺少或应用不当,也可能是由函数参数输入类型有误或是矩阵运算阶数不符等所引起的。 运行错误。运行错误一般指在程序运行过程中,出现溢出或是死循环等异常现象。第 4章 M脚本与 M函数 1错误的检测在编程过程中,无论程序的编写多么谨慎,在不同的环境下运行时都有可能产生意外的错误。因此,有必要在程序中添加错误检测语句,保证程序在所有的条件下都能够正常运行。1) 错误检测与 C语言类似, MATLAB 中的 try-catch 语句可用于错误检测。如果程序中的一些语句可能会产生非预计的结果,可以将这些语句放在 try-catch 块中。 try-catch 语句可以检测所有错误,并且分别进行处理。格式如下: 第 4章 M脚本与 M函数 try表达式 1catch表达式 2end一个 try-catch块分为两部分。第一部分以 try开始,第二部分以 catch开始,整个块以 end结束。程序首先正常执行第一部分,如果有错误发生,则停止执行该部分的其他语句,转而执行 catch中的语句。 catch部分对错误进行处理,可以显示错误提示、执行默认语句等。 第 4章 M脚本与 M函数 在 try-catch语句中,可以嵌套其他的 try-catch语句,其格式如下:try表达式 1 %执行表达式 1catchtry表达式 2 %尝试从错误中恢复catchdisp Operation failed %处理错误endend第 4章 M脚本与 M函数 2) 发出错误报告在 MATALB中, error()函数可以报告错误并且中断程序运行。用户可以通过指定 error()函数参数的方式指定将要发出的错误信息。 MATALB提供了一系列错误识别和处理函数,如表 4-2所示。 第 4章 M脚本与 M函数 第 4章 M脚本与 M函数 3) 识别错误发生的原因当错误发生时,用户需要知道错误发生的位置及错误原因,以便能够正确处理错误。 lasterror()函数可以返回最后发生的错误的相关信息,辅助用户识别错误。lasterror()函数的返回结果为一个结构体,该结构体包含三个域,分别为 message、 identifier、 stack。 message为字符串,其内容为最近发生的错误的相关文本信息; identifier也是一个字符串,其内容为错误消息的类别标志; stack为一结构体,其内容为该错误的堆栈中的相关信息。 stack 包含三个域,分别为 file、 name和 line,表示文件名、函数名和错误发生的行数。 第 4章 M脚本与 M函数 4) 错误重现在一些情况下,需要重现已经抛出过的错误,以便于对错误进行分析,函数 rethrow()可以重新抛出指定的错误。该函数的格式为 rethrow(err),其中,输入参数 err用于指定需要重现的错误, err必须为 MATLAB结构体,包含 message、 identifier、 stack 中至少一个域,这三个域的类型与 lasterror 返回结果相同。该语句执行后程序运行中断,将控制权转给键盘或 catch语句的上一层模块。rethrow()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年福建省厦门实验中学招聘1人考前自测高频考点模拟试题完整参考答案详解
- 2025年延吉市党史地方志办公室招聘公益性岗位的模拟试卷及参考答案详解
- 2025广西壮族自治区卫生健康委员会机关服务中心公开招聘3人考前自测高频考点模拟试题及1套参考答案详解
- 2025黑龙江七台河市公益性岗位人员招聘20人考前自测高频考点模拟试题带答案详解
- 2025黑龙江黑河市逊克县乡村医生公开招聘19人考前自测高频考点模拟试题及答案详解(典优)
- 2025甘肃金昌市人力资源和社会保障局招聘公益性岗位人员1人模拟试卷完整答案详解
- 2025国有四大银行远程银行中心诚聘客服代表招聘考前自测高频考点模拟试题及答案详解(各地真题)
- 2025年西安医学院儿童医院护理人员招聘(15人)考前自测高频考点模拟试题完整参考答案详解
- 2025年甘肃酒泉阿克塞县人民检察院招聘聘用制人员考前自测高频考点模拟试题及完整答案详解一套
- 2025年合肥长丰县乡村振兴投资集团有限公司招聘7人考前自测高频考点模拟试题及完整答案详解1套
- 衢州学院十五五校园及校园文化建设规划
- 葡萄田租赁合同协议书
- 哈尔滨工业大学介绍
- 医疗行业中的新检验技术推广与普及
- 贴砖包工协议书模板
- 三相电协议合同
- 2025年朝花夕拾考试题及答案
- 铁路劳动安全防寒过冬策略
- 真空灭弧室的结构方彦课件
- 2025-2030中国废塑料化学回收行业市场发展分析及发展前景与投融资战略规划研究报告
- 农业综合开发项目手册
评论
0/150
提交评论