实验三 M 文件与程序设计

34
数数数数 1 数数数 M 数数数数数数数 数数数 M 数数数数数数数 一、 M 数数 数数数数数数 数数数数 —— matlab 数数数数数数数数数数数 数数数数数 ,、 数数数数数 数数数数数数数数 , 数 matlab 数数数 数数数数

description

实验三 M 文件与程序设计. —— matlab 语言称为第四代编程语言,程序简洁、可读性很强,而且调试十分容易 , 是 matlab 的重要组成部分。. 一、 M 文件. 二、程序控制结构. 三、函数文件. 一、 M 文件. 1.M 文件概述. 用 MATLAB 语言编写的程序,称为 M 文件。 M 文件可以根据调用方式的不同分为两类:命令文件( Script File )和函数文件( Function File ). 2.M 文件的建立与打开. ( 1 )建立新的 M 文件. 菜单操作:菜单选择 File——New——M-file - PowerPoint PPT Presentation

Transcript of 实验三 M 文件与程序设计

Page 1: 实验三     M 文件与程序设计

数学实验

1

实验三 M 文件与程序设计

实验三 M 文件与程序设计

一、 M 文件

二、程序控制结构

三、函数文件

—— matlab 语言称为第四代编程语言,程序简洁、可读性很强,而且调试十分容易 , 是 matlab 的重要组成部分。

Page 2: 实验三     M 文件与程序设计

数学实验

2

实验三 M 文件与程序设计

一、 M 文件1.M 文件概述 用 MATLAB 语言编写的程序,称为 M 文件。 M文件可以根据调用方式的不同分为两类:命令文件( Script File )和函数文件( Function File ) .

2.M 文件的建立与打开

( 1 )建立新的 M 文件

菜单操作:菜单选择 File——New——M-file

命令操作:命令窗口中输入 edit

命令按钮:单击工具栏上的 New M-File 命令

Page 3: 实验三     M 文件与程序设计

数学实验

3

实验三 M 文件与程序设计

操作后会启动 MATLAB 文本编辑器,输入 M 文件的内容并存盘就建立了一个新的 M 文件。

注:储存时文件名遵循 MATLAB 变量命名的原则,但必须 以 m 为扩展名.

Page 4: 实验三     M 文件与程序设计

数学实验

4

实验三 M 文件与程序设计

( 2 )打开已有的 M 文件

菜单操作:菜单选择 File——Open—— 选择文件

命令操作:命令窗口中输入: edit 文件名

命令按钮:单击工具栏上的 Open File 命令,选择文件3. 命令文件

一个复杂的程序我们可以建立一个文本文件并把它储存起来,可以随时调用进行计算,这就是命令文件。执行时只要在工作区中键入不带扩展名的文件名即可 .

注:命令文件中的变量都是全局变量,在执行过程中,其命令可以使用工作区中的变量,它所产生的变量也将成为工作区的一部分 .

Page 5: 实验三     M 文件与程序设计

数学实验

5

实验三 M 文件与程序设计

以文件名 f1c.m 存盘,然后在命令窗口中输入:

f1c ↙Input Fahrenheit temperature:73 ↙c = 22.7778

