matlab函数文件和脚本文件ppt课件_第1页
matlab函数文件和脚本文件ppt课件_第2页
matlab函数文件和脚本文件ppt课件_第3页
matlab函数文件和脚本文件ppt课件_第4页
matlab函数文件和脚本文件ppt课件_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

第五章 脚本文件和函数文件 本节内容 掌握脚本文件和函数文件的区别掌握函数文件的编写和调用掌握M文件的调试方法掌握文件的打开和关闭 1M文件 脚本文件 脚本文件只是一串按照用户意图排列而成的MATLAB指令集合 即只是简单命令的叠加 它没有输入参数 也没有输出参数 它运行后产生的变量都是全局变量 均驻留在workspace中 只要用户不使用指令clear加以清除 或MATLAB指令窗不关闭 这些变量将一直保存在基本工作空间中 例 计算小于任意自然数n的fibonnaci数 运行文件 F5 Debug Run 函数文件 函数文件是一种特殊类型的运行在自己独立的工作空间的M文件 通过输入形参表接收数据 通过输出形参返回结果到调用文件 function 输出形参表 fname 输入形参表 H1注释行 其他注释行 可执行代码 return 以function开头的一行为引导行 是函数定义语句 表示该M文件是一个函数文件 帮助文本的首行 H1行 用于help帮助使用和lookfor搜索帮助文本 指H1行之后到函数体之前的注释行 包括函数的意义 各参数的意义 调用格式以及程序的作者 日期等 函数体是函数的执行代码 是文件主要部分 注释 以 开头 可出现在程序中任意一行 用绿色表示 编译时会被忽略 不会影响程序运行速度 例 编写函数计算两点之间的距离 当函数的输出参数多于一个时 应该用方括号括起来 并以逗号隔开 传递给函数的变量不必与函数定义行中的参数同名 函数和文件的命名规则与变量命名规则相同 若保存的文件名与函数名不同 则在调用时必须使用文件名 建议 函数名与文件名应一致 系统默认 注意事项 函数文件运行时 MATLAB会专门为其开辟一临时工作空间 函数空间 所有变量都存放于此 文件运行完毕后 该临时空间以及所有中间变量就立即被清除 函数空间随函数文件的调用而产生 随调用而结束 函数文件的变量除特别声明外均是局部变量 函数运行 调用 注 1 函数调用时 先将实参传递给相应的形参 实现参数传递 然后再执行函数的功能 2 各实参出现的顺序 个数应与形参定义的顺序和个数一致 否则会出错 函数文件运行不能选中菜单Run 而是调用 输出实参表 函数名 输入实参表 函数调用的一般格式 脚本文件和函数文件的区别 相同 扩展名都是 m 可用文件编辑器编写不同 1 脚本文件无输入 输出参数 2 函数文件与指令空间只能通过输入参数和输出参数通信 中间变量不出现 3 脚本文件产生的变量都是全局变量 存放在基本工作空间中 而函数文件产生的中间变量存放在临时工作空间中 它随函数的调用结束而删除 4 运行方式不同 1 以ffib m为名存盘2 MATLAB命令窗口输入命令 ffib 1000 即可求小于1000的Fibonacci数 例 编写函数求小于任意自然数n的fibonnaci数 递归调用 函数调用其本身 functionf factor n ifn 1f 1 elsef factor n 1 nend fori 1 10fac i factor i endfac 打开文本编辑器编写函数文件factor m新打开一文件编辑器 在编写的脚本文件中调用该函数文件factor m 2函数操作 参数值的传递 函数参数数目的可调性 nargin nargout 用于检查被调用函数的输入 输出参数的数目 nargin 实际输入参数的个数 nargout 实际输出参数的个数在函数体内确定输入输出参数后可以用条件语句确定需要执行的操作 输入 输出参数的可变性 varagin varargout 输入 输出参数列表 参数是以单元数组的形式进行传输 functiontest varargin disp narginis num2str nargin forv 1 numel varargin disp varargin num2str v is class varargin v end test 1 a uint8 32 narginis3varargin 1 isdoublevarargin 2 ischarvarargin 3 isuint8 错误处理 error 中断函数并显示出错误信息 warning 错误不是致命的 故继续执行函数并显示出警示信息lasterror 返回最后发生的错误的相关信息lastwarning 返回最后发生的错误的警告信息 局部变量和全局变量 局部变量 仅存在于函数空间内部的中间变量 影响范围仅限于函数本身 全局变量 在脚本文件或基本工作空间中定义 它可作用于整个MATLAB工作空间 所有函数都可以对其进行修改和存取 在函数内访问全局变量 必须首先在函数内用global定义 而后才可以使用 其他函数类型 匿名函数的格式 fhandle 逗号分隔的参数列表 表达式 内联函数的格式 f inline 表达式 创建内联表达式 若不指出变量 用x作为自变量 查看内联函数的内容formula f 函数句柄 定义方法 利用 符号 利用转换函数str2func作用 使函数调用像变量调用一样方便 可迅速获得同名重载函数的位置 类型 可以更大范围内调用子函数和私有函数 提高软件征用性和函数调用速度 y1 y2 feval FH arg1 arg2 执行函数句柄FH指定的计算 3文件操作 文件的打开 fid fopen 文件名 打开方式 其中 fid是存储的文件句柄 它是该数据文件的唯一标识 其值大于0表示文件打开成功 文件名名用字符串形式表示 打开方式有r 只读 w 只写 a 追加 和r 可读可写 文件的关闭 sta fclose fid 其中 sta表示关闭文件操作的返回值 若关闭成功 返回0 否则返回1 若要关闭所有已打开的文件 用fclose all r 只读方式打开 表示该文件已存在 r 读写方式打开文件 打开后先读后写 w 打开后写入数据 更新文件 a 在打开的文件末端添加数据 b 以二进制格式打开 系统的默认形式 文件的读和写fwrite是按照指定的数据精度将矩阵中的元素写入到文件中 fread用于读取二进制文件的数据 并将数据存入矩阵中 fwrite按照指定的数据精度将矩阵中的元素写入到文件中A 用来存放写入文件的数据 precision 数据精度 char int double float等 count 返回所读取的数据元素个数 size 数据A的尺寸 N表示读N个元素到一个列向量 inf表示读取整个文件 M N 表示读数据到M N矩阵中 数据按列存放 count fwrite fp A precision A count fread fp size precision a 123456789 fp fopen d test bin wb 以二进制数据写入方式打开文件 fp 3其值大于0 表示打开成功fwrite fp a double ans 9表示写入了9个数据fclose fp ans 0表示关闭成功 fprintf将数据按照指定的格式写入到文件fp中count 数据元素个数format 数据格式 d整数 f浮点数 s字符串详情请见MATLAB帮助文件 a string fp fopen d char1 txt w fprintf fp s a fclose fp fp1 fopen d char1 txt rt b fscanf fp1 s A count fscanf fp format size count fprintf fp format A 4程序的调试 语法错误 包括词法或文法的错误 如函数名的拼写错误 数据不匹配 表达式书写错等 运行时的错误 根源在算法 发生错误时程序不会停止执行 也不会显示错误位置 只有程序执行结束或出错而返回到基本工作空间时 才知道发生了运行错误 但此时局部工作空间已关闭 致使错误很难跟踪 应用程序的错误一般有两种 将可能出错的语句后面的分号去掉 显示中间结果 利用disp函数显示中间变量的值在程序的适当位置添加keyboard语句 当程序运行至此时将暂停 在指令窗中显示k 提示符 用户可以查看工作区中的变量 也可改变变量的值 当输入return指令时返回程序 继续运行 调试方法 程序的暂停 采用pause函数可以暂停程序 直到用户按任一键程序才继续执行 若要强行中止程序的运行 可用ctrl c return 结束所在函数的执行 把控制权转至主调函数或指令窗 否则 只有待整个被调函数执行完后 才会转出 keyboard 将控制权交给键盘 用于程序的调试及在程序运行中修改变量 调试一个单独的函数时 可将函数改写为脚本文件 此时可直接对输入参数赋值 然后以脚本方式运行该M文件 使用调试器可以准确地找到运行错误 通过设置断点可使程序运行到某行暂停 查看和修改工作空间中的变量 也可以逐行运行程序 对执行流程进行完全监控 调试器Debug 它可帮助用户正确地找到程序出错的位置 其常和端点breakpoint配合使用 即 通过设置断点使程序运行到某行暂停 此时可通过观察程序变量 表达式 调试输出信息等来了解程序的运行情况 也可以逐行运行程序 对执行流程进行完全监控 调试手段有 设置断点 跟踪和观察变量 Debug菜单项 Step F10 单步执行语句 对于函数调用可将此函数一次执行完毕StepIn F11 单步执行语句 遇到函数时则进入函数体内单步执行StepOut shift F11 从函数体内运行到函数体外 即从当前位置运行到调用函数语句的下一条语句 Run F5 从头开始执行程序 直到遇到一个端点或程序结束 RuntoCursor 从当前位置运行到光标处 ExitDebugMode 退出调试工具 同时结束调试过程和程序运行过程 Set ClearBreakpoints F12 设置或清除光标所在行的断点ClearallBreakpoints 清除所有断点 调试方法步骤 设置断点 选中要设置的语句 用快捷键F12或用工具条上的大红点或点击菜单setbreakpoint 注 断点设置后 在窗口左边框上的大红圆点表示 非常醒目 设置断点后 点击菜单Debug Run 程序便处在调试状态 而后程序会自动在断点处暂停 此时左边框上的对应位置会出现一个绿色箭头指示被中断的语句 单步执行各语句 此时可查看各变量的内容 以判断程序流程是否正确 查看变量内容 可以点击工作空间的变量 或者用鼠标指向变量名 变量的值将自动显示 退出调试工具 选中菜单exitdebugmode清除断点 与设置方法相同 因collatz m程序需要输入参数n 故查看输出结果不能用Run命令 而需在指令窗中输入 collatz 5 6 5程序的优化 避免使用循环 向量化编程 要尽可能地使用向量或矩阵编程 而不是像在其他语言中对向量或矩阵的元素编程 这样 不仅可以使程序较短 而且能大大提高运行速度 要求 编程者须熟悉数组运算和MATLAB的指令 数组的预定义数组空间预配置可提高运行速度 对高阶矩阵的影响尤为明显 以及内存的利用率 否则数组多次扩维会增加内存的碎片 clearvr 0 89 1 20 3 09 4 27 3 62 7 71 8 99 7 92 9 70 10 41 ir 0 028 0 040 0 100 0 145 0 118 0 258 0 299 0 257 0 308 0 345 L length vr 计算数组的长度fork 1 Lr k vr k ir k 根据各测量点计算电阻endsr 0 fork 1 Lsr sr r k 计算所有电阻之和endrm sr L 计算电阻平均值 例 根据测得的一组电压 电流值计算平均电阻值 1

温馨提示

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

评论

0/150

提交评论