《MATLAB上机实验报告.docx》由会员分享,可在线阅读,更多相关《MATLAB上机实验报告.docx(19页珍藏版)》请在第一文库网上搜索。
1、MAT1AB上机实验报告专业:_姓名:学号:实验五一、实验目的3二、实验内容3三、实验步骤31 .M文件的编辑32 .程序流程控制结构31) for循环结构42) whi1e循环结构5练习53) if-e1se-end分支结构54) switc-case结构63 .子函数和参数传递6练习74 .局部变量和全局变量8MAT1AB上机练习6.1 M文件8(1)脚本文件8(2)函数文件9(3)函数调用96.2 MAT1AB的程序控制结构(1) for循环9(2) whi1e循环12(3)if译句12(4)switch语句13(5)try语句146.3 数工的M1与输出14(1)键盘输入语句14(2)
2、 屏幕输出语句146.4 MAT1AB文件操作(1)fopen语句15(2) fc1ose语句156.5 面向对象编程15创建类目录15(2)建立类的数据结构15(3)创建类的基本方法166.6 MAT1AB程序优化176.7 程序调试17实验五MAT1AB程序设计一、实验目的掌握MAT1AB程序设计的主要方法,熟练编写MAT1AB函数。二、实验内容(I)M文件的编辑。程序流程控制结构。(3)子函数调用和参数传递。(4)局部变量和全局变量。三、实验步骤1.M文件的编辑选择MAT1A的菜单FiIeINeWIM-fi1e,打开新的M文件进行编辑,然后输入以下内容,并保存文件名为exp1.m,%M脚
3、本文件%功能:计算自然数列1Ioo的数列和s=0;forn=1:100s=s+n;ends运行结果:S=5050保存好文件后,在命令窗口输入ep1即可运行该脚本文件,注意观察变量空间。接着创建M函数文件,然后输入以下内容,并保存文件名exp2m%这是M函数文件%功能:计算自然数列1X的数列和functions=exp2(x)s=0;forn=1:xs=s+n;end保存好文件后,在命令窗口输入c1ears=exp2(100)open%命令可以打开M文件进行修改openconv%打开conv函数运行结果:S=50502.程序流程控制结构1) for循环结构forn=1:10nend运行结果:n=
4、1n=2n=3n=4n=5n=6n=7n=8n=9n=10另一种形式的for循环:n=10:-1:5fori=n%循环的次数为向量n的列数iend运行结果:n=1098765i=10i=9i=8i=7i=52) whi1e循环结构在命令窗口输入:c1eac1c;x=1;whi1e1x=x*2end运行结果:X=InfX=Inf将会看到MAT1AB进入死循环,因为WhiIe判断的值恒为真,这时须按下Ctr1+C键来中断运行,并且可看到X的值为无穷大。练习2)WhiIe循环结构:(1)请把exp2.m函数文件用WhiIe循环改写。解:functions=exp2(x)s=0;n=0;whi1en1
5、0e-6s=s+(-1)n(2*n+1);k=1(2*n+1);n=n+1;endpi=4*s运行结果Pi=3.14163) if-e1se-end分支结构if-e1se-end分支有如下3种形式。(a) if表达式语句组1end(b) if表达式语句组1e1se语句组2end(c) if表达式A语句组1e1seif表达式B语句组2e1seif语句组3e1se语句组nEnd4) switch-case结构创建M脚本文件ep3.m,输入以下内容并在命令窗口中运行。%功能:判断键盘输入的数是奇数还是偶数n=input(n=);ifisempty(n)error(p1easeinputn,)ends
6、witchmod(nz2)case1A=埼数,case0A=偶数end运行结果:n=2018A=偶数n=2019A=奇数3.子函数和参数传递有一个函数g(x)n!(=1,2,3),试编写实现该函数的函数文件。n1functiong=ep4(x)1%主函数g=0;forn=1:xg=g+fact(n);%调用子函数%子函数endfunctiony=fact(k)y=i;fori=1:ky=y*;end输入参数可以由函数nargin计算,下面的例子sinp1ot2(),当只输入一个参数w时,SinP1Ot2()函数会给P赋予默认值0。functiony=sinp1ot(w,p)ifnargin2e
7、rro(ztoomanyinpuf)endifnargin=1P=0;endx=1inspace(0z2*pi,500);z=sin(x.*w+p);练习:编写求矩形面积函数rect,当没有输入参数时,显示提示信息;当只输入一个参数时,则以该参数作为正方形的边长计算其面积;当有两个参数时,则以这两个参数为长和宽计算其面积。解:functions=rect(xzy)switch(nargin)case0error(i11ega1argument);s=x*x;s=x*y;end(2)编写一个字符串加密函数nch=my_code(ch,x),其中Ch是字符串参数,x为整数;加密方法是:把Ch的每一
8、个字符的ASG1码值加上X,得到的即为加密后的新的字符串nch。由于可显示ASCH码值是有范围的(32,126),因此当得到的ASC11码值大于126时,需要减去93。同理,再编写一个解码函数nch=my_dcode(ch,x)提示:Char(32:126)可获得ASG1码值为32126的字符。解:力口密:functionnch=my_code(chzx)nch=ch+x;ifnch126nch=nch-95;char(nch)e1sechar(nch)end解码:functionnch=my-code(chz)nch=ch-x;if(nchx=input(输入向量:X=);mzn=size(
9、x);%判断输入量的大小if-(m=1)(n=1)m=1)&(n=1)%判断输入是否为向量eorC必须输入向量。,)end%计算向量X所有元素的平均值average=sum(x)1ength(x)输入向量:=123average=2(2)函数文件如果M文件的第一个可执行语句以function开始,该文件就是函数文件,每一个函数文件都定义一个函数。MAT1AB提供的函数命令大部分都是由函数文件定义的.例2:编写函数average_2()用于计算向量元素的平均值。functiony=average_2(x)%函数average_2(x)用以计算向量元%素的平均值。%输入参数X为输入向量,输出参数y
10、%为计算的平均值。%非向量输入将导致错误。m,n1=size();%判断输入量的大小if(m=1)(n=1)(m=1)&(n=1)%判断输入是否为向量error(,必须输入向量。,)endy=sum(x)1ength(x);%计算向量所有元素的平均值(3)函数调用调用函数文件的一般格式为输出参数表=函数名(输入参数表)调用函数时应注意:(1)当调用一个函数时,输入和输出参数的顺序应与函数定义时的一致,其数目可以按少于函数文件中所规定的输入和输出参数调用函数,但不能使用多于函数文件所规定的输入和输出参数数目。(2)在编写函数文件调用时常通过nargin、nargout函数来设置默认输入参数,并决
11、定用户所希望的输出参数。(3)当函数有一个以上输出参数时,输出参数包含在方括号内。(4)当函数有一个或多个输出参数,但调用时未指定输出参数,则不给输出变量赋任何值。(5)函数有自己的独立工作空间,它与MAT1AB的工作空间分开。除非使用全局变量,函数内变量与MAT1AB其他工作空间之间唯一的联系是函数的输入和输出参数。4.2 MAT1AB的程序控制结构5 1)for循环for循环允许一组命令以固定的和预定的次数重复。for循环的一般形式是for循环控制变量=表达式1:表达式2:表达式3语句End例3:求S=En的值。n从1到IOs=0;forn=1:10s=s+n;运行结果为:S=55例4:在
12、区间-2,-0.75内,以步长0.25,对函数y=f(x)=1+1/x求值,并列表显示。r=;s=;forX=-2.0:0.25:-0.75y=1+1x;r=rx;s=sy;endr;s运行结果为ans=-2.00000.5000-1.75000.4286-1.50000.3333-1.25000.2000-1.00000-0.7500-0.3333注意:for循环不能用循环内重新给循环变量赋值来终止for循环的循环变量=表达式1:表达式2:表达式3,其实为一行向量。例5:用for循环求行向量卜2,5,3,6,-2各元素之和。a=2,5,3,6,2;s=0;k=0;forn=an%显示每一次循环变量的值k=k+1;%记录循环次数s=s+n;%计算行向量a各元素之和endk,s%显示总的循环次数和计算结果运行结果为n=-2n=5n=3n6n=-2