clear;f=input(‘Input Fahrenheit temperature:');c=5*(f-32)/9

例 1 建立命令文件,将华氏温度 f 转换为摄氏温度 c.

在文本编辑器中输入:

Page 6: 实验三     M 文件与程序设计

数学实验

6

实验三 M 文件与程序设计

二、程序控制结构

1. 顺序结构—— 依次顺序执行程序的各条语句

matlab 语言的程序控制结构与其它高级语言是一致的,分为顺序结构,选择结构,循环结构。

(1) 数据的输入—— input

调用格式: A=input (提示信息,选项)

其中提示信息为一个字符串,用于提示用户输入什么样的数据。 如果在 input 函数调用时采用‘ s’ 选项,则允许用户输入一个字符串。(2) 数据的输出—— disp

调用格式: disp (输出项)

其中输出项既可以为字符串,也可以为矩阵。

Page 7: 实验三     M 文件与程序设计

数学实验

7

实验三 M 文件与程序设计例 2 输入 x , y 的值,并将它们的值互换后输出。

x=input('Input x please.');y=input('Input y please.');z=x;x=y;y=z;disp(x);disp(y);

存盘为 f1.m, 在命令窗口中输入:

>> f1↙Input x please.5↙Input y please.6↙ 6

5

Page 8: 实验三     M 文件与程序设计

数学实验

8

实验三 M 文件与程序设计( 3 )关系运算符

MATLAB 的关系运算符有:< 小于; > 大于; < = 小于或等于; > = 大于或等于; = = 等于; ~ = 不等于

关系运算比较两个数值,若真则值为 1 ,若不成立则值为 0 ,关系运算符可以作用于两个同样大小的矩阵或数组,

例 3 A=1:5,B=5:-1:1↙A = 1 2 3 4 5B = 5 4 3 2 1

C=A>=4 C = 0 0 0 1

1

D=A= =B

D = 0 0 1 0

0

Page 9: 实验三     M 文件与程序设计

数学实验

9

实验三 M 文件与程序设计( 4 )逻辑运算符

MATLAB 的逻辑运算符有: & 与运算; | 或运算; ~ 非运算 a b a&b a|b ~a

0 0 0 0 1

1 0 0 1 0

1 1 1 1 0

逻辑运算将任何非零元素视为 1 (真),可以作用于矩阵或数组例 4 a=1:9,b=9-a,c=~(a>4),d=(a>=3)&(b<6) a =

1 2 3 4 5 6 7 8 9

b = 8 7 6 5 4 3 2 1

0c = 1 1 1 1 0 0 0 0

0d = 0 0 0 1 1 1 1 1

1

Page 10: 实验三     M 文件与程序设计

数学实验

10

实验三 M 文件与程序设计( 5 )逻辑函数MATLAB 还提供了一些关系和逻辑函数,常见的有 all 和 any :all(x) 当 x 是一个向量,所有元素非 0 时,值为 1 ,否则为 0 ,当 x 是一个矩阵时,作用于每一列;any(x) 当 x 是一个向量 , 有一元素非 0 时,值为 1 ,否则为 0 ,当 x 是一个矩阵时,作用于每一列. 例 5 a=[1 0 -5 0;-3 0 8 2],b=all(a),c=any(a),d=all(b),e=any(c)

a = 1 0 -5 0 -3 0 8 2b = 1 0 1 0c = 1 0 1 1d = 0e = 1

Page 11: 实验三     M 文件与程序设计

数学实验

11

实验三 M 文件与程序设计2. 选择结构——根据一定条件来执行的各条语句

( 1 ) if 语句条件语句 if 最简单的用法是:

if 条件

< 语句 1>

end

如果条件成立,则语句 1执行;否则,执行 end 的后继命令

如果条件成立,则语句 1 执行;否则,语句 2 执行,然后执行 end 的后续命令.

if 语句的另一种用法是:

if 条件

< 语句 1>

else

< 语句 2>

end

Page 12: 实验三     M 文件与程序设计

数学实验

12

实验三 M 文件与程序设计

if 条件 1< 语句 1>elseif 条件 2< 语句 2>……elseif 条件 n< 语句 n>else < 语句 n+1>end

当我们有多个选择时,还可以用下列结构:

Page 13: 实验三     M 文件与程序设计

数学实验

13

实验三 M 文件与程序设计

0, 0,

( ) sin ,0 , 2

1,2

x

f x x x

x

if x<=0f=0elseif x<=pi/2f=sin(x)elsef=1end

例 6 计算分段函数的值

Page 14: 实验三     M 文件与程序设计

数学实验

14

实验三 M 文件与程序设计

( 2 ) switch 语句switch 语句根据表达式的值来执行相应的语句,用法如

下:

switch 〈表达式〉case value1〈语句 1 〉case value2〈语句 2 〉……otherwise〈语句 n 〉end

Page 15: 实验三     M 文件与程序设计

数学实验

15

实验三 M 文件与程序设计例 7 某商场对顾客所购买的商品实行打折销售,标准如下

( 商品价格用 price 来表示 ) : price<200 没有折扣 200≤price<500 3%折扣 500≤price<1000 5%折扣 1000≤price<2500 8%折扣 2500≤price<5000 10%折扣 5000≤price 14%折扣输入所售商品的价格,求其实际销售价格。

price=input(‘请输入商品价格’ );switch fix(price/100) case{0,1} rate=0; case{2,3,4} rate=3/100; case num2cell(5:9) rate=5/100;

程序为:

Page 16: 实验三     M 文件与程序设计

数学实验

16

实验三 M 文件与程序设计

>> ff2 ↙请输入商品价格 700 ↙price = 665

存盘为 ff2.m, 在命令窗口中输入:

case num2cell(10:24) rate=8/100; case num2cell(25:49) rate=10/100; otherwise rate=14/100;endprice=price*(1-rate)

Page 17: 实验三     M 文件与程序设计

数学实验

17

实验三 M 文件与程序设计

( 3 ) try 语句try 语句用法如

下:

try 〈语句 1 〉catch 〈语句 2 〉end

运行时先试探性执行语句组 1 ,如果语句组 1 在执行过程中出现错误,则将错误信息付给保留的 lasterr变量,并转去执行语句组 2 。

Page 18: 实验三     M 文件与程序设计

数学实验

18

实验三 M 文件与程序设计

( 1 ) for 语句 循环语句 for 的一般形式为:

for 〈循环变量〉 = 〈初值〉:〈步长〉:〈终值〉

〈循环体语句〉end

例 8 x(1)=1 ;for i=2:6 x(i)=2*x(i-1); end x ↙

x =1 2 4 8 16 32

3. 循环结构——被重复执行的一组语句,循环是计算机解决问题的主要手段

注:步长为 1 时可以省略

Page 19: 实验三     M 文件与程序设计

数学实验

19

实验三 M 文件与程序设计

for 循环的另一种形式是:for 〈循环变量〉 = 〈数组或矩阵〉 〈循环体语句〉end执行过程是依次将矩阵的格列元素赋给循环变量,然后

执行循环体语句,直至各列元素处理完毕。例 9I=[1 2;3 4];for i=I k=i(1);

f(:,k)=i.^k;endf ↙

f = 1 4 3 16

Page 20: 实验三     M 文件与程序设计

数学实验

20

实验三 M 文件与程序设计

循环语句可以嵌套,即一个循环结构的循环体又包括一个循环结构 。也称为多重循环。

例 10for i=1:3 for j=1:4 a(i,j)=1/(i+j-1); endendformat rata ↙

a = 1 1/2 1/3 1/4 1/2 1/3 1/4 1/5 1/3 1/4 1/5 1/6

Page 21: 实验三     M 文件与程序设计

数学实验

21

实验三 M 文件与程序设计

( 2 ) while 语句 如果不知道循环次数,可以使用 while 循环来完成,其

一般形式为: while 条件〈命令语句集〉 end

例 11 用 while 循环求 1~100间整数的和。

sum=0; i=1; while i<=100 sum=sum+i; i=i+1; end sum ↙

sum = 5050

Page 22: 实验三     M 文件与程序设计

数学实验

22

实验三 M 文件与程序设计

MATLAB 还提供了跳出循环的 break 语句,遇到此语句立即执行此循环 end 的后续语句,

( 3 ) break 语句和 continue 语句

continue 语句控制跳过循环体中的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。

例 12 求 [100 , 200]之间第一个能被 21整除的整数。

for n=100:200if rem(n,21)~=0continueendbreakendn ↙

n = 105

Page 23: 实验三     M 文件与程序设计

数学实验

23

实验三 M 文件与程序设计三、 函数 M- 文件 我们可以根据需要建立自己的函数文件,它们能够象库函数一样方便地调用,从而极大地扩展 MATLAB 的功能.如果对于一类问题建立起许多函数 M- 文件,就能形成独立的工具箱.

function 因变量 = 函数名(自变量)% 注释说明部分函数体语句

注 2 :这个 M- 文件的文件名必须是 函数名 .m

1. 函数文件的基本结构函数 M- 文件必须由 function 语句引导,其基本结构为:

注 1 :若因变量不止一个,可用方括号将它们括起来,并用逗号分开,每一行 % 后的内容只作为程序的注释, MATLAB 不执行。

Page 24: 实验三     M 文件与程序设计

数学实验

24

实验三 M 文件与程序设计2. 函数调用

函数调用的一般格式是:因变量 = 函数名(自变量)

以文件名 f2c.m 存盘,然后在命令窗口中输入:

y=input('Input FAhrenheit temperture:');x=f2c(y) ↙

Input Fahrenheit temperture:70 ↙c = 21.1111x = 21.1111

function c=f2c(f)c=5*(f-32)/9

例 13 建立函数文件,将华氏温度 f 转换为摄氏温度 c.

在文本编辑器中输入:

Page 25: 实验三     M 文件与程序设计

数学实验

25

实验三 M 文件与程序设计

function f=eryuan(x,y)f=(y^2+2*x)/(y^2-2*x);

eryuan(3,2) ↙ans = -5

例 14 定义多元函数2

2

2

2

y xf

y x

建立函数文件 eryuan.m

在命令窗口中输入:

Page 26: 实验三     M 文件与程序设计

数学实验

26

实验三 M 文件与程序设计

函数可以嵌套调用,即一个函数可以调用别的函数,甚至调用它自身,一个函数调用它自身称为函数的递归调用。

例 15 利用函数的递归调用求 n!

function f=factor(n)if n<=1 f=1;else f=factor(n-1)*n;end

递归调用函数文件 factor.m 如下:

>> factor(5) ↙ans = 120

Page 27: 实验三     M 文件与程序设计

数学实验

27

实验三 M 文件与程序设计

例 16 求解数学问题(鸡兔同笼问题):求 2 个自然数,它们的和等于 100 ,且第一个数被 2除的商与第二个数被 4除的商的和为 36 .

i=1;while i<=100 if rem(100-i*2,4)==0&(i+(100-i*2)/4)==36 break; end i=i+1;enda1=i*2a2=100-i*2

a1 = 44a2 = 56

四、应用举例

Page 28: 实验三     M 文件与程序设计

数学实验

28

实验三 M 文件与程序设计例 17 从键盘输入若干个数,当输入 0 时结束输入,求这些数的平均值和它们的和。

sum=0;cnt=0;val=input('Enter a number(end in 0):');while (val~=0) sum=sum+val; cnt=cnt+1; val=input('Enter a number(end in 0):');endif(cnt>0) sum mean=sum/cntend

建立命令文件 li17.m

Page 29: 实验三     M 文件与程序设计

数学实验

29

实验三 M 文件与程序设计

li17↙

Enter a number(end in 0):8↙

Enter a number(end in 0):9↙

Enter a number(end in 0):7↙

Enter a number(end in 0):0↙

sum = 24

mean = 8

Page 30: 实验三     M 文件与程序设计

数学实验

30

实验三 M 文件与程序设计

附: 猜数字

for h=1:20; y=floor(rand(1,4)/0.1); if y(1)~=y(2)&y(1)~=y(3)&y(1)~=y(4)&y(2)~=y(3)&y(2)~=y(4)&y(3)~=y(4) break endendy;

Page 31: 实验三     M 文件与程序设计

数学实验

31

实验三 M 文件与程序设计

y=y(1)*1000+y(2)*100+y(3)*10+y(4);y=int2str(y);z='AaBb';for k=1:8 x=input('input the number>','s'); a=0;b=0; for i=1:4; if x(i)==y(i) a=a+1; end end

Page 32: 实验三     M 文件与程序设计

数学实验

32

实验三 M 文件与程序设计for i=1:4; for j=1:4; if x(i)==y(j) b=b+1; end end end z(2)=int2str(a);z(4)=int2str(b); z if a==4 congratulation=('You are Win!') break end if k==8 Times_over=('You are Lose!') endend

Page 33: 实验三     M 文件与程序设计

数学实验

33

实验三 M 文件与程序设计

实验任务

1. 建立函数 的 M 文件,并计算 f (10) 和 f (100).

5

2( )

1

x

f xx

2. 若一个三位整数各位数字的立方和等于该数本身,则称该数位水仙花数,输出全部水仙花数 .

3. 个人所得税计算方法为:应纳个人所得税税额 =(应纳税所得额- 2000 ) *适用税率 -速算扣除数 不超过 500 元的,税率 5% ,速算扣除数为 0 ; 超过 500 元至 2000 元的部分,税率 10% ,速算扣除数为 25 超过 2000 元至 5000 元的部分,税率 15 % ,速算扣除数为125 超过 5000 元至 20000 元的部分,税率 20 % ,速算扣除数为375 超过 20000 元至 40000 元的部分,税率 25% ,速算扣除数为1375

Page 34: 实验三     M 文件与程序设计

数学实验

34

实验三 M 文件与程序设计

超过 40000 元至 60000 元的部分,税率 30% ,速算扣除数为3375 超过 60000 元至 80000 元的部分,税率 35% ,速算扣除数为6375 超过 80000 元至 100000 元的部分,税率 40% ,速算扣除数为 10375 超过 100000 元的部分,税率 45% ,速算扣除数为 1537.若某人的月工资为 x ,试建立税款 y 与收入 x之间的函数 M文件 .选做 :猜数游戏

首先由计算机产生 [1 , 100]之间的随机整数,然后由用户猜测所产生的随机数 . 根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,则显示“ High” ,小于则显示“ Low” ,等于则显示“ You Win” ,同时退出游戏 . 用户最多可以猜 7 次 . 试编写 MATLAB 程序,实现上述游戏 .