第七讲-MATLAB-程序设计PPT课件_第1页
第七讲-MATLAB-程序设计PPT课件_第2页
第七讲-MATLAB-程序设计PPT课件_第3页
第七讲-MATLAB-程序设计PPT课件_第4页
第七讲-MATLAB-程序设计PPT课件_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

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

文档简介

1 第七讲matlab程序设计 2 M文件程序控制结构程序调试程序举例 3 1 1MATLAB的工作模式 指令驱动模式 通常matlab以指令驱动模式工作 即在matlab窗口下当用户输入单行指令时 matlab立即处理这条指令 并显示结果 这就是matlab命令行方式 命令行操作时 matlab窗口只允许一次执行一行上的一个或几个语句 一 M文件 4 命令行驱动 一行多条指令 x1 0 10 x2 0 3 11 x3 11 5 3 0 x1 012345678910 x2 0369x3 11 50008 50005 50002 5000在matlab窗口输入数据和命令进行计算时 当处理复杂问题和大量数据时是不方便的 命令行方式程序可读性差 而且不能存储 对于复杂的问题 应编写成能存储的程序文件 5 M文件模式将matlab语句构成的程序存储成以m为扩展名的文件 然后再执行该程序文件 这种工作模式称为程序文件模式 程序文件不能在命令窗口下建立 因为命令窗口只允许一次执行一行上的一个或几个语句 6 脚本文件 将原本要在MATLAB环境下直接输入的多条语句 存放为 m后缀的文件 在命令行键入文件名 替代多条语句 一次执行成批命令 函数文件 以固定格式书写的程序代码 第一行是函数定义行 和C语言 Fortran等语言程序一样 用MATLAB语言编写的程序 称为M文件 M文件可以根据调用方式的不同分为两类 脚本文件 命令文件 ScriptFile 和函数文件 FunctionFile 1 2M文件 7 两种文件对比 8 将函数文件去掉其第一行的定义行就转变成了脚本文件 但这样一来 原先在函数内部使用的局部变量也就变成了基本工作空间中的变量 这会带来以下几个问题 基本工作空间与脚本文件中同名的变量会引起冲突 使基本工作空间中变量数急剧增加 造成内存紧张 编程时要细心考虑各个脚本文件所用到的变量 这些问题在函数文件中不复存在 MATLAB通过实参与形参一一对应的方式来实现函数的调用 这极大地方便了程序设计 9 例如 编写出求取平均值的脚本文件stat1 m 再编写出求取标准差的函数文件stat2 m 程序如下 脚本文件stat1 m 脚本文件 求阵列x的平均值和标准差 m n size x ifm 1m n ends1 sum x s2 sum x 2 10 mean1 s1 m stdev sqrt s2 m mean1 2 函数文件stat2 mfunction mean1 stdev stat2 x 函数文件 求阵列x的平均值和标准差 调用格式为 mean stdev stat2 x m n size x ifm 1m n ends1 sum x s2 sum x 2 mean1 s1 m stdev sqrt s2 m mean1 2 11 然后 在MATLAB下执行这两个文件 从而对脚本文件和函数文件有一个基本的了解 在MATLAB中输入 clearall x rand 4 4 2 stat1 12 执行后检查基本工作空间中的变量情况 whosNameSizeBytesClassm1x18doublearraymean11x432doublearrayn1x18doublearrays11x432doublearrays21x432doublearraystdev1x432doublearrayx4x4128doublearrayGrandtotalis34elementsusing272bytes 13 这说明 在脚本文件中产生的所有变量都保存在基本工作空间 检查执行结果 disp mean1 stdev 2 56852 53212 66842 56050 25870 33590 15130 2888另一方面 通过函数文件来进行同样的操作 这时输入 clearmns1s2mean1stdev m1 st stat2 x 14 执行后 同样检查基本工作空间的变量情况 whosNameSizeBytesClassm11x432doublearrayst1x432doublearrayx4x4128doublearrayGrandtotalis24elementsusing192bytes这说明 在基本工作空间中 除了原本产生的x矩阵 调用函数stat2 m后 只增加了由函数返回的结果 通过disp m1 st 可得到与statl m相同的结果 15 1 3M文件的创建 m文件的类型是普通的文本文件 我们可以使用系统认可的文本文件编辑器来建立m文件 如MATLAB下的m文件编辑器 windows的记事本和word等 具体的创建方法 1 edit 用matlab自带的编辑器编制m文件 16 启动MATLAB文本编辑器有3种方法 1 菜单操作 从MATLAB主窗口的File菜单中选择New菜单项 再选择M file命令 屏幕上将出现MATLAB文本编辑器窗口 17 2 命令操作 在MATLAB命令窗口输入命令edit 启动MATLAB文本编辑器后 输入M文件的内容并存盘 3 命令按钮操作 单击MATLAB主窗口工具栏上的NewM File命令按钮 启动MATLAB文本编辑器后 输入M文件的内容并存盘 18 2 利用WINDOWS下的记事本创建m文件 19 3 点击file SaveWorkspaceAs将工作空间中的内容存入文件 4 word 用word编辑m文件 注意 所创建的m文件必须纳入matlab搜索路径后 才能在matlab命令窗口运行 M文件创建之后以 m文件后缀形式保存到硬盘目录下 20 1 3 1命令文件 简单的m文件命令文件实际上是一串指令的集合 与在命令窗口逐行执行文件中的所有指令 其结果是一样的 没有输入输出参数 1 3M文件的格式 21 1 命令文件格式包括两部分 注释文件和程序文件 RANKNumberoflinearlyindependentrowsorcolumns K RANK X isthenumberofsingularvaluesofX thatarelargerthanMAX SIZE X NORM X EPS K RANK X tol isthenumberofsingularvaluesofXthat arelargerthantol Copyright c 1984 94byTheMathWorks Inc s svd x if nargin 1 tol max size x max s eps endr sum s tol 22 2 命令m文件建立及其运行 建立包括以下步骤 进入m文件编辑器输入程序定义文件名 保存程序命令M文件的运行方式 直接在命令窗口输入该文件的文件名在m文件编辑器中打开该文件后点击工具条中的 运行 按钮 23 例2 将两个矩阵相加 1 输入程序 对两个矩阵相加clccleara 1 2 3 b 4 5 6 c a b 2 保存到当前工作路径为myadd m 3 在命令窗口输入myadd 回车或打开文件 点击运行按钮 给出结果 c 579 24 打开已有的M文件 也有3种方法 1 菜单操作 从MATLAB主窗口的File菜单中选择Open命令 则屏幕出现Open对话框 在Open对话框中选中所需打开的M文件 在文档窗口可以对打开的M文件进行编辑修改 编辑完成后 将M文件存盘 2 命令操作 在MATLAB命令窗口输入命令 edit文件名 则打开指定的M文件 3 命令按钮操作 单击MATLAB主窗口工具栏上的OpenFile命令按钮 再从弹出的对话框中选择所需打开的M文件 25 1 3 2matlab函数文件 1 函数 和C语言既有相同又有不同之处 函数工作空间 在函数运行时 在内存中开辟一块存储空间 存储函数命令和运行中间结果 运行完就释放 与workspace对应 函数变量 形参为输入变量 返回值为输出变量 可以有多个返回值 26 2 matlab函数内置文件matlab自定义的函数文件称内置函数文件调用内置函数的方法 使用函数名并给出相应的入口 出口参数即可 例 sin m函数 用type指令显示其m文件内容typesinsinisabuilt infunction 例3输入程序 x 0 2 pi 180 2 pi y sin x plot x y 保存为mymfile m后运行 27 matlab拥有大量的内置数学函数 供我们在数值运算和符号运算中调用 如sqrt x 求x的平方根abs x 求x的绝对值det a 求行列式的值等等 28 matlab用户可以根据需要编辑自己的m文件 它们可以像库函数一样方便的调用 从而极大地扩展了matlab的能力 对于某一类特殊问题 如创建了许多m函数文件 则可形成新的工具箱 这种用matlab语言创建定义新的matlab函数的功能 正体现了matlab语言强大的扩展功能 3 用户定义函数m文件 需要输入变量 返回输出变量 29 函数m文件的格式 function返回变量 函数名 输入变量 注释说明语句段程序语句段 例4编写函数文件求半径为r的圆的面积和周长 函数文件如下 function s p fcircle r calculatetheareaandperimeterofacircleofradiir r s p分别为圆的半径 面积以及周长 2004年7月30日编s pi r r p 2 pi r 30 函数m文件第一行必须以单词function作为引导词 表示该M文件是一个函数文件 必须遵循如下形式 function 函数名的命名规则与变量名相同 m文件的文件名必须是 m 输入形参为函数的输入参数 输出形参为函数的输出参数 当输出形参多于一个时 则应该用方括号括起来 程序中的变量均为局部变量 不保存在工作空间中 其变量只在函数运行期间有效 特定规则 31 4 函数m文件的调用 函数调用的一般格式是 输出实参表 函数名 输入实参表 要注意的是 函数调用时各实参出现的顺序 个数 应与函数定义时形参的顺序 个数一致 否则会出错 函数调用时 先将实参传递给相应的形参 从而实现参数传递 然后再执行函数的功能 32 例5利用函数文件 实现直角坐标 x y 与极坐标 之间的转换 1 建立函数文件function rho theta tran x y rho sqrt x x y y theta atan y x 2 保存为tran m3 编写命令文件main1 m调用tran m x input Pleaseinputx y input Pleaseinputy rho the tran x y rhothe MATLAB中 函数可以嵌套调用 即一个函数可以调用别的函数 甚至调用它自身 一个函数调用它自身称为函数的递归调用 33 例6分别建立命令文件和函数文件 将华氏温度f转换为摄氏温度c 程序1 首先建立命令文件并以文件名f2c m存盘 clear 清除工作空间中的变量f input InputFahrenheittemperature c 5 f 32 9然后在MATLAB的命令窗口中输入f2c 将会执行该命令文件 执行情况为 InputFahrenheittemperature 73c 22 7778 34 程序2 首先建立函数文件f2c m functionc f2c f c 5 f 32 9然后在MATLAB的命令窗口调用该函数文件 clear y input InputFahrenheittemperature x f2c y 输出情况为 InputFahrenheittemperature 70c 21 1111x 21 1111 35 局部变量和全局变量 局部变量只存在于单个函数工作空间 全局变量通过global定义 可穿行于不同函数工作空间 包括基本工作空间workspace 5 函数文件的其他相关概念 36 函数文件的内部变量是局部的 与其他函数及MATLAB内存相互隔离 而如果在若干函数中把某一变量定义为全局变量 那么这些函数将公用这个变量 全局变量的作用域是整个MATLAB的工作区 即全程有效 所有函数都可以对其存取和修改 全局变量是函数之间传递数据的一个方式全局变量用global命令定义 格式为 global变量名 37 我们编写出相应的函数文件 其中 和 采用全局变量进行参数传递 M函数文件为functionz fun1 x y globalalphabeta 全局变量宣称m length x n length y x1 x ones 1 n y1 y ones 1 m z alpha x1 1 2 beta y1 1 2 例全局变量应用示例 38 然后可通过调用函数fun1计算出z 并利用mesh绘制出网格曲线 编写出的脚本文件为globalalphabetax 0 02 2 y 2 02 0 figure 1 subplot 2 2 1 alpha 1 beta 1 z fun1 x y mesh z title alpha num2str alpha and beta num2str beta subplot 2 2 2 alpha 2 beta 1 z fun1 x y mesh z 39 title alpha num2str alpha and beta num2str beta subplot 2 2 3 alpha 1 beta 2 z fun1 x y mesh z title alpha num2str alpha and beta num2str beta subplot 2 2 4 alpha 8 beta 5 z fun1 x y mesh z title alpha num2str alpha and beta num2str beta 这里 和 通过全局变量传递 因此在函数调用语句z fun1 x y 中 每次的x y都不变 但得到的结果z却不同 这是因为 和 已发生了变化 脚本文件执行后可得到如图4 1所示的结果 40 41 值得指出的是 程序设计中 全局变量固然可带来某些方便 但却破坏了函数对变量的封装 降低了程序的可读性和可靠性 当设计程序较大 子函数较多时 全局变量给程序调试和维护带来不便 如果一定要用全局变量 要起一个特别的名字 以免误被修改 42 子函数 在一个m文件中可以有多个函数 其中和文件名同名的函数为主函数 其余为子函数 只存在于主函数工作空间 私人函数 存放于private目录中的函数 m文件 为其父目录中的多个函数所共享 43 函数参数的可调性 在调用函数时 MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数 只要在函数文件中包含这两个变量 就可以准确地知道该函数文件被调用时的输入输出参数个数 从而决定函数如何进行处理 44 例19nargin用法示例函数文件charray m functionfout charray a b c ifnargin 1fout a elseifnargin 2fout a b elseifnargin 3fout a b c 2 end 命令文件mydemo m x 1 3 y 1 2 3 charray x charray x y charray x y 3 ans 123ans 246ans 21 45 二 程序控制结构 顺序结构选择结构循环结构 46 1 数据的输入输出1 1数据的输入从键盘输入数据 则可以使用input函数来进行 该函数的调用格式为 A input 提示信息 选项 其中提示信息为一个字符串 用于提示用户输入什么样的数据 如果在input函数调用时采用 s 选项 则允许用户输入一个字符串 例如 想输入一个人的姓名 可采用命令 xm input What syourname s 47 1 2 数据的输出MATLAB提供的命令窗口输出函数主要有disp函数 其调用格式为disp 输出项 其中输出项既可以为字符串 也可以为矩阵 48 例7输入x y的值 并将它们的值互换后输出 程序如下 x input Inputxplease y input Inputyplease z x x y y z disp x disp y Inputxplease 23Inputyplease 6623 49 例8求一元二次方程ax2 bx c 0的根 程序如下 a input a b input b c input c d b b 4 a c x b sqrt d 2 a b sqrt d 2 a disp x1 num2str x 1 x2 num2str x 2 a 10b 23c 5x1 0 24308 x2 2 0569 50 2 程序结构 2 1顺序结构只需将程序语句顺序排列即可 51 2 2选择结构1 if语句在MATLAB中 if语句有3种格式 1 单分支if语句 if条件语句组end当条件成立时 则执行语句组 执行完之后继续执行if语句的后继语句 若条件不成立 则直接执行if语句的后继语句 52 2 双分支if语句 if条件语句组1else语句组2end当条件成立时 执行语句组1 否则执行语句组2 语句组1或语句组2执行后 再执行if语句的后继语句 53 例9计算分段函数的值 程序如下 x input 请输入x的值 ifx 0y x sqrt pi exp 2 elsey log x sqrt 1 x x 2 end 54 3 多分支if语句 if条件1语句组1elseif条件2语句组2 elseif条件m语句组melse语句组nend语句用于实现多分支选择结构 55 例10输入一个字符 若为大写字母 则输出其对应的小写字母 若为小写字母 则输出其对应的大写字母 若为数字字符则输出其对应的数值 若为其他字符则原样输出 c input 请输入一个字符 s ifc A end 56 2 switch语句switch语句根据表达式的取值不同 分别执行不同的语句 其语句格式为 switch表达式case表达式1语句组1case表达式2语句组2 case表达式m语句组motherwise语句组nend 57 当表达式的值等于表达式1的值时 执行语句组1 当表达式的值等于表达式2的值时 执行语句组2 当表达式的值等于表达式m的值时 执行语句组m 当表达式的值不等于case所列的表达式的值时 执行语句组n 当任意一个分支的语句执行完后 直接执行switch语句的下一句 58 例11某商场对顾客所购买的商品实行打折销售 标准如下 商品价格用price来表示 price 200没有折扣200 price 5003 折扣500 price 10005 折扣1000 price 25008 折扣2500 price 500010 折扣5000 price14 折扣输入所售商品的价格 求其实际销售价格 59 程序如下 price input 请输入商品价格 switchfix price 100 case 0 1 价格小于200rate 0 case 2 3 4 价格大于等于200但小于500rate 3 100 casenum2cell 5 9 价格大于等于500但小于1000rate 5 100 casenum2cell 10 24 价格大于等于1000但小于2500rate 8 100 casenum2cell 25 49 价格大于等于2500但小于5000rate 10 100 otherwise 价格大于等于5000rate 14 100 endprice price 1 rate 输出商品实际销售价格 60 3 try语句语句格式为 try语句组1catch语句组2endtry语句先试探性执行语句组1 如果语句组1在执行过程中出现错误 则将错误信息赋给保留的lasterr变量 并转去执行语句组2 61 例12矩阵乘法运算要求两矩阵的维数相容 否则会出错 先求两矩阵的乘积 若出错 则自动转去求两矩阵的点乘 程序如下 A 1 2 3 4 5 6 B 7 8 9 10 11 12 tryC A B catchC A B endClasterr 显示出错原因 C 71627405572ans Errorusing mtimesInnermatrixdimensionsmustagree 62 2 3循环结构1 for语句for语句的格式为 for循环变量 表达式1 表达式2 表达式3循环体语句end其中表达式1的值为循环变量的初值 表达式2的值为步长 表达式3的值为循环变量的终值 步长为1时 表达式2可以省略 63 例13一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数 输出全部水仙花数 程序如下 form 100 999m1 fix m 100 求m的百位数字m2 rem fix m 10 10 求m的十位数字m3 rem m 10 求m的个位数字rem求余数ifm m1 m1 m1 m2 m2 m2 m3 m3 m3disp m endend 结果 153370371407 64 例14已知 当n 100时 求的值 程序如下 程序如下 y 0 n 100 fori 1 ny y 1 2 i 1 endy y 3 2843 65 在实际MATLAB编程中 采用循环语句会降低其执行速度 所以前面的程序通常由下面的程序来代替 n 100 i 1 2 2 n 1 y sum 1 i y y 3 2843 66 for语句更一般的格式为 for循环变量 矩阵表达式循环体语句end执行过程是依次将矩阵的各列元素赋给循环变量 然后执行循环体语句 直至各列元素处理完毕 67 例15写出下列程序的执行结果 s 0 a 1 2 3 5 6 7 8 9 10 fork as s k enddisp s a 1235678910 disp s 61827 68 2 while语句while语句的一般格式为 while 条件 循环体语句end其执行过程为 若条件成立 则执行循环体语句 执行后再判断条件是否成立 如果不成立则跳出循环 69 while语句可完成不定次重复的循环 它与for语句不同 每次循环前要判别其条件 如果条件为真或非零值 则继续循环 否则结束循环 当条件是一表达式时 其值必定会受到循环语句的影响 例如 为求出一个值n 使其n 最大但小于1050 则可输入r 1 k 1 whiler 1e50r r k k k 1 endk k 1 r r k disp The num2str k is num2str r 70 执行后得The41 is3 345253e 049说明41 小于1050 且可取最大值 这可利用直接求取阶乘的prod函数 或factorial N 加以验证 我们也可以采用变量的值控制循环次数 例如输入var 12340560 a k 1 whilevar k a avar k 3 k k 1 enddisp a 71 执行后得182764这说明只循环了前4次 因为一旦取得的变量值为0 本例为第5次 则终止while循环 while循环中可利用break语句终止循环 例如输入var 123456 1780 a k 1 whilevar k ifvar k 1 break enda avar k 2 k k 1 enddisp a 72 执行后得149162536这说明当取var k 1时 由于执行了break语句 终止了while循环 73 程序如下 sum 0 cnt 0 val input Enteranumber endin0 while val 0 sum sum val cnt cnt 1 val input Enteranumber endin0 endif cnt 0 summean sum cntend 例16从键盘输入若干个数 当输入0时结束输入 求这些数的平均值和它们之和 Enteranumber endin0 5Enteranumber endin0 6Enteranumber endin0 8Enteranumber endin0 0sum 19mean 6 3333 74 3 循环的嵌套如果一个循环结构的循环体又包括一个循环结构 就称为循环的嵌套 或称为多重循环结构 例17若一个数等于它的各个真因子之和 则称该数为完数 如6 1 2 3 所以6是完数 求 1 500 之间的全部完数 form 1 500s 0 fork 1 m 2ifrem m k 0 rem求m k的余数s s k endendifm sdisp m endend 628496 75 例如 利用rand函数产生10个随机数 然后利用嵌套for循环进行从大到小排序 MATLAB程序为x fix 100 rand 1 10 disp x n length x fori 1 n 1forj n 1 i 1ifx j x j 1 y x j x j x j 1 x j 1 y endendenddisp x 76 执行后得到排序前和排序后的结果 1968305415693786855986856968595437301915for循环中可利用break语句来终止for循环 如上例中加上交换标志 flag 当一次内循环中没有找到一个单元需要交换时 说明排序工作已经结束 从而可以结束外循环 MATLAB程序为x fix 100 rand 1 10 disp x n length x 77 fori 1 n 1flag 1forj n 1 i 1ifx j x j 1 y x j x j x j 1 x j 1 y flag 0 endendifflag break endenddisp x disp 循环次数为 num2str i 78 执行后得7995528817972725877397958887797352272517循环次数为6 这说明完成这10个数的排序只进行了6次内循环 79 For循环需要注意事项 For循环不能用For循环内重新赋值循环变量n来终止 在For循环内接受任何有效的MATLAB数组 For循环可按需要嵌套 当有一个等效的数组方法来解给定的问题时 应避免用For循环 为了得到最大的速度 在For循环 While循环 被执行之前 应预先分配数组 forn 1 10 x n sin n pi 10 n 10 end n 1 10 x sin n pi 10 80 3 程序流控制 1 break语句和continue语句与循环结构相关的语句还有break语句和continue语句 它们一般与if语句配合使用 break语句用于终止循环的执行 当在循环体内执行到该语句时 程序将跳出循环 继续执行循环语句的下一语句 continue语句控制跳过循环体中的某些语句 当在循环体内执行到该语句时 程序将跳过循环体中所有剩下的语句 继续下一次循环 81 程序如下 forn 100 200ifrem n 21 0continueendbreakendn n 21的余数不等于0则继续下一个循环 即for循环 n继续加1 直到余数等于零 跳出continue循环体 例18求 100 200 之间第一个能被21整除的整数 82 2 程序的暂停 暂停程序的执行可以使用pause函数其调用格式为 pause 延迟秒数 如果省略延迟时间 直接使用pause 则将暂停程序 直到用户按任一键后程序继续执行 若要强行中止程序的运行可使用Ctrl C命令 83 用户参数交互输入 在M文件执行过程中 可输入程序所需的参数 这可使程序设计变得更加灵活 参数输入可有三种方式 利用input函数输入参数 这时可同时显示出提示信息 利用keyboard函数进入键盘主控状态 直接修改或输入变量 利用menu函数制作成交互输入的菜单 使输入界面更加友好 另外 pause命令可使MATLAB进入暂停状态 即进入键盘主控状态 也可以完成输入操作 84 键盘输入input函数是MATLAB中用于输入参数的常用函数 它可自带提示信息 例如 f input frequencyis 执行时显示frequencyis这时可输入频率值f 又如 要求输入方法的选择 m input methods n1 linear n2 bilinear n3 others n 85 执行时显示 methods1 linear2 bilinear3 others这时可输入方法选择 1 2或3 当直接输入字符串变量时 则应在input中指定 s 项 如m input methods s 86 执行时显示methods 这时用户可直接输入方法的名称 如输入bilinear 这时m为字符串变量 bilinear 在输入时还可以写成表达式 这时MATLAB先计算出表达式的值 然后赋给输入变量 例如 a 5 b 4 c input Pleaseinputa 2 b 执行时输入a 2 b 则得c 29 87 键盘控制一般情况下 我们可利用debug命令对M函数文件进行调试 然而 利用keyboard函数也可以进行简单的调试 在M文件的适当位置加上keyboard命令 MATLAB执行该命令时 会将控制权交给键盘 这时用户可检查当前局部工作空间中变量的内容 也可对变量值进行修改 或者直接输入新的变量 可使用MATLAB的任何命令建立 利用return命令可退出键盘控制状态 MATLAB继续执行后续程序 88 菜单输入利用menu函数可显示出输入菜单 用户只需利用鼠标点击菜单中的按钮 就可以完成输入操作 当然 输入的值为菜单选项的序号 因此编写程序时应加以变换 例如 要输入颜色的字符串变量scolor 它可取red green blue yellow和black 则可输入 89 s menu colorselection red green blue yellow black switchscase1 scolor red case2 scolor green case3 scolor blue case4 scolor yellow case5 scolor black otherwisedisp Error endscolor 90 输入菜单 91 执行时可显示出如图所示的菜单 假设在菜单中选择第4个按钮 yellow 则可得到scolor yellow利用menu函数可从更多的数据中进行输入 例如输入r rand 2 3 s menu selectioninput r 1 1 r 1 2 r 1 3 r 2 1 r 2 2 r 2 3 则可从矩阵数据中输入任一参数 92 三 程序调试 3 1程序调试概述一般来说 应用程序的错误有两类 一类是语法错误 语法错误包括词法或文法的错误 例如函数名的拼写错 表达式书写错等 另一类是运行时的错误 指程序的运行结果有错误 这类错误也称为程序逻辑错误 93 3 2利用debugger调试器 Debugger主要用来诊断第二类错误 在包含函数调用的MATLAB程序运行时 当发生运行错误时 不会显示出错信息 而在执行结束或出错时 我们只能看到基本工作空间 即主程序执行空间 中的变量 各个函数工作空间已关闭 因此无法检测各个局部变量 为此 应采用调试技术来查找问题 94 为查找运行错误 可采用下列技术 在可能发生错误的M文件中 删去某些语句行末的分号 使显示其运行中间结果 从中可发现一些问题 在M文件的适当位置上加上keyboard命令 使在执行时在此暂停 从而检查局部工作空间中变量的内容 从中找到出错的线索 利用return命令可恢复程序的执行 注释掉M函数文件的函数定义行 使函数文件转变成命令文件 这样在程序运行出错时 可查看M文件产生的中间变量 注意 局部变量之间应避免冲突 使用MATLAB提供的Debugger Debugger为我们提供了下列功能 设置 清除断点 单步执行 继续执行 95 MATLAB的调试技术大体要经过以下步骤 第一步 分段设置断点一开始并不能肯定问题所在 我们总是按照执行顺序分段执行 以期望能够找到出错的程序段 为此在程序中设置断点 并执行程序 第二步 清除断点第三步 调试嵌套函数四 单步执行五 修改并重新执行找到了问题所在 修改源程序并重新执行 如仍有问题 继续上述过程进行调试 直到程序执行正确 96 设置断点 取消断点 单步运行 进入函数 跳出函数 退出调试 继续运行 97 3 3调试命令 除了采用调试器调试程序外 MATLAB还提供了一些命令用于程序调试 命令的功能和调试器菜单命令类似dbstop Setbreakpoint dbclear Removebreakpoint dbcont Resumeexecution dbdown Changelocalworkspacecontext dbmex EnableMEX filedebugging dbstack Listwhocalledwhom dbstatus Listallbreakpoints dbstep Executeoneormorelines dbtype ListM filewithlinenumbers dbup Changelocalworkspacecontext dbquit Quitdebugmode 98 四 程序举例 例21猜数游戏 首先由计算机产生 1 100 之间的随机整数 然后由用户猜测所产生的随机数 根据用户猜测的情况给出不同提示 如猜测的数大于产生的数 则显示 High 小于则显示 Low 等于则显示 Youwon 同时退出游戏 用户最多可以猜7次 99 程序如下 Playthegameofguessthenumberx fix 100 rand arandomnumbercalculatedbythecomputern 7 test 1 fork 1 7numb int2str n disp Youhaveari

温馨提示

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

评论

0/150

提交评论