




已阅读5页,还剩103页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章MATLAB程序设计3 1M文件3 2程序控制结构3 3函数文件3 4程序举例3 5程序调试 3 1M文件3 1 1M文件概述用MATLAB语言编写的程序 称为M文件 M文件可以根据调用方式的不同分为两类 命令文件 ScriptFile 和函数文件 FunctionFile 参数 操作变量 运行方式 例3 1分别建立命令文件和函数文件 将华氏温度f转换为摄氏温度c 程序1 首先建立命令文件并以文件名f2c m存盘 clear 清除工作空间中的变量f input InputFahrenheittemperature c 5 f 32 9然后在MATLAB的命令窗口中输入f2c 将会执行该命令文件 执行情况为 InputFahrenheittemperature 73c 22 7778 程序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 3 1 2M文件的建立与打开M文件是一个文本文件 它可以用任何编辑程序来建立和编辑 而一般常用且最为方便的是使用MATLAB提供的文本编辑器 1 建立新的M文件为建立新的M文件 启动MATLAB文本编辑器有3种方法 1 菜单操作 从MATLAB主窗口的File菜单中选择New菜单项 再选择M file命令 屏幕上将出现MATLAB文本编辑器窗口 2 命令操作 在MATLAB命令窗口输入命令edit 启动MATLAB文本编辑器后 输入M文件的内容并存盘 3 命令按钮操作 单击MATLAB主窗口工具栏上的NewM File命令按钮 启动MATLAB文本编辑器后 输入M文件的内容并存盘 2 打开已有的M文件打开已有的M文件 也有3种方法 1 菜单操作 从MATLAB主窗口的File菜单中选择Open命令 则屏幕出现Open对话框 在Open对话框中选中所需打开的M文件 在文档窗口可以对打开的M文件进行编辑修改 编辑完成后 将M文件存盘 2 命令操作 在MATLAB命令窗口输入命令 edit文件名 则打开指定的M文件 3 命令按钮操作 单击MATLAB主窗口工具栏上的OpenFile命令按钮 再从弹出的对话框中选择所需打开的M文件 3 2程序控制结构3 2 1顺序结构1 数据的输入从键盘输入数据 则可以使用input函数来进行 该函数的调用格式为 A input 提示信息 选项 其中提示信息为一个字符串 用于提示用户输入什么样的数据 如果在input函数调用时采用 s 选项 则允许用户输入一个字符串 例如 想输入一个人的姓名 可采用命令 xm input What syourname s INPUTPromptforuserinput R INPUT Howmanyapples givestheuserthepromptinthetextstringandthenwaitsforinputfromthekeyboard TheinputcanbeanyMATLABexpression whichisvaluated usingthevariablesinthecurrentworkspace andtheresultreturnedinR Iftheuserpressesthereturnkeywithoutenteringanything INPUTreturnsanemptymatrix R INPUT Whatisyourname s givesthepromptinthetextstringandwaitsforcharacterstringinput Thetypedinputisnotevaluated thecharactersaresimplyreturnedasaMATLABstring Thetextstringforthepromptmaycontainoneormore n The n meansskiptothebeginningofthenextline Thisallowsthepromptstringtospanseverallines Tooutputjusta use 2 数据的输出MATLAB提供的命令窗口输出函数主要有disp函数 其调用格式为disp 输出项 其中输出项既可以为字符串 也可以为矩阵 A Hello Tom disp A B 1 2 3 4 disp B DISPDisplayarray DISP X displaysthearray withoutprintingthearrayname Inallotherwaysit sthesameasleavingthesemicolonoffanexpressionexceptthatemptyarraysdon tdisplay IfXisastring thetextisdisplayed 例3 2输入x y的值 并将它们的值互换后输出 S程序如下 x input Inputxplease y input Inputyplease z x x y y z disp x disp y 例3 3求一元二次方程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 3 程序的暂停暂停程序的执行可以使用pause函数 其调用格式为 pause 延迟秒数 如果省略延迟时间 直接使用pause 则将暂停程序 直到用户按任一键后程序继续执行 若要强行中止程序的运行可使用Ctrl C命令 PAUSEWaitforuserresponse PAUSE n pausesfornsecondsbeforecontinuing wherencanalsobeafraction Theresolutionoftheclockisplatformspecific Fractionalpausesof0 01secondsshouldbesupportedonmostplatforms PAUSEcausesaproceduretostopandwaitfortheusertostrikeanykeybeforecontinuing PAUSEOFFindicatesthatanysubsequentPAUSEorPAUSE n commandsshouldnotactuallypause Thisallowsnormallyinteractivescriptstorununattended PAUSEONindicatesthatsubsequentPAUSEcommandsshouldpause 3 2 2选择结构1 if语句在MATLAB中 if语句有3种格式 1 单分支if语句 if条件语句组end当条件成立时 则执行语句组 执行完之后继续执行if语句的后继语句 若条件不成立 则直接执行if语句的后继语句 例子 iffix x xdisp x end 2 双分支if语句 if条件语句组1else语句组2end当条件成立时 执行语句组1 否则执行语句组2 语句组1或语句组2执行后 再执行if语句的后继语句 例3 4计算分段函数的值 程序如下 x input 请输入x的值 ifx 0y x sqrt pi exp 2 elsey log x sqrt 1 x x 2 endy 3 多分支if语句 if条件1语句组1elseif条件2语句组2 elseif条件m语句组melse语句组nend语句用于实现多分支选择结构 例3 5输入一个字符 若为大写字母 则输出其对应的小写字母 若为小写字母 则输出其对应的大写字母 若为数字字符则输出其对应的数值 若为其他字符则原样输出 c input 请输入一个字符 s ifc A end 2 switch语句switch语句根据表达式的取值不同 分别执行不同的语句 其语句格式为 switch表达式case表达式1语句组1case表达式2语句组2 case表达式m语句组motherwise语句组nend 当表达式的值等于表达式1的值时 执行语句组1 当表达式的值等于表达式2的值时 执行语句组2 当表达式的值等于表达式m的值时 执行语句组m 当表达式的值不等于case所列的表达式的值时 执行语句组n 当任意一个分支的语句执行完后 直接执行switch语句的下一句 注意 switch子句后面的表达式应为一个标量或一个字符串 case子句后面的表达式不仅可以为一个标量或一个字符串 而且还可以为一个单元矩阵 如果case子句后面的表达式为一个单元矩阵 则表达式的值等于该单元矩阵中的某个元素时 执行相应的语句组 例3 6某商场对顾客所购买的商品实行打折销售 标准如下 商品价格用price来表示 price 200没有折扣200 price 5003 折扣500 price 10005 折扣1000 price 25008 折扣2500 price 500010 折扣5000 price14 折扣输入所售商品的价格 求其实际销售价格 程序如下 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 输出商品实际销售价格 3 try语句语句格式为 try语句组1catch语句组2endtry语句先试探性执行语句组1 如果语句组1在执行过程中出现错误 则将错误信息赋给保留的lasterr变量 并转去执行语句组2 例3 7矩阵乘法运算要求两矩阵的维数相容 否则会出错 先求两矩阵的乘积 若出错 则自动转去求两矩阵的点乘 程序如下 A 1 2 3 4 5 6 B 7 8 9 10 11 12 tryC A B catchC A B endClasterr 显示出错原因 3 2 3循环结构1 for语句for语句的格式为 for循环变量 表达式1 表达式2 表达式3循环体语句end其中表达式1的值为循环变量的初值 表达式2的值为步长 表达式3的值为循环变量的终值 步长为1时 表达式2可以省略 例3 8一个三位整数各位数字的立方和等于该数本身 则称该数为水仙花数 输出全部水仙花数 程序如下 form 100 999m1 fix m 100 求m的百位数字m2 rem fix m 10 10 求m的十位数字m3 rem m 10 求m的个位数字ifm m1 m1 m1 m2 m2 m2 m3 m3 m3disp m endend 例3 9已知y 1 1 3 1 5 1 2n 1 当n 100时 求y的值 程序如下 y 0 n 100 fori 1 ny y 1 2 i 1 endy 在实际MATLAB编程中 采用循环语句会降低其执行速度 所以前面的程序通常由下面的程序来代替 n 100 i 1 2 2 n 1 y sum 1 i y for语句更一般的格式为 for循环变量 矩阵表达式循环体语句end执行过程是依次将矩阵的各列元素赋给循环变量 然后执行循环体语句 直至各列元素处理完毕 例3 10写出下列程序的执行结果 s 0 a 12 13 14 15 16 17 18 19 20 21 22 23 fork as s k enddisp s 2 while语句while语句的一般格式为 while 条件 循环体语句end其执行过程为 若条件成立 则执行循环体语句 执行后再判断条件是否成立 如果不成立则跳出循环 例3 11从键盘输入若干个数 当输入0时结束输入 求这些数的平均值和它们之和 程序如下 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 3 break语句和continue语句与循环结构相关的语句还有break语句和continue语句 它们一般与if语句配合使用 break语句用于终止循环的执行 当在循环体内执行到该语句时 程序将跳出循环 继续执行循环语句的下一语句 continue语句控制跳过循环体中的某些语句 当在循环体内执行到该语句时 程序将跳过循环体中所有剩下的语句 继续下一次循环 例3 12求 100 200 之间第一个能被21整除的整数 程序如下 forn 100 200ifrem n 21 0continueendbreakendn 4 循环的嵌套如果一个循环结构的循环体又包括一个循环结构 就称为循环的嵌套 或称为多重循环结构 例3 13若一个数等于它的各个真因子之和 则称该数为完数 如6 1 2 3 所以6是完数 求 1 500 之间的全部完数 form 1 500s 0 fork 1 m 2ifrem m k 0s s k endendifm sdisp m endend 3 3函数文件3 3 1函数文件的基本结构函数文件由function语句引导 其基本结构为 function输出形参表 函数名 输入形参表 注释说明部分函数体语句其中以function开头的一行为引导行 表示该M文件是一个函数文件 函数名的命名规则与变量名相同 输入形参为函数的输入参数 输出形参为函数的输出参数 当输出形参多于一个时 则应该用方括号括起来 与脚本 命令 文件不同 函数文件犹如一个 黑箱 把一些数据送入处理 再把结果送出来 MATLAB提供的函数指令大部分都是由函数文件组成 M函数文件的特点 从形式上看 与脚本文件不同 函数文件的第一行总是以 function 引导的函数说明行 从运行上看 与脚本文件运行不同 每当函数文件运行 MATLAB就专门为它开辟一个临时工作空间 称为函数工作空间 Functionworkspace 当执行文件最后一行指令时 就结束该函数文件的运行 同时该临时函数工作空间及其所有的中间变量就会立即被清除 M函数文件的特点 从结构上看 脚本文件只被函数文件少了一行 函数声明行 所以只须描述清楚函数文件的结构 函数申明行 位于函数文件的首行 以关键字function开头 函数名以及函数的输入输出变量都在这一行被定义 第一行注释行 紧随函数申明行之后以 开头的第一行注释行 这行供lookfor关键字查询 M函数文件的特点 帮助文本区 第一注释行及其之后的连续以 开头的所有注释行构成整个在线帮助文本 可通过help查询到 编写和修改记录 与在线帮助文本区相隔一个 空 行 也以 开头 标志编写及修改该M文件的作者和日期 函数体 为清晰起见 它与前面的注释行以 空 格隔开 M函数文件的特点 注释语句 解释程序作用的语句 以 开头注意 要养成良好的注释习惯 以方便自己和其他用户调用 例3 14编写函数文件求半径为r的圆的面积和周长 函数文件如下 function s p fcircle r CIRCLEcalculatetheareaandperimeterofacircleofradiir r圆半径 s圆面积 p圆周长 2006年9月20日强振平编s pi r r p 2 pi r 3 3 2函数调用函数调用的一般格式是 输出实参表 函数名 输入实参表 要注意的是 函数调用时各实参出现的顺序 个数 应与函数定义时形参的顺序 个数一致 否则会出错 函数调用时 先将实参传递给相应的形参 从而实现参数传递 然后再执行函数的功能 函数调用可以嵌套 一个函数可以调用别的函数 甚至可以调用它自己 递归调用 MATLAB允许使用比 标称数目 较少的输入输出参数 实现对函数的调用 注意 文件名与函数名必须一一对应 这样才能保证调用成功 如果函数名和文件名不一致时以文件名为主 例3 15利用函数文件 实现直角坐标 x y 与极坐标 之间的转换 函数文件tran m function rho theta tran x y rho sqrt x x y y theta atan y x 调用tran m的命令文件main1 m x input Pleaseinputx y input Pleaseinputy rho the tran x y rhothe 例3 16利用函数的递归调用 求n n 本身就是以递归的形式定义的 显然 求n 需要求 n 1 这时可采用递归调用 递归调用函数文件factor m如下 functionf factor n ifn 1f 1 elsef factor n 1 n 递归调用求 n 1 end 3 3 3函数参数的可调性在调用函数时 MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数 只要在函数文件中包含这两个变量 就可以准确地知道该函数文件被调用时的输入输出参数个数 从而决定函数如何进行处理 只要在函数文件中包含这两个变量 就可以知道该函数文件调用时的输入参数 输出参数的数目 值得注意 nargin和nargout本身都是函数 所以用户不能赋值 也不能显示 变长度 输入输出参数总和 varargin varargout 具有接收 任意多输入 返回 任意多输出 例3 17nargin用法示例 函数文件examp 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 examp x examp x y examp x y 3 3 3 4全局变量与局部变量 局部变量LocalVariables它存在于函数空间内部的中间变量 产生于该函数的运行过程中 其影响范围也仅限于函数本身 全局变量GlobalVariables 通过global指令 Matlab也允许几个不同的函数空间及基本工作空间共享同一变量 这种被共享的变量被称为全局变量 使用方式 global变量名 注意 在任何地方使用全局变量的函数中 都需事先对全局变量作定义 在命令窗口也不例外一般来说尽量不要使用全局变量 例3 18全局变量应用示例 先建立函数文件wadd m 该函数将输入的参数加权相加 functionf wadd x y globalALPHABETAf ALPHA x BETA y 在命令窗口中输入 globalALPHABETAALPHA 1 BETA 2 s wadd 1 2 3 3 5函数的类别 主函数和子函数函数文件中开头定义的文件为主函数 而在函数体内定义的其他函数为子函数 子函数只能被主函数或者同一主函数下的其他子函数所调用 子函数示例 functionc test a b c test1 a b test2 a b functionc test1 a b c a b functionc test2 a b c a b 局部函数 Matlab语言中把存放在目录private下的函数称为局部函数 这些函数只有private目录的父目录中的函数才可以调用 而子函数只能被其所在M文件的主函数所调用 所以 局部函数在可用范围上大于子函数 注 Matlab的M文件调用函数时 将首先检测该函数是否为此文件的子函数 如果不是的话 再检测是否为可用的局部函数 仍然为否定结果时 再检测该函数是否为Matlab搜索路径上的其他M文件 3 4程序举例例3 19猜数游戏 首先由计算机产生 1 100 之间的随机整数 然后由用户猜测所产生的随机数 根据用户猜测的情况给出不同提示 如猜测的数大于产生的数 则显示 High 小于则显示 Low 等于则显示 Youwon 同时退出游戏 用户最多可以猜7次 Playthegameofguessthenumberx fix 100 rand arandomnumbercalculatedbythecomputern 7 test 1 fork 1 7numb int2str n disp Youhavearightto numb guesses disp Aguessisanumberbetween0and100 guess input Enteryourguess ifguessxdisp High elsedisp Youwon test 0 break endn n 1 endiftest 1disp Youlost end 例3 20用筛选法求某自然数范围内的全部素数 素数是大于1 且除了1和它本身以外 不能被其他任何整数所整除的整数 用筛选法求素数的基本思想是 要找出2 m之间的全部素数 首先在2 m中划去2的倍数 不包括2 然后划去3的倍数 不包括3 由于4已被划去 再找5的倍数 不包括5 直到再划去不超过sqrt m 的数的倍数 剩下的数都是素数 m input m p 1 m p 1 0 fori 2 sqrt m forj 2 i i mp j 0 endendn find p 0 p n 例3 21设f x e 0 5xsin x 6 求s 求函数f x 在 a b 上的定积分 其几何意义就是求曲线y f x 与直线x a x b y 0所围成的曲边梯形的面积 为了求得曲边梯形面积 先将积分区间 a b 分成n等分 每个区间的宽度为h b a n 对应地将曲边梯形分成n等分 每个小部分即是一个小曲边梯形 近似求出每个小曲边梯形面积 然后将n个小曲边梯形的面积加起来 就得到总面积 即定积分的近似值 近似地求每个小曲边梯形的面积 常用的方法有 矩形法 梯形法以及辛普生法等 a 0 b 3 pi n 1000 h b a n x a s 0 f0 exp 0 5 x sin x pi 6 fori 1 nx x h f1 exp 0 5 x sin x pi 6 s s f0 f1 h 2 f0 f1 ends 例3 22Fibonacci数列定义如下 f1 1f2 1fn fn 1 fn 2 n 2 求Fibonacci数列的第20项 functionf ffib n 用于求Fibonacci数列的函数文件 f ffib n 2006年9月19日编ifn 2f ffib n 1 ffib n 2 elsef 1 end 3 5程序调试 先来看一些辅助函数 常用指令 return echo input pause keyboard break 警告命令 error warning 人机交互命令 a echo命令echo命令可以使文件命令在执行时可见 这对程序的调试和演示很有用 ECHOEchocommandsinM files ECHOONturnsonechoingofcommandsinsideScript files ECHOOFFturnsoffechoing ECHOfileONwhere file isafunctionnamecausesthenamedFunction filetobeechoedwhenitisused ECHOfileOFFturnsitoff ECHOfiletogglesit ECHOONALLturnsontheechoingofcommandsinsideanyFunction filesthatarecurrentlyinmemory i e thefunctionsreturnedbyINMEM ECHOOFFALLturnsthemalloff b input用户输入提示命令c keyboard请求键盘输入命令d pause等待用户反映命令e continue break中断命令 KEYBOARDInvokekeyboardfromM file KEYBOARD whenplacedinanM file stopsexecutionofthefileandgivescontroltotheuser skeyboard ThespecialstatusisindicatedbyaKappearingbeforetheprompt Variablesmaybeexaminedorchanged allMATLABcommandsarevalid ThekeyboardmodeisterminatedbyexecutingthecommandRETURN i e typingthesixlettersR E T U R Nandpressingthereturnkey ControlreturnstotheinvokingM file DBQUITcanalsobeusedtogetoutofkeyboardmodebutinthiscasetheinvokingM fileisterminated ThekeyboardmodeisusefulfordebuggingyourM files PAUSEWaitforuserresponse PAUSE n pausesfornsecondsbeforecontinuing wherencanalsobeafraction Theresolutionoftheclockisplatformspecific Fractionalpausesof0 01secondsshouldbesupportedonmostplatforms PAUSEcausesaproceduretostopandwaitfortheusertostrikeanykeybeforecontinuing PAUSEOFFindicatesthatanysubsequentPAUSEorPAUSE n commandsshouldnotactuallypause Thisallowsnormallyinteractivescriptstorununattended PAUSEONindicatesthatsubsequentPAUSEcommandsshouldpause 容错函数 a errorDisplaymessageandabortfunction 例 functionfoo x y ifnargin 2error Wrongnumberofinputargument end b w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年幼儿课后看护及多元化兴趣开发服务协议
- 2025年总部子公司总经理任期目标管理与约束协议
- 2025年老年人健康体检与营养膳食指导服务合同
- 2025年度大型足球赛事举办场地租赁与赛事赞助合作协议
- 2025年智慧城市大数据处理与分析系统集成项目合同
- 2025年绿色建材运输与建筑节能认证一体化服务合同
- 2025年生物科技药物研发与临床试验咨询合同
- 2025年度环境监测数据分析与安全风险评估承包协议
- 2025年度跨境电商保健食品进口许可证授权经营合同
- 2025年度绿色环保型城市供水设施安装与保养合同范本
- 2025-2026学年接力版(2024)小学英语四年级上册(全册)教学设计(附目录)
- 2025年发展对象考试题题库及答案
- 2025年医疗质量安全核心制度及病历书写规范考核试题(附答案)
- 2025年电力交易员(高级工)考试复习题库(含答案)
- 2025北京广播电视台校园招聘17人笔试备考题库及参考答案详解
- 冷库安全基本知识培训课件
- DB11T 1481-2024 生产经营单位安全事故应急预案评审规范
- 澄海玩具行业出口中存在的问题及对策分析
- MIR睿工业:2025年中国协作机器人产业发展蓝皮书
- 工业园区集中供热配套建设项目可行性研究报告
- 2024-2030全球飞机拆解再制造行业调研及趋势分析报告
评论
0/150
提交评论