实验五--M文件和MATLAB程序设计实验五 M文件和MATLAB程序设计一、实验目的matlab作为一种高级计算机语言,不仅可以命令行方式完成操作,也具有数据结构、控制流、输入输出等能力,本次实验通过熟悉和掌握m 文件的建立与使用方法,以及函数与控制程序流程语句的使用,使学生具备一定的编程和程序调试能力。
1.掌握M文件的使用方法。
2.掌握if语句和switch语句的使用3. 掌握循环语句的使用4. 通过练习理解MATLAB编程方法。
二、实验原理1.m文件用matlab语言编写的程序,称为m文件。
M文件根据调用方式的不同分为两类,命令文件(Script file)和函数文件(Function file)。
区别?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。
如:3→10→5→16→8→4→2→16→3→10→5→16→8→4→2→1运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。
%classic "3n+1" problem from number theory.while 1n=input('Enter n,negative quits:');if n<=0breakenda=n;while n>1if rem(n,2)==0n=n/2;elsen=3*n+1;enda=[a,n];endaEnter n,negative quits:3a =3 10 5 16 84 2 12. 编程求满足∑=>m i i 1100002的最小m 值。
a=0;i=1; while (a<10000) a=a+pow2(i); i=i+1; end m=i-1; m 13 3. 编写一个函数,计算下面函数的值,给出x 的值,调用该函数后,返回y 的值。
function [y]=myfun1(x)⎪⎩⎪⎨⎧>+-≤<≤=3,630,0,sin )(x x x x x x x y选择一些数据测试你编写的函数。
function y=myfun1(x) if x<=0 y=sin(x); elseif x>0&x<=3 y=x; elseif x>3 y=-x+6; end 运行结果:>> y=myfun1(-pi/2) y = -1 >> y=myfun1(0)y = 0 >> y=myfun1(2) y = 2 >> y=myfun1(4) y = 24. 用如下迭代公式求a ,a 的值分别为:3,17,113。
迭代的终止条件为5n1n 10x x -+≤-,迭代初值0.1x 0=,迭代次数不超过100次。
分别对迭代结果和准确值进行比较,并统计迭代次数。
迭代公式:11122--++=n n n x a x xfunction [x, n]=sqrt_a(a) x=1.0; for k=1:100 m=x; x=x/2+a/(2*x); if abs(x-m)<=10^(-5) break end end x; n=k; s=(x-sqrt(a)); if s<=10^(-5) disp('正确'); else disp('错误'); end 下面调用举例:运行结果:>> [x ,n]=sqrt_a(3) 正确x = 1.7321 n = 5 >> [x, n]=sqrt_a(17) 正确x = 4.1231 n = 6>> [x,n]=sqrt_a(113)正确x = 10.6301n =85.定义一个函数文件,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数文件。
程序设计:function [e ln s c]=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(42+++--x x ,编写一个MATLAB 函数文件fx.m ,使得调用f(x)时,x 可用矩阵代入,得出的f(x)为同阶矩阵。
程序设计:函数文件fx.m:function A=fx(x)A=1./((x-2).^2+0.1)+1./(((x-3).^4)+0.01)end调用fx.m 的命令文件:>> A=fx([1 2;2 3;4 3])运行结果:A =0.9716 10.990110.9901 100.90911.2340 100.90917. 已知y=)20()30()40(f f f +当f(n)=n+10ln(n 2+5)时,求y 的值。
程序设计:函数文件fn.m:function x=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'是字符串if c>='A' & c<='Z'disp(setstr(abs(c)+abs('a')-abs('A'))); %加32elseif c>='a'& c<='z'disp(setstr(abs(c)-(abs('a')-abs('A'))));elseif c>='0'& c<='9'disp(abs(c)-abs('0'));elsedisp(c);end %必须与if配对使用编写一个函数式m文件,实现程序的功能c=input('请输入一个字符','s');Function M=disp(c);if c>='A' & c<='Z'M=setstr(abs(c)+abs('a')-abs('A'))elseif c>='a'& c<='z'M=setstr(abs(c)- (abs('a')-abs('A'))) elseif c>='0'& c<='9'M=abs(c)-abs('0')end(2)某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price 来表示):price<200 没有折扣200≤price<500 2%折扣500≤price<1000 5%折扣1000≤price<2500 10%折扣2500≤price<5000 25%折扣5000≤price 50%折扣输入所售商品的价格,求其实际销售价格。
程序如下:price=input('请输入商品价格');switch fix(price/100) %向零的方向取整 case {0,1} %价格小于200rate=0;case {2,3,4} %价格大于等于200但小于500rate=2/100;case num2cell(5:9) %价格大于等于500但小于1000%为简便采用元胞数组rate=5/100;case num2cell(10:24) %价格大于等于1000但小于2500rate=10/100;case num2cell(25:49) %价格大于等于2500但小于5000rate=25/100;otherwise %价格大于等于5000rate=50/100;endprice=price*(1-rate) %输出商品实际销售价格编写一个函数式m文件,计算顾客实际付款数目。
Function price=f(rate)switch fix(price/100)case {0,1}rate=0;case {2,3,4}rate=2/100;case num2cell(5:9)rate=5/100;case num2cell(10:24)rate=10/100;case num2cell(25:49)rate=25/100;otherwise rate=50/100;Price=price*(1-rate)end9.一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。
输出全部水仙花数。
程序如下:• for m=100:999m1=fix(m/100); %求m的百位数字• m2=fix((m-m1*100)/10); %求m的十位数字• m3=m-m1*100-m2*10; %求m的个位数字• if m==m1*m1*m1+m2*m2*m2+m3*m3*m3• disp(m)• end•end编写一个函数式m文件,来判断一个三位数是不是水仙花数。
Function m=f(Mn)•for m=100:999m1=fix(m/100);• m2=fix((m-m1*100)/10);• m3=m-m1*100-m2*10;• if m==m1*m1*m1+m2*m2*m2+m3*m3*m3• disp(m)• end•end10.从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们的和。