实验五M文件和MATLAB程序设计一、实验目的matlab作为一种高级计算机语言,不仅可以命令行方式完成操作,也具有数据结构、控制流、输入输出等能力,本次实验通过熟悉和掌握m文件的建立与使用方法,以及函数与控制程序流程语句的使用,使学生具备一定的编程和程序调试能力。1.掌握M文件的使用方法。2.掌握if语句和switch语句的使用3.掌握循环语句的使用4.通过练习理解MATLAB编程方法。二、实验原理1.m文件用matlab语言编写的程序,称为m文件。M文件根据调用方式的不同分为两类,命令文件(Scriptfile)和函数文件(Functionfile)。区别?2.程序控制结构1)顺序结构2)选择结构(1)if语句a)单分支if语句b)双分支if语句c)多分支if语句(2)switch语句(3)try语句3)循环结构(1)for语句(2)while语句(3)break语句、continue语句、return使用,区别?3.函数文件function输出形参表=函数名(输入形参表)注释说明部分函数体语句三、实验要求1.首先上机练习PPT中各种流程控制语句的有关实例。2.然后上机练习下面的实验习题。四、实验习题1.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如:21310516842163105168421运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。%classic3n+1problemfromnumbertheory.while1n=input('Entern,negativequits:');ifn=0breakenda=n;whilen1ifrem(n,2)==0n=n/2;elsen=3*n+1;enda=[a,n];endaendEntern,negativequits:3a=31051684212.编程求满足mii1100002的最小m值。a=0;i=1;while(a10000)a=a+pow2(i);i=i+1;endm=i-1;m133.编写一个函数,计算下面函数的值,给出x的值,调用该函数后,返回y的值。function[y]=myfun1(x)3,630,0,sin)(xxxxxxxy选择一些数据测试你编写的函数。functiony=myfun1(x)ifx=0y=sin(x);elseifx0&x=3y=x;elseifx3y=-x+6;end运行结果:y=myfun1(-pi/2)y=-1y=myfun1(0)y=0y=myfun1(2)y=2y=myfun1(4)y=24.用如下迭代公式求a,a的值分别为:3,17,113。迭代的终止条件为5n1n10xx,迭代初值0.1x0,迭代次数不超过100次。分别对迭代结果和准确值进行比较,并统计迭代次数。迭代公式:11122nnnxaxxfunction[x,n]=sqrt_a(a)x=1.0;fork=1:100m=x;x=x/2+a/(2*x);ifabs(x-m)=10^(-5)breakendendx;n=k;s=(x-sqrt(a));ifs=10^(-5)disp('正确');elsedisp('错误');end下面调用举例:运行结果:[x,n]=sqrt_a(3)正确x=1.7321n=5[x,n]=sqrt_a(17)正确x=4.1231n=6[x,n]=sqrt_a(113)正确x=10.6301n=85.定义一个函数文件,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数文件。程序设计:function[elnsc]=num(x)e=exp(x)ln=log(x)s=sin(x)c=cos(x)end运行结果:num(5i)e=0.2837-0.9589iln=1.6094+1.5708is=0+74.2032ic=74.2099ans=0.2837-0.9589i6.设f(x)=01.011.01)3()2(42xx,编写一个MATLAB函数文件fx.m,使得调用f(x)时,x可用矩阵代入,得出的f(x)为同阶矩阵。程序设计:函数文件fx.m:functionA=fx(x)A=1./((x-2).^2+0.1)+1./(((x-3).^4)+0.01)end调用fx.m的命令文件:A=fx([12;23;43])运行结果:A=0.971610.990110.9901100.90911.2340100.90917.已知y=)20()30()40(fff当f(n)=n+10ln(n2+5)时,求y的值。程序设计:函数文件fn.m:functionx=fn(n)x=n+10*log(n^2+5)end调用fn.m的命令:y=fn(40)/(fn(30)+fn(20))运行结果:y=0.63908.将下列脚本式m文件改写成函数式m文件:(1)输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符则输出其对应的数值,若为其他字符则原样输出。c=input('请输入一个字符','s');%a是字符,'a'是字符串ifc='A'&c='Z'disp(setstr(abs(c)+abs('a')-abs('A')));%加32elseifc='a'&c='z'disp(setstr(abs(c)-(abs('a')-abs('A'))));elseifc='0'&c='9'disp(abs(c)-abs('0'));elsedisp(c);end%必须与if配对使用编写一个函数式m文件,实现程序的功能c=input('请输入一个字符','s');FunctionM=disp(c);ifc='A'&c='Z'M=setstr(abs(c)+abs('a')-abs('A'))elseifc='a'&c='z'M=setstr(abs(c)-(abs('a')-abs('A')))elseifc='0'&c='9'M=abs(c)-abs('0')end(2)某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示):price200没有折扣200≤price5002%折扣500≤price10005%折扣1000≤price250010%折扣2500≤price500025%折扣5000≤price50%折扣输入所售商品的价格,求其实际销售价格。程序如下:price=input('请输入商品价格');switchfix(price/100)%向零的方向取整case{0,1}%价格小于200rate=0;case{2,3,4}%价格大于等于200但小于500rate=2/100;casenum2cell(5:9)%价格大于等于500但小于1000%为简便采用元胞数组rate=5/100;casenum2cell(10:24)%价格大于等于1000但小于2500rate=10/100;casenum2cell(25:49)%价格大于等于2500但小于5000rate=25/100;otherwise%价格大于等于5000rate=50/100;endprice=price*(1-rate)%输出商品实际销售价格编写一个函数式m文件,计算顾客实际付款数目。Functionprice=f(rate)switchfix(price/100)case{0,1}rate=0;case{2,3,4}rate=2/100;casenum2cell(5:9)rate=5/100;casenum2cell(10:24)rate=10/100;casenum2cell(25:49)rate=25/100;otherwiserate=50/100;Price=price*(1-rate)end9.一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。程序如下:•form=100:999m1=fix(m/100);%求m的百位数字•m2=fix((m-m1*100)/10);%求m的十位数字•m3=m-m1*100-m2*10;%求m的个位数字•ifm==m1*m1*m1+m2*m2*m2+m3*m3*m3•disp(m)•end•end编写一个函数式m文件,来判断一个三位数是不是水仙花数。Functionm=f(Mn)•form=100:999m1=fix(m/100);•m2=fix((m-m1*100)/10);•m3=m-m1*100-m2*10;•ifm==m1*m1*m1+m2*m2*m2+m3*m3*m3•disp(m)•end•end10.从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们的和。程序如下:sum=0;%用于存放和n=0;%用于统计输入的数的个数val=input(‘Enteranumber:’);%在循环体外初始while(val~=0)sum=sum+val;n=n+1;val=input(‘Enteranumber:’);若无此句只能输入一个数endif(n0)summean=sum/nEnd改写成M文件Functionmean=fn(n)sum=0;n=0;val=input(‘Enteranumber:’);while(val~=0)sum=sum+val;n=n+1;val=input(‘Enteranumber:’);if(n0)summean=sum/nend五、实验心得通过本次实验,我了解了MATLAB的工作模式和M文件的构成规则,了解了命令M文件和函数M文件的异同。会MATLAB的M文件的创建与修改,会使用函数句柄调用函数,会运用顺序结构、循环结构和分支结构进行计算机编程。会控制MATLAB的程序流,熟悉了应用程序设计的基本步骤。能对文件进行简单操作,会调试和优化所设计的程序。对应用程序接口的设计也有所了解。MATLAB语言被称为第四代编程语言,程序简洁、可读性很强,而且调试十分容易。它是MATLAB重要组成部分。通过这次试验我已经对MATLAB的工作模式有一个大致的了解,并掌握如何创建M文件,包括命令文件和函数文件。熟练地掌握MATLAB的程序设计流程和程序设计的基本结构,并能初步设计一些简单的能解决实际问题的程序。实验成绩:________________实验日期和地点:东港学院实验指导教师:宁伟