第6章M文件和MATLAB编程_第1页
第6章M文件和MATLAB编程_第2页
第6章M文件和MATLAB编程_第3页
第6章M文件和MATLAB编程_第4页
第6章M文件和MATLAB编程_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、第第6章章 M文件和文件和MATLAB 编程编程1本章学习目标n掌握MATLAB流程控制方法n了解MATLAB的运行方式n掌握M函数文件和M脚本文件的编写n理解串演算函数和函数句柄的用法n掌握程序调试方法2主要内容n6.1 MATLAB控制流n6.2 脚本文件和函数文件n6.3 串演算函数n6.4 函 数 句 柄n6.5 程 序 调 试36.1 MATLAB控制流6.1.1顺序结构1.数据的输入从键盘输入数据,则可以使用input函数来进行,用来提示用户应该从键盘输入数值、字符串或表达式,并接受输入。该函数的调用格式为:A=input(提示信息,选项);其中提示信息为一个字符串,用于提示用户输

2、入什么样的数据。如果在input函数调用时采用s选项,则允许用户输入一个字符串。例如: number = input(How many apples) %输入数值给numberHow many apples67number = 676.1.1顺序结构顺序结构n顺序结构的程序设计是最简单的。在顺序结构程序中,程序源代码是按照位置的先后次序依次执行,直到最后一条语句。一般涉及数据的输入、处理和输出等内容。1.数据的输入从键盘输入数据,则可以使用input函数来进行,用来提示用户应该从键盘输入数值、字符串或表达式,并接受该输入。该函数的调用格式为:A=input(提示信息,选项);其中提示信息为一个

3、字符串,用于提示用户输入什么样的数据。2.数据的输出在命令窗口输出数据时,可以使用disp函数,其调用格式为: disp(输出项)其中输出项既可以为字符串,也可以为矩阵。例如: disp(a) %输出字符串a a=1 2;3 4; disp(a) %输出矩阵 1 2 3 46.1.2选择结构选择结构1.if结构在MATLAB中,if语句有3种基本格式。1)if语句。其语法格式为:if 条件 语句组end【例7.1】输入3个数,输出其中的最大值。a=input(a=?);b=input(b=?);c=input(c=?);max=a;if maxb max=b;endif max0 y=x+2;

4、else y=x*x;enddisp(y)执行结果:input x:-5253)多分支if结构。其语法格式为:if 条件1 语句组aelseif 条件2 语句组b elseif 条件m 语句组melse 语句组nend2.switch语句switch语句是多分支选择语句。根据表达式的取值不同,分别执行不同的语句,其语法格式为:switch 表达式 case 常量表达式1 语句组1 case 常量表达式2 语句组2 case 常量表达式m 语句组m otherwise 语句组nend说明:n当表达式的值与某一个case后面的表达式的值相等时,就执行此case后面的语句,若所有的case中的表达式

5、的值都没有与表达式的值匹配的,就执行otherwise后面的语句。nswitch后面的表达式只能是标量或字符串。ncase后面的表达式可以是标量、字符串或元胞数组,如果是元胞数组则将开关表达式与元胞数组的所有元素进行比较,只要某个元素与开关表达式相等,就执行其后的语句段。【例6.4】输入一个百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为 A、8089分为B、 7079分为C、 6069分为D、 60分以下为E。score=input(输入成绩:);switch fix(score/10) case 10,9 %90分以上 grade=A; case 8 %8089分 grade=

6、B; case 7 %7079分 grade=C; case 6 %6069分 grade=D; case 5,4,3,2,1,0 %60分以下 grade=E; otherwise %不合法成绩 grade=不合法成绩;enddisp(grade);6.1.3循环结构循环结构1.while语句while语句的基本语法结构为:while 表达式 循环体语句end【例7.5】用while语句计算 的值。sum=0;n=1;while n=100 sum=sum+n; n=n+1 ;endsumn1003.212.for语句for语句的基本语法结构为:for 循环变量=表达式1:表达式2:表达式3

7、 循环体语句end其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。【例6.6】用for语句计算的值。sum=0;for n=1: 100 sum=sum+n;endsum6.1.4break和和continue语句语句与循环结构相关的语句还有break语句和continue语句。它们一般与if语句配合使用。n当break语句使用在循环体中的时候,其作用是能够在执行循环体的时候强迫终止循环,即控制程序的流程,使其提前退出循环。n当continue语句出现在循环体中的时候,其作用是能够中断本次的循环体运行,继续下一次的循环。【例6.

8、8】计算的值,当和大于1000时终止计算。sum=0;n=1;while n=100 if sum2 f=fibfun(n-1)+fibfun(n-2); %递归调用else f=1;end4.函数的参数MATLAB的函数调用有一个与其它语言不同的地方,就是函数的输入和输出的参数的数目可以改变,从而可以使一个函数可以完成很多功能。函数的输入输出参数的个数可以通过变量nargin和nargout获得,nargin用于获得输入参数的个数,nargout用于获得输出参数的个数。nargin %在函数体内获取实际输入变量的个数nargout %在函数体内获取实际输出变量的个数nargin(fun) %

