您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 电气安装工程 > MATLAB应用第4章第2版
第4章MATLAB程序设计在以前所介绍的各种运算中,命令或函数的输入都是在命令窗口下进行的,这是一种计算器输入方式,其命令的执行属于交互式的,即:在命令窗口逐条输入命令,MATLAB就逐条解释执行。这种命令输入方式操作简单、直观,但随着指令数的增加,或程序复杂程度的增加,这种命令输入方式就显得繁琐(因为输入过程也伴随执行过程)、而且执行程序不能保留,不能反复使用。为了解决这些问题,必须将程序保存在一个文件中。在MATLAB中,这种文件是以.m为扩展名的,称为m文件。4.1m文件m文件是文本文件,它可以用任何文本编辑器编辑,如用记事本、word等编辑。但是通常用MATLAB提供的文本编辑器编辑。启动MATLAB文本编辑器编辑的方法有3种1.菜单操作:“file”菜单“new”“M-file”2.命令按钮操作:点击MATLAB主窗口工具栏上的“newM-file”按钮3.命令操作:在MATLAB命令窗口输入命令:edit打开的编辑器后,输入程序后,可以以m为扩展名保存在某一个目录中。如果要打开已有的m文件,方法也有3种1.菜单操作:“file”菜单“open…”,这时出现“open”对话框。在“文件类型”下拉栏中选“M-files(.m)”,再在某一个目录中选择所需要的m文件2.命令按钮操作:点击MATLAB主窗口工具栏上的“openfile”按钮3.命令操作:在MATLAB命令窗口输入命令:edit文件名m文件分为两种,一种是脚本文件(命令文件),另一种是函数文件。脚本文件脚本文件就是以前在命令窗口输入的诸多命令的简单迭加,但是在输入过程中,并不伴随执行,而是全部输入完后保存下来,什么时候想执行就什么时候执行,命令完全按编写顺序执行。这就解决了在命令窗口运行多条命令的麻烦,同时也可以使保存的程序反复使用。例1用图形表示连续调制波形)9sin()sin(tty及其包络线。clearworkspace和clearcommandwindow在MATLAB文本编辑器编辑t=(0:pi/100:pi)';%1y1=sin(t)*[1,-1];%2y2=sin(t).*sin(9*t);%3figure,plot(t,y1,'r:',t,y2,'b');%5axis([0,pi,-1,1]);title('连续调制波形');legend('包络线1','包络线2','调制波')“debug(调试)”菜单“saveandrun”生成test1.m脚本文件,并运行它注意workspace中的变量变化如果workspace中原来没有储存变量,这时,m脚本文件中有几个变量,workspace中就会生成几个变量而且,这些变量可以被其它命令或函数调用例2在命令窗口输入figure,plot(t,y2,'b')在本例中,在命令窗口中,并没有给t,y2赋值,它们的数据都取自运行test1.m脚本文件时在workspace中生成的变量同样,在workspace中的变量也可以被m文件调用例3MATLAB文本编辑器编辑y1=sin(t)*[1,-1];%2y2=sin(t).*sin(9*t);%3figure,plot(t,y1,'r:',t,y2,'b');%5axis([0,pi,-1,1]);title('连续调制波形');legend('包络线1','包络线2','调制波')点击“file”菜单“saveas…”,生成test2.m脚本文件在这个文件中,没有给变量t赋值clearworkspace和clearcommandwindow在命令窗口输入t=(0:pi/100:pi)';这时在workspace中生成t变量在MATLAB文本编辑器中,“debug(调试)”菜单“run”在本例中,m脚本文件中的程序是借助workspace中的t变量运行以上所介绍的变量,无论是在命令窗口中赋值的,还是在m脚本文件中赋值的,只要能储存在workspace中,都称为全局变量函数文件m函数文件是以function为第1行的文件它的基本结构如下:function[输出变量列表]=函数名(输入变量列表)注释说明语句段,由%引导函数语句体说明:1.在[输出变量列表]中,如果只有一个变量,方括号可以省略2.在这种文件中,输入变量列表中所列出的变量并没有被赋值。因此m函数文件本身不能像m脚本文件那样独立地运行。它只能被其它文件或命令调用。在调用过程中,必须在命令窗口或其它文件中将输入变量列表中所列出的变量赋值。3.函数的调用格式为:[输出变量列表]=函数文件名(输入变量列表)例4用图形表示连续调制波形)9sin()sin(tty及其包络线。在MATLAB文本编辑器编辑function[y1,y2]=test3(t,n)y1=sin(n.*t)*[1,-1];%2y2=sin(n.*t).*sin(9*t);%3figure,plot(t,y1,'r:',t,y2,'b');%5axis([0,pi,-1,1]);title('连续调制波形');legend('包络线1','包络线2','调制波')点击“file”菜单“saveas…”,生成test3.m函数文件在这个文件中,输入变量列表中的变量t,n并没有被赋值下面是对这个函数文件的调用clearworkspace和clearcommandwindow在命令窗口输入t=(0:pi/100:pi)';n=1;%n=1时,与例1的情况相同[y1,y2]=test3(t,n);在这个例子中,如果给t和n赋不同的值,可以产生不同的结果例5用图形表示连续调制波形)9sin()2sin(tty及其包络线。clearworkspace和clearcommandwindow在命令窗口输入t=(0:pi/100:pi)';n=2;%n=1时,与例1的情况相同[y1,y2]=test3(t,n);在上两个例子中,在workspace都产生变量t、n、y1、y2,这和test3函数文件中的出现的变量及其数目是相同的。但是,这仅仅是巧合。例6用图形表示连续调制波形)9sin()sin(tty及其包络线和零点。在MATLAB文本编辑器编辑function[y1,y2]=test4(t,n)y1=sin(n.*t)*[1,-1];%2y2=sin(n.*t).*sin(9*t);%3t3=pi*(0:9)/9;y3=sin(t3).*sin(9*t3);figure,plot(t,y1,t,y2,t3,y3,'mo');axis([0,pi,-1,1]);title('连续调制波形');legend('包络线1','包络线2','调制波','零点')点击“file”菜单“saveas…”,生成test4.m函数文件与test3.m函数文件相比,test4.m函数文件中多了t3和y3变量,而且它们并没有出现在文件的输入列表或输出列表中clearworkspace和clearcommandwindow在命令窗口输入下面的命令,注意观察workspace的变化t=(0:pi/100:pi)';n=1;%n=1时,与例1的情况相同[y1,y2]=test4(t,n);可以看到,虽然test4.m函数文件中多了t3和y3变量,都是在workspace并没有显示出来。在workspace显示的是变量t、n、y1、y2。实际上,变量t、n、y1、y2显示在workspace也是一种巧合。例7用图形表示连续调制波形)9sin()sin(tty及其包络线和零点。clearworkspace和clearcommandwindow在命令窗口输入下面的命令,注意观察workspace的变化s=(0:pi/100:pi)';m=1;[z1,z2]=test4(s,m);这时,在workspace,根本看不到函数文件定义的变量。以前之所以在workspace能看到函数文件定义的变量,那是因为在命令窗口输入的变量碰巧和函数文件定义的变量一致。从上面的分析看到,m函数文件的变量与m脚本文件的变量不同,并不存在于workspace。实际上,每当函数文件运行时,MATLAB专门为函数文件开辟一个临时工作区间(contextworkspace)。该空间称为函数工作区间(functionworkspace)。所有中间变量都存放在函数工作区间中,当MATLAB执行完函数文件的最后一条指令后,或遇到return命令时,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量立即被清除。这些存在于函数空间的中间变量称为局部变量。它产生于该函数的运行过程中,其影响范围仅限于该函数本身。注意,在函数文件中也可以产生全局变量。这时需要通过global指令预先定义。由于全局变量会损害函数的封闭性,因此不提倡在函数文件中使用全局变量。3.m函数文件的名称可以与函数名不同。例8将test3.m另存为test5.m,并将它的函数名改为“sin”clearworkspace和clearcommandwindow在命令窗口输入t=(0:pi/100:pi)';n=1;%n=1时,与例1的情况相同[y1,y2]=test5(t,n);为了避免混乱,函数文件名应该与函数名一致注意,函数文件名不能和MATLAB中已定义的函数同名例9将test3.m另存为sin.mclearworkspace和clearcommandwindow在命令窗口输入下面的命令t=(0:pi/100:pi)';n=1;%n=1时,与例1的情况相同[y1,y2]=sin(t,n);4.2程序控制结构循环语句在实际问题中经常会遇到许多有规律的重复计算,如某些程序中需要反复执行某些语句。这就需要调用循环语句进行控制。在MATLAB中提供两种循环方式:for循环和while循环。for语句一般结构:从向量V中取一个值执行循环体遍取V中的值?endyesno赋变量初值for循环体fori=V循环结构体end其中,i为循环变量,V为一个向量,循环变量i每次从向量V中取一个值,执行一次循环体的内容,如此下去,直到执行完向量V中所有的元素,最后将自动结束循环体的执行。for循环的特点是,它的循环判断通常是对循环次数的判断。在一般情况下,循环次数是预先设定好的。例1用for循环语句求解1001iis=0;%定义变量s并赋初值fori=1:100%在循环体内,i不影响它在循环体外的预定义变量的作用s=s+i;%分号应该加上,否则会显示大量中间结果endswhile循环的基本结构:end不成立赋变量初值while循环体执行循环体条件成立while(条件式)循环结构体end其中,条件式是一个逻辑表达式,若其值为真(非0),则将自动执行循环体内容,执行后再判断条件式的真伪,为真则继续执行循环体内容,否则退出循环体结构。由于while语句具有判断控制功能,不是简单的定数循环,因此比for循环语句更灵活些,适用范围也就更广些。例2用while循环语句求解1001iis=0;i=1;%定义变量s和i并赋初值while(i=100)%i=100时在循环体内,否则退出循环体s=s+i;i=i+1;%i作为计数用ends例2求满足100001mii的最小m值这个问题用for循环不便求解,应该用while循环s=0;m=0;%定义变量s和m并赋初值while(s=10000)%s=10000时在循环体内,否则退出循环体m=m+1;s=s+m;end[s,m]选择语句在复杂的计算中,常常需要根据表达式是否满足条件来确定下一步该做什么。MATLAB提供了if语句来进行判断选择单分支if语句end不成立赋变量初值单分支if语句条件成立语句组后续语句if条件语句组end当条件成立时,执行语句组。执行完后继续执行后续语句。若条件不成立,直接执行后续语句。例3每个苹果价格是25,购买量超过5个时,给与20%的折扣。问买10个苹果需要多少钱?apples=10;%苹果的数目cost=
本文标题:MATLAB应用第4章第2版
链接地址:https://www.777doc.com/doc-2882115 .html