您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 第七讲_matlab语言的语句控制
第七章MATLAB的语句流程与控制——matlab语言称为第四代编程语言,程序简洁、可读性很强而且调试十分容易。是matlab重要组成部分。matlab的工作模式:•命令驱动模式(交互式的命令行工作模式)•m文件模式命令驱动模式通常matlab以命令驱动模式工作,即在matlab窗口下当用户输入单行命令时,matlab立即处理这条命令,并显示结果,这就是matlab命令行方式。命令行操作时,matlab窗口只允许一次执行一行上的一个或几个语句。例如:x1=0:10x1=012345678910x2=0:3:11x2=0369x3=11.5:-3:0x3=11.50008.50005.50002.5000x1=0:10,x2=0:3:11,x3=11.5:-3:0x1=012345678910x2=0369x3=11.50008.50005.50002.5000缺点:•在matlab窗口输入数据和命令进行计算时,当处理复杂问题和大量数据时是不方便的。因此应编辑m文件。•命令行方式程序可读性差,而且不能存储,对于复杂的问题,应编写成能存储的程序文件。m文件模式将matlab语句构成的程序存储成以m为扩展名的文件,然后再执行该程序文件,这种工作模式称为程序文件模式。程序文件不能在命令窗口下建立,因为命令窗口只允许一次执行一行上的一个或几个语句。第一节M文件一、m文件的创建1.在matlab窗口点击file菜单newm-file3.在matlab命令窗口运行edit。2.在matlab窗口工具栏上单击图标。。二、m文件分类•命令文件(脚本文件)•函数文件1.命令文件—简单的m文件命令文件实际上是一串指令的集合,与在命令窗口逐行执行文件中的所有指令,其结果是一样的。没有输入输出参数。命令文件包括两部分:注释文件和程序文件%Thisprogramisdiaohuan.%2010-3-12a=[1:9];b=[256;980;121618];c=a;a=b;b=c;注:•在语句行之后输入分号使其及中间结果不在屏幕上显示,以提高执行速度。•查看此文件的结果,在命令窗口执行此文件即可(即在命令窗口输入该文件名)。2.m函数文件—需要输入变量,返回输出变量matlab用户可以根据需要编辑自己的m文件,它们可以像库函数一样方便的调用,从而极大地扩展了matlab的能力。•对于某一类特殊问题,如创建了许多m函数文件,则可形成新的工具箱。•这种用matlab语言创建定义新的matlab函数的功能,正体现了matlab语言强大的扩展功能。函数m文件的格式:function返回变量=函数名(输入变量)注释说明语句段程序语句段说明:•定义行。•函数帮助信息行。•函数体。•注释部分。•m文件的文件名必须是函数名.m。•程序中的变量均为局部变量,不保存在工作空间中。变量只在函数运行期间有效。•函数名的命名规则与变量名相同。特定规则:例:求小于任意自然数n的Fibonacci数列各项的和。function[f,i]=ffib(n)%FFIB是一个示范性的例子%用于求Fibonacci数列的函数文件%f=ffib(n)%2010-3-12f=[1,1];i=1;whilef(i)+f(i+1)nf(i+2)=f(i)+f(i+1);i=i+1;end第二节控制结构matlab语言的程序结构与其它高级语言是一致的,分为•顺序结构•循环结构•分支结构。一、条件分支结构——根据一定条件来执行的各条语句•if表达式%if(表达式)执行语句end•if表达式———是语句1else————否语句2end1.if语句if表达式1———多分支语句1elseif表达式2语句2elseif表达式3语句3···else语句nend这种结构实现了一种多路选择,比较复杂。可替代一般高级语言中的switch-case-end语句。注:有几个if语句,对应有几个end。2.switch语句switch数值或字符串case数值语句段1case数值语句段2··otherwise语句段nendfunctionf=TranGrade(x)switchx/10;%switch(x/10)case{10,9};f='A';case8,f='B';case7,f='C';case6,f='D';otherwisef='E';end在条件表达式中,通常都是由关系操作符,,=,=,==,~=等逻辑操作符&,|,~等逻辑函数:isequal——若是相等则为真isempty——若是空矩阵则为真isstr——若是字符串则为真例:编写m函数,计算函数值x(x1)2x-1(1x10)3x-11(x=10)functionf=three(x)if(x1)f=x;elseif(x1&x10),f=2*x-1;else,f=3*x-11;endend3.检测语句try—catch语句用于检测错误并改变流程。try语句段1catch语句段2endn=4;a=magic(3);trya_n=a(n,:);catcha_n=a(end,:)endlasterra_n=492ans=Attemptedtoaccessa(4,:);indexoutofboundsbecausesize(a)=[3,3].例矩阵乘法运算要求两矩阵的维数相容,否则会出错。先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘。A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*B;catchC=A.*B;endClasterr%显示出错原因二、循环结构1.for—end语法为:fori=表达式(表达式为一个向量)可执行语句end例:利用for循环求1!+2!+3!++5!的值。sum=0;fori=1:5pdr=1;fork=1:ipdr=pdr*k;endsum=sum+pdr;endsum=153注:此函数名不能为sum。书上的例子较好while—end循环语法为:while表达式循环体语句end表达式一般是由逻辑运算和关系运算以及一般运算组成的,以判断循环的进行和停止;只要表达式的值非0,继续循环;直到表达式值为0,循环停止。例:用while循环求1~100间整数的和。sum=0;i=1;whilei=100sum=sum+i;i=i+1;endsum=5050三、matlab程序流的控制1.input--提示用户从键盘输入数值、字符串、表达式调用格式为:A=input(提示信息,选项);其中提示信息为一个字符串,用于提示用户输入什么样的数据。例:n=input('Howmanyapples=')Howmanyapples=5n=5如果选项是‘s’,则允许用户输入一个字符串。例如,想输入一个人的姓名,可采用命令:xm=input('What''syourname?','s')例求一元二次方程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)];2.pause---暂停,等待用户响应其调用格式为:pause(延迟秒数)如果省略延迟时间,直接使用pause,则将暂停程序,直到用户按任一键后程序继续执行。3.disp函数调用格式为:disp(输出项)其中输出项既可以为字符串,也可以为矩阵。也可以为变量名。注意:用disp函数显示矩阵时将不显示矩阵的名字,而且其格式更紧密,且不留任何没有意义的空行。例:disp(‘hello’)disp([12;45])a=eye(3)disp(a)4.keyboard命令一般使用在m-files里面,作用就是,当你运行m-files的程序时,它会在keyboard的位置停下,并且在命令窗口出现》K,这时你可以在命令窗口中输入命令,可以测试软件已经运行的程序(keyboard以上的程序),或者可以改变已运行程序所得到的变量!你可以在workspace里面观察变量的变化!当你调试好了以后,在》K后面输入return,程序就会接着刚才的继续运行(就是运行keyboard以后的程序。其实keyboard就是调试程序时候用的,比较常用的还有pause,但pause不可以改变已运行程序得出变量例求一元二次方程ax2+bx+c=0的根。程序如下:a=input('a=?');b=input('b=?');c=input('c=?');d=b*b-4*a*c;keyboard;x=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];disp(x);注:与pause比较一下。5.error命令调用格式为:error(‘字符串’)6.warning命令调用格式为:warning(‘字符串’)上例程序a=input('a=?');b=input('b=?');c=input('c=?');d=b*b-4*a*c;if(d0)error(‘inputerror!’);endx=[(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a)];注:与warning比较一下。第三节函数调用和参数传递一、函数调用函数调用的一般格式是:[输出实参表]=函数名(输入实参表)例利用函数文件,实现直角坐标(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二、函数所传递参数的可调性在调用函数时,MATLAB用两个永久变量nargin和nargout分别记录调用该函数时的输入实参和输出实参的个数。只要在函数文件中包含这两个变量,就可以准确地知道该函数文件被调用时的输入输出参数个数,从而决定函数如何进行处理。例nargin用法示例。函数文件examp.m:functionfout=examp(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)三、全局变量和局部变量全局变量用命令global定义。函数文件的内部变量是局部的,与其他函数文件及MATLAB工作空间相互隔离。例全局变量应用示例。先建立函数文件wadd.m,该函数将输入的参数加权相加。functionf=wadd(x,y)globalALPHABETAf=ALPHA*x+BETA*y;在命令窗口中输入:globalALPHABETAALPHA=1;BETA=2;s=wadd(1,2)
本文标题:第七讲_matlab语言的语句控制
链接地址:https://www.777doc.com/doc-2119174 .html