9、在函数体外获取定义的输入参数个数nargout(fun) %在函数体外获取定义的输出参数个数【例6.13】函数test1的功能是输出a和b的和。如果只输入一个变量,则认为另一个变量为0,如果两个变量都没有输入,则默认两者均为0 (narg.m)。function y=narg(a,b) %参数个数可变,计算a和b的和if nargin=0 a=0;b=0; elseif nargin=1 b=0; end y=a+b;6.局部变量和全局变量局部变量是在函数体内部使用的变量,其影响范围只能在本函数内,只在函数执行期间存在。一旦函数结束运行,则变量占用的内存空间自动释放,变量的数值也不存在了。在命

10、令窗口调用一个函数文件,工作窗口将看不见函数文件中的局部变量。全局变量是可以在不同的函数工作空间和MATALB工作空间中共享使用的变量,全局变量用命令global定义。全局变量的作用域是整个MATLAB工作空间,即全程有效。所有的函数都可以对它进行存取和修改。因此,定义全局变量是函数间传递信息的一种手段。6.3 串演算函数6.3.1 eval函数eval对字符串进行处理,得到数值解。语法格式为:eval(字符串)【例6.15】先定义字符串,再用eval求出1到4阶的魔方矩阵 (eval_magic.m)。程序如下:%Generate a sequence of matrices named M

11、1 through M4clearfor n = 1:4 eval(M num2str(n) = magic(n)end6.3.2feval语法格式为:feval(字符串,数组)求由字符串给定的函数值,其输入参量是数组。例如,a=feval(sqrt,2)a = 1.4142即等价于求sqrt(2)值。6.4 函数句柄函数句柄(Function handle)是MATLAB6.0以后版本启用的新数据类型,可以用变量来表示函数的句柄。为一个函数定义句柄的方法有两种:第一种是利用符号,语法格式为:变量名=函数名此处地函数名可以是当前MATLAB中可以使用的任意函数 例如: mysin=sin, 此

12、后mysin就和sin同样地使用, mysin(pi)和sin(pi)的含义相同。第二种是利用转换函数str2func,语法格式为:变量名= str2func(函数名) 【例6.16】编写一个函数文件,通过函数句柄绘制图形。(trigPlot.m)function trigPlot(h, val)% Verify that h is a function handle.% Call the function mapped to handle h.if isa(h, function_handle) A = h(val); plot(A) % Plot the resulting data.en

13、d6.5程序调试6.5.1程序调试概述在开发M文件过程中,不可避免地出现错误(Bug)。 应用程序的错误主要有两类,一类是语法错误,另一类是运行时的错误。语法错误包括词法或文法的错误,例如函数名的拼写错、表达式书写错等。一旦发现语法错误,MATLAB立即标志这些错误,并提供有关所遇到的错误类型,以及发生错误处在M文件的行数。给定这些反馈信息,以便纠正这些错误。 6.5.2调试器调试器找到错误的最好的方法是应用MATLAB支持的调试器(debugger)。M文本编辑器事实上就是调试器,包含了一系列的调试图标。在工具栏的debug下拉式菜单中包含了很多的调试选项。调试菜单debug如图7.4所示。

14、在debug下拉菜单中,可以进行单步运行操作和断点操作。在程序运行前,单步菜单Step、Step In和Step Out都处于非激活状态,Run是处于激活状态的。只有当对设置了断点的程序运行的过程中,可以激活单步菜单。debug下拉菜单的主要功能为:Step:不进入函数单步运行。Step In:进入函数单步运行。Step Out:停止单步运行。如果在函数中,跳出函数;如果不在函数中,直接运行到下一个断点处。Run:运行,运行过程中暂停在断点处时,该项变为continue。Go Until Cursor:运行到光标所在的位置。Set/Clear Breakpoints:设置、清除断点。Set/M

15、odify Conditional Breakpoints:设置/修改条件断点。设置断点是高级语言中程序调试的重要手段之一,断点是在程序特定位置设置的中断点,当程序运行至断点处时会暂停运行,此时可通过检查相关变量的内容等方法确定程序的运行是否正确。图中的红色菱形点即为设置的断点。Enable/Disable Breakpoints:使断点有效和无效。Clear Breakpoints in All Files:清除所有断点。Stop if Errors/Warnings:遇到错误/警告停止程序运行。表6-1 程序调试命令命令功能dbclear清除已经设置好的断点dbcont继续执行dbdown/dbup修改当前工作空间的上、下文关系dbquit退出调试状态dbstack显示当前堆

温馨提示

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

最新文档

评论

0/150

提交评论