您好,欢迎来到99网。
搜索
您的当前位置:首页实验五--M文件和MATLAB程序设计

实验五--M文件和MATLAB程序设计

来源:99网


实验五--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。如:

21

3105168421 63105168421

运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。

%classic \"3n+1\" problem from number theory. while 1

n=input('Enter n,negative quits:'); if n<=0 break end a=n; while n>1

if rem(n,2)==0 n=n/2; else

n=3*n+1; end a=[a,n]; end a

end

Enter n,negative quits:3 a =

3 10 5 16 8 4 2 1

a=0; i=1;

while (a<10000) a=a+pow2(i); i=i+1; end m=i-1; m 13

i22. 编程求满足i110000的最小m值。

m

3. 编写一个函数,计算下面函数的值,给

出x的值,调用该函数后,返回y的值。 function [y]=myfun1(x)

sinx,y(x)x,x6,x00x3x3

选择一些数据测试你编写的函数。

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 = 2

4. 用如下迭代公式求

a,a的值分别为:3,

105,迭代

17,113。迭代的终止条件为xn1xn初值x01.0,迭代次数不超过100次。分别对迭代结果和准确值进行比较,并统计迭代次数。迭代公式:xn1xn1a22xn1

function [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

10.6301 n = 8

5.定义一个函数文件,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数文>> [x,n]=sqrt_a(113) 正确 x =

件。

程序设计:

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.95i ln =

1.6094 + 1.5708i s =

0 +74.2032i c = 74.2099

ans =

0.2837 - 0.95i 6. 设 f(x)=

11(x2)20.1(x3)4,编写一个

0.01MATLAB函数文件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.9901 10.9901 100.9091 1.2340 100.9091

7. 已知y=f(40)f(30)f(20) 当f(n)=n+10ln(n2+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.6390

8.将下列脚本式m文件改写成函数式m文件:

(1)输入一个字符,若为大写字母,则输出其对应的小写字母;若为小写字母,则输出其对应的大写字母;若为数字字符则输出其对应的数值,若为其他字符则原样输出。

c=input('请输入一个字符','s'); %a是字符,'a'是字符串 if c>='A' & c<='Z'

disp(setstr(abs(c)+abs('a')-abs('A'))); %加32

elseif c>='a'& c<='z' disp(setstr(abs(c)- (abs('a')-abs('A')))); elseif c>='0'& c<='9'

disp(abs(c)-abs('0')); else

disp(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} %于200

rate=0;

case {2,3,4} %等于200但小于500 rate=2/100;

case num2cell(5:9) %于等于500但小于1000

%为简便采用元胞数组 rate=5/100;

case num2cell(10:24) %于等于1000但小于2500 rate=10/100;

价格小价格大于价格大价格大

case num2cell(25:49) %价格大于等于2500但小于5000 rate=25/100;

otherwise %价格大于等于5000

rate=50/100; end

price=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) end

9.一个三位整数各位数字的立方和等于该数本身则称该数为水仙花数。输出全部水仙花数。 程序如下:

• for m=100:999

m1=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:999

m1=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 • end

10.从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们的和。 程序如下:

sum=0; %用于存放和

n=0; %用于统计输入的数的个数

val=input(‘Enter a number :’); %在循环体外初始 while (val~=0) sum=sum+val; n=n+1;

val=input(‘Enter a number :’); 若无此句只能输入一个数 end if (n > 0) sum mean=sum/n End

改写成M文件 Function mean=fn(n) sum=0;

n=0;

val=input(‘Enter a number :’); while (val~=0) sum=sum+val; n=n+1;

val=input(‘Enter a number :’); if (n > 0) sum mean=sum/n end

五、实验心得

通过本次实验,我了解了MATLAB的工作模式和M文件的构成规则,了

解了命令M文件和函数M文件的异同。会MATLAB的M文件的创建与修改,会使用函数句柄调用函数,会运用顺序结构、循环结构和分支结构进行计算机编程。会控制MATLAB的程序流,熟悉了应用程序设计的基本步骤。能对文件进行简单操作,会调试和优化所设计的程序。对应用程序接口的设计也有所了解。MATLAB语言被称为编程语言,程序简洁、可读性很强,而且调试十分容易。它是MATLAB重要组成部分。通过这次试验我已经对MATLAB的工作模式有一个大致的了解,并掌握如何创建M文件,包括命令文件和函数文件。熟练地掌握MATLAB的程序设计流程和程序设计的基本结构,并能初步设计一些简单的能解决实际问题的程序。

实验成绩: ________________

实验日期和地点: 东港学院

实验指导教师:宁伟

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务