资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,5,章,MATLAB,程序设计,M,文件简介,MATLAB,程序控制结构,函数调用和参数传递,第5章 MATLAB程序设计,MATLAB,有两种工作方式:,(,1,)交互式的命令行工作方式,通常,matlab,以,指令驱动模式,工作,即在,matlab,窗口下当用户输入,单行指令,时,,matlab,立即处理这条指令,并显示结果,这就是,matlab,命令行方式,。,MATLAB有两种工作方式:,缺点:,a.,命令行操作时,,matlab,窗口只允许一次执行一行上的一个或几个语句。,b.,命令行方式程序可读性差,c.,不能存储,当处理复杂问题和大量数据时是不方便的,应编写成能存储的程序文件。,缺点:,(,2,),M,文件的程序工作方式,较多的命令 重复输入,将要输入的所有指令按顺序放到一个,扩展名为“,.m”,的文本文件,中,每次运行时,只要输入,M,文件的文件名即可,。这种工作模式称为,M,文件的程序工作方式。,(2)M文件的程序工作方式,5.1 M,文件简介,用,MATLAB,语言编写的程序,称为,M,文件,。,5.1.1 M,文件的建立与编辑,M,文件是一个文本文件,它可以用任何编辑程序来建立和编辑,而一般常用且最为方便的是,使用,MATLAB,提供的文本编辑器,。,1,、建立新的,M,文件,启动,MATLAB,文本编辑器有,3,种方法:,方法一:菜单操作,File New M-file MATLAB Editor,窗口,输入,M,文件的内容并存盘。,5.1 M文件简介5.1.1 M文件的建立与编辑,方法二:命令操作,在,MATLAB,命令窗口输入命令,edit,,启动,MATLAB,文本编辑器后,输入,M,文件的内容并存盘。,方法三:命令按钮操作,单击,MATLAB,主窗口工具栏上的,New M-File,命令按钮 ,启动,MATLAB,文本编辑器后,输入,M,文件的内容并存盘。,注意:,M,文件的存放位置默认情况下是,MATLAB,安装目录下的,work,子目录。,方法二:命令操作方法三:命令按钮操作注意:M文件的存放位置默,2,、编辑已有的,M,文件,方法一:菜单操作,File Open Open,对话框,M,文件,方法二:命令操作,在,MATLAB,命令窗口输入命令:,edit,文件名,方法三:命令按钮操作,工具栏,Open File,选择所需打开的,M,文件。,2、编辑已有的M文件方法二:命令操作 方法三:命令,MATLAB,提供了两种源程序文件格式:,脚本文件,和,函数文件,,这两种文件的扩展名均为“,.m”,。,M,脚本(,Scripts,)文件(命令行文件):没有输入参数,也不返回输出参数;,M,函数(,Functions,)文件:可以输入参数,也可返回输出参数。,5.1.2 M,脚本文件和,M,函数文件,MATLAB提供了两种源程序文件格式:脚本文,一、,M,脚本文件(命令行文件),本质:是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。,将需要运行的命令编辑到一个命令文件中,然后在,MATLAB,命令窗口直接输入该命令文件的名字(执行方法),,就会顺序执行命令文件中的命令,该文件称为,脚本文件,。,一、M脚本文件(命令行文件)本质:是一串指令的,(,1,)脚本文件中的命令格式和前后顺序,与在命令窗口中输入的指令无区别;,(,2,)与在命令窗口中直接运行命令一样,脚本文件产生的变量都驻留在,MATLAB,的,workspace,中,可以方便查看变量;脚本文件可以直接访问,workspace,中的所有数据;,(,3,)文件的文件名要避免与,MATLAB,内置函数与工具箱中的函数重名,并要放在搜索路径内。,(1)脚本文件中的命令格式和前后顺序,与在命令窗口中输入的指,例,1,:建立一个脚本文件,将变量,a,、,b,的值互换。,解:建立,try1.m,文件,a=1:9;,b=11 12 13;14 15 16;17 18 19;,c=a;,a=b;,b=c;,a,b,指令窗口执行该程序,try1,a=,11 12 13,14 15 16,17 18 19,b=,1 2 3 4 5 6 7 8 9,例1:建立一个脚本文件,将变量a、b的值互换。指令窗口执行该,二、,M,函数文件,函数文件,(Function file),是另一种形式的,M,文件,,每一个函数文件都定义一个函数,。,1.,脚本文件和函数文件的区别:,(,1,),M,脚本文件不需要输入任何参数,也不返回任何参数,主要是为了解决在命令窗口中反复输入命令的繁琐操作;,M,函数文件通常包含输入参数,也可以返回输出参数,主要解决参数传递和函数调用的问题。,(,2,)脚本文件对,workspace,中的变量进行操作;函数文件的变量为局域变量,只有其输出的变量保存在,workspace,中。,二、M函数文件,2.,函数文件格式,function,输出形参表,=,函数名(输入形参表),函数帮助信息行,函数体,是函数的功能实现部分,特定规则:,m,函数文件第一行必须以单词,function,作为引导词;,函数信息行:给出函数的帮助信息,帮助信息要,从,%,开头,并放在一行的开头,在指令窗口中用,help+,文件名可查询到;,2.函数文件格式特定规则:,函数名的命名规则与变量名相同;,m,函数文件的,文件名,建议直接用,函数名,.m,,也可以与函数名不同,但是,调用时使用文件名,;,当函数的输出形参多于,1,个时,应用,方括号,参数之间用逗号隔开:,function a,b=mfile(x,y),;当函数无输出参数时,输出参数项应为空,或者用空的中括号表示:,function mfile(x,y),或者,function =mfile(x,y),;,函数执行后,,只保留最后的返回结果,,不保留任何中间过程。程序中的变量均为,局部变量,,不保存在工作空间中,其变量只在函数运行期间有效,随函数调用的结束而从工作空间消除。,函数名的命名规则与变量名相同;m函数文件的文件名建议直接,【,例,】,编写函数文件求小于任意自然数,n,的,Fibonacci,数列各项。,function f=ffib(n),%,用于求,Fibonacci,数列的函数文件,%f=ffib(n),%1999,年,9,月,30,日编,f=1,1;,i=1;,while f(i)+f(i+1)f2c(100),c=,37.7778,例3:建立函数文件,将华氏温度f转换为摄氏温度c,【,例,11】,利用函数的递归调用,求,n,!。,function f=factor(n),if n=1,y=2*x.2+1,elseif(x-1),y=0,else,y=-x.3,end,例,4,:计算函数,y=,function y=shuru(x)例4:计算函数y=,绘出函数 的图像。,x=-3:0.1:3;,if,x=1,y=2*x.2+1;,plot(x,y),elseif,-1x trangrade(97),ans=,A,trangrade(67),ans=,D,trangrade(55),ans=,E,例6:编写函数文件,将百分制成绩转换为五级制的成绩运行结果:,【,例,6】,根据变量,num,的值来决定显示的内容。,num=input(,请输入一个数,);,switch num,case-1,disp(I am a teacher.);,case 0,disp(I am a student.);,case 1,disp(You are a teacher.);,otherwise,disp(You are a student.);,end,三程序设计,(,一,),选择结构,【例6】根据变量 num 的值来决定显示的内容。n,5.2.2,循环结构,1.while,循环,while,循环以不定的次数重复执行一组语句。,语法为:,while,逻辑表达式,循环体语句,end,while,语句执行过程,只要表达式里面的所有元素为真,就执行,while,和,end,之间的语句,否则就结束循环。,在设计,while,循环时,,应在循环体内有修改“逻辑表达式”的部分,,确保执行了一定次数后可以退出循环。,5.2.2 循环结构,例,8,:用,while,循环求,1100,间整数的和,sum=0;,i=1;,while i=100,sum=sum+i;,i=i+1;,end,sum,sum=,5050,例8:用while循环求1100间整数的和,例,9,:编写函数文件求小于自然数,n,的婓波纳契数列各项。该数列是一整数数列,其中每个数等于前面两数之和。已知前两项为,1 1,。,function f=fbnq(n),%,计算婓波纳契数列各项,f=1 1;,i=1;,while f(i)+f(i+1)fbnq(30),ans=,1 1 2 3 5 8 13 21,例9:编写函数文件求小于自然数n的婓波纳契数列各项。该数列是,例,10,:按照下面的表达式计算,直至,1/n!,小于,0.001,。,建立脚本文件,ex10.m,error=0.001;,x=1;,y=0;,n=1;,while xerror,y=y+x;,x=x/n;,n=n+1;,end,y,运行结果:,ex10,y=,2.7181,例10:按照下面的表达式计算,直至1/n!小于0.001。建,2.for,循环,for,循环允许一条或者一组语句被重复执行预先指定的次数。,for,循环的语法为:,for,循环变量,=,表达式,1,:表达式,2,:表达式,3,循环体,end,循环次数,:,说明:,表达式,1,的值为循环变量的初值,表达式,2,的值为步长,表达式,3,的值为循环终值,当步长为,1,时,可以省略。表达式的值可以是正整数、负整数或者小数。,循环次数如何计算?,2.for循环循环次数:说明:表达式1的值为循环变量的初值,例,11,:用,for,循环求,1100,间整数的和,sum=0;,for i=1:100,sum=sum+i;,end,sum,例11:用for循环求1100间整数的和sum=0;,例,12,:使用,for,循环计算 以及,i!,(,i=1:10,)的值。,解:编写脚本文件,forsum.m,sum=0;,part=1;,for i=1:10,part=part*i;,fprintf(part(%d)=%dn,i,part),sum=sum+part;,end,fprintf(sum=%dn,sum),运行结果:,forsum,part(1)=1,part(2)=2,part(3)=6,part(4)=24,part(5)=120,part(6)=720,part(7)=5040,part(8)=40320,part(9)=362880,part(10)=3628800,sum=4037913,例12:使用for循环计算 以及i!(i=1,2.,主函数和子函数,主函数和子函数的区别:,(,1,),MATLAB,允许一个,M,函数文件包含多个函数的代码,其中第一个出现的函数称为主函数,其余的函数为子函数。,(,2,)保存时所用的函数名称与主函数定义名相同。,(,3,)主函数可以在,M,文件外部调用,而子函数不行。(,4,)同一文件的主函数和子函数的工作空间是相互独立的。,2.主函数和子函数,例,18,:编写一函数,要求输入任意两个数后,求出这两数之和与绝对值之和的积。,function ch=sub(x,y),%,主函数,ch=sub1(x,y)*sub2(x,y);,function ch=sub1(x,y),%,子函数,1,ch=x+y;,function ch=sub2(x,y),%,子函数,2,ch=abs(x)+abs(y);,运行结果:,sub(4,3),ans=,49,sub(4,-3),ans=,7,例18:
展开阅读全文