您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > matlab第7章M文件和MATLAB
第7章M文件和MATLAB编程1本章学习目标掌握MATLAB流程控制方法了解MATLAB的运行方式掌握M函数文件和M脚本文件的编写理解串演算函数和函数句柄的用法掌握程序调试方法2主要内容7.1MATLAB控制流7.2脚本文件和函数文件7.3串演算函数7.4函数句柄7.5程序调试37.1MATLAB控制流7.1.1顺序结构1.数据的输入从键盘输入数据,则可以使用input函数来进行,用来提示用户应该从键盘输入数值、字符串或表达式,并接受输入。该函数的调用格式为:A=input(提示信息,选项);其中提示信息为一个字符串,用于提示用户输入什么样的数据。如果在input函数调用时采用's'选项,则允许用户输入一个字符串。例如:number=input('Howmanyapples')%输入数值给numberHowmanyapples67number=677.1.1顺序结构顺序结构的程序设计是最简单的。在顺序结构程序中,程序源代码是按照位置的先后次序依次执行,直到最后一条语句。一般涉及数据的输入、处理和输出等内容。1.数据的输入从键盘输入数据,则可以使用input函数来进行,用来提示用户应该从键盘输入数值、字符串或表达式,并接受该输入。该函数的调用格式为:A=input(提示信息,选项);其中提示信息为一个字符串,用于提示用户输入什么样的数据。2.数据的输出在命令窗口输出数据时,可以使用disp函数,其调用格式为:disp(输出项)其中输出项既可以为字符串,也可以为矩阵。例如:disp('a')%输出字符串aa=[12;34];disp(a)%输出矩阵12347.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;ifmaxbmax=b;endifmaxcmax=c;endmax程序输出为a=?3b=?5c=?1max=52)if-else结构。其语法格式为:if条件语句组1else语句组2end当条件成立时,执行语句组1,否则执行语句组2。语句组1或语句组2执行后,再执行end后面的语句。例如:%计算分段函数的值x=input('inputx:');ifx0y=x+2;elsey=x*x;enddisp(y)执行结果:inputx:-5253)多分支if结构。其语法格式为:if条件1语句组aelseif条件2语句组b……elseif条件m语句组melse语句组nend2.switch语句switch语句是多分支选择语句。根据表达式的取值不同,分别执行不同的语句,其语法格式为:switch表达式case常量表达式1语句组1case常量表达式2语句组2……case常量表达式m语句组motherwise语句组nend说明:当表达式的值与某一个case后面的表达式的值相等时,就执行此case后面的语句,若所有的case中的表达式的值都没有与表达式的值匹配的,就执行otherwise后面的语句。switch后面的表达式只能是标量或字符串。case后面的表达式可以是标量、字符串或元胞数组,如果是元胞数组则将开关表达式与元胞数组的所有元素进行比较,只要某个元素与开关表达式相等,就执行其后的语句段。【例7.4】输入一个百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’、80~89分为’B’、70~79分为’C’、60~69分为’D’、60分以下为’E’。score=input('输入成绩:');switchfix(score/10)case{10,9}%90分以上grade='A';case8%80~89分grade='B';case7%70~79分grade='C';case6%60~69分grade='D';case{5,4,3,2,1,0}%60分以下grade='E';otherwise%不合法成绩grade='不合法成绩';enddisp(grade);7.1.3循环结构1.while语句while语句的基本语法结构为:while表达式循环体语句end【例7.5】用while语句计算的值。sum=0;n=1;whilen=100sum=sum+n;n=n+1;endsumn1003...212.for语句for语句的基本语法结构为:for循环变量=表达式1:表达式2:表达式3循环体语句end其中表达式1的值为循环变量的初值,表达式2的值为步长,表达式3的值为循环变量的终值。步长为1时,表达式2可以省略。【例7.6】用for语句计算的值。sum=0;forn=1:100sum=sum+n;endsum7.1.4break和continue语句与循环结构相关的语句还有break语句和continue语句。它们一般与if语句配合使用。当break语句使用在循环体中的时候,其作用是能够在执行循环体的时候强迫终止循环,即控制程序的流程,使其提前退出循环。当continue语句出现在循环体中的时候,其作用是能够中断本次的循环体运行,继续下一次的循环。【例7.8】计算的值,当和大于1000时终止计算。sum=0;n=1;whilen=100ifsum1000sum=sum+n;n=n+1;elsebreakendendsumn7.2脚本文件和函数文件7.2.1M文件的建立与打开(1)菜单操作。从MATLAB主窗口的File菜单中选择New菜单项,再选择M-file命令;(2)命令操作。在MATLAB命令窗口输入命令edit;(3)命令按钮操作。直接单击MATLAB用户界面工具栏上的新建按钮图标。7.2.2脚本文件脚本文件是最简单的一种M文件,由一系列的MATLAB指令组成的纯文本格式的M文件。脚本文件的特点:(1)脚本文件没有输入参数,也没有输出参数;(2)运行脚本文件时,只是简单地按顺序从文件中读取一条条命令,送到MATLAB命令窗口中去执行;(3)与在命令窗口中直接运行命令一样,脚本文件运行产生的变量都是驻留在MATLAB的工作空间(workspace)中,可以很方便地查看变量,除非用clear命令清除;(4)脚本文件的命令也可以访问工作空间的所有数据,因此要注意避免变量的覆盖而造成程序出错。【例7.10】设计一个脚本文件,读取一个华氏温度的输入,输出开尔文温度。华氏温度和开尔文温度的转换关系式为:15.273)0.32)((95)(摄氏度开尔文TT%Scriptfiletemp_conversion.m%ToconvertaninputtemperaturefromdegreesFahrenheitto%anoutputtemperatureinkelvins.%f--TemperatureindegreesFahrenheit%k--Temperatureinkelvinsclear;f=input('InputFahrenheittemperature:');%converttokelvins.k=(5/9)*(f-32)+273.15;%writeouttheresult.fprintf('%6.2fdegreesFahrenheit=%6.2fkelvins.\n',f,k);说明:运行脚本文件,其变量都保存在workspace中。这一点与后面讲到的M函数文件不同。脚本文件主要由注释行和代码行组成。给程序写注释行是一种良好的编程习惯,有助于日后对程序的维护和管理。7.2.3函数文件1.函数文件的基本结构函数文件由function语句引导,其基本结构为:function返回变量=函数名(输入变量)注释说明语句段程序语句段说明:第一行总是以“function”引导的函数声明行,表示该M文件是一个函数文件。函数名的命名规则与变量名相同。输入变量为函数的输入参数,返回变量为函数的输出参数。当输出形参多于一个时,则需要用方括号括起来。函数文件中的变量均为局部变量,不保存在工作空间中,其变量只在函数运行期间有效。当文件执行完最后一条命令或遇到“return”命令时,就结束函数文件的运行,同时函数工作空间的变量就被清除。【例7.11】设计一个函数文件,将华氏温度转化为开尔文温度。在打开的M文件编辑器输入以下命令,保存文件为temperature.m。functionk=temperature(f)%ToconvertaninputtemperaturefromdegreesFahrenheitto%anoutputtemperatureinkelvins.%Definevariables:%f--TemperatureindegreesFahrenheit%k--Temperatureinkelvins%converttokelvins.k=(5/9)*(f-32)+273.15;【例7.12】计算第n个fibonnaci数。functionf=fibfun(n)%FIBFUNForcalculatingFibonaccinumbers.%Incidengtally,thenamefibonaccicomesfromFiliusBonassi%fibfun.mifn2f=fibfun(n-1)+fibfun(n-2);%递归调用elsef=1;end4.函数的参数MATLAB的函数调用有一个与其它语言不同的地方,就是函数的输入和输出的参数的数目可以改变,从而可以使一个函数可以完成很多功能。函数的输入输出参数的个数可以通过变量nargin和nargout获得,nargin用于获得输入参数的个数,nargout用于获得输出参数的个数。nargin%在函数体内获取实际输入变量的个数nargout%在函数体内获取实际输出变量的个数nargin(‘fun’)%在函数体外获取定义的输入参数个数nargout(‘fun’)%在函数体外获取定义的输出参数个数【例7.13】函数test1的功能是输出a和b的和。如果只输入一个变量,则认为另一个变量为0,如果两个变量都没有输入,则默认两者均为0(narg.m)。functiony=narg(a,b)%参数个数可变,计算a和b的和ifnargin==0a=0;b=0;elseifnargin==1b=0;endy=a+b;6.局部变量和全局变量局部变量是在函数体内部使用的变量,其影响范围只能在本函数内,只在函数执行期间存在。一旦函数结束运行,则变量占用的内存空间自动释放,变量的数值也不存在了。在命令窗口调用一个函数文件,工作窗口将看不见函数文件中的局部变量。全局变量是可以在不同的函数工作空间和MATALB工作空间中共享使用的变量,全局变量用命令global定义。全局变量的作用域是整个MATLAB工作空间,即全程有效。所有的函数都可以对它进行存取和修改。因此,定义全局变量是函数间传递信息的一种手段。7.3串演算函数7.3.1eval函数eval对字符串进行处理,得到数值解。语法格式为:eval('字符串')【例7.15】先定义字符串,再用eval求出1到4阶的魔方矩阵(eval_magic.m)。程序如下:%GenerateasequenceofmatricesnamedM1throughM4clearforn=1:4eval(['M'num2str(n)'=magic(n)'])end7.3.2feval语法格式为:feval('字符串',数组)求由字符串给定的函数值,其输入参量是数组。例如,a=feval('sqrt',2)a=1.4142即等价于求sqrt(2)值。7.4函数句柄函数句柄(Functionhandle)是MATLAB6.0以后版本启用的新数据类型,可以用变量来表示函数的句柄。为一个函数定义句柄的方法有两种:第一种是利用@符号,语法格式为:变量名=@函数名此处地函数名可以是
本文标题:matlab第7章M文件和MATLAB
链接地址:https://www.777doc.com/doc-4281135 .html