实验三 M 文件与程序设计
description
Transcript of 实验三 M 文件与程序设计
数学实验
1
实验三 M 文件与程序设计
实验三 M 文件与程序设计
一、 M 文件
二、程序控制结构
三、函数文件
—— matlab 语言称为第四代编程语言,程序简洁、可读性很强,而且调试十分容易 , 是 matlab 的重要组成部分。
数学实验
2
实验三 M 文件与程序设计
一、 M 文件1.M 文件概述 用 MATLAB 语言编写的程序,称为 M 文件。 M文件可以根据调用方式的不同分为两类:命令文件( Script File )和函数文件( Function File ) .
2.M 文件的建立与打开
( 1 )建立新的 M 文件
菜单操作:菜单选择 File——New——M-file
命令操作:命令窗口中输入 edit
命令按钮:单击工具栏上的 New M-File 命令
数学实验
3
实验三 M 文件与程序设计
操作后会启动 MATLAB 文本编辑器,输入 M 文件的内容并存盘就建立了一个新的 M 文件。
注:储存时文件名遵循 MATLAB 变量命名的原则,但必须 以 m 为扩展名.
数学实验
4
实验三 M 文件与程序设计
( 2 )打开已有的 M 文件
菜单操作:菜单选择 File——Open—— 选择文件
命令操作:命令窗口中输入: edit 文件名
命令按钮:单击工具栏上的 Open File 命令,选择文件3. 命令文件
一个复杂的程序我们可以建立一个文本文件并把它储存起来,可以随时调用进行计算,这就是命令文件。执行时只要在工作区中键入不带扩展名的文件名即可 .
注:命令文件中的变量都是全局变量,在执行过程中,其命令可以使用工作区中的变量,它所产生的变量也将成为工作区的一部分 .
数学实验
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.
在文本编辑器中输入:
数学实验
6
实验三 M 文件与程序设计
二、程序控制结构
1. 顺序结构—— 依次顺序执行程序的各条语句
matlab 语言的程序控制结构与其它高级语言是一致的,分为顺序结构,选择结构,循环结构。
(1) 数据的输入—— input
调用格式: A=input (提示信息,选项)
其中提示信息为一个字符串,用于提示用户输入什么样的数据。 如果在 input 函数调用时采用‘ s’ 选项,则允许用户输入一个字符串。(2) 数据的输出—— disp
调用格式: disp (输出项)
其中输出项既可以为字符串,也可以为矩阵。
数学实验
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
数学实验
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
数学实验
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
数学实验
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
数学实验
11
实验三 M 文件与程序设计2. 选择结构——根据一定条件来执行的各条语句
( 1 ) if 语句条件语句 if 最简单的用法是:
if 条件
< 语句 1>
end
如果条件成立,则语句 1执行;否则,执行 end 的后继命令
如果条件成立,则语句 1 执行;否则,语句 2 执行,然后执行 end 的后续命令.
if 语句的另一种用法是:
if 条件
< 语句 1>
else
< 语句 2>
end
数学实验
12
实验三 M 文件与程序设计
if 条件 1< 语句 1>elseif 条件 2< 语句 2>……elseif 条件 n< 语句 n>else < 语句 n+1>end
当我们有多个选择时,还可以用下列结构:
数学实验
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 计算分段函数的值
数学实验
14
实验三 M 文件与程序设计
( 2 ) switch 语句switch 语句根据表达式的值来执行相应的语句,用法如
下:
switch 〈表达式〉case value1〈语句 1 〉case value2〈语句 2 〉……otherwise〈语句 n 〉end
数学实验
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;
程序为:
数学实验
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)
数学实验
17
实验三 M 文件与程序设计
( 3 ) try 语句try 语句用法如
下:
try 〈语句 1 〉catch 〈语句 2 〉end
运行时先试探性执行语句组 1 ,如果语句组 1 在执行过程中出现错误,则将错误信息付给保留的 lasterr变量,并转去执行语句组 2 。
数学实验
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 时可以省略
数学实验
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
数学实验
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
数学实验
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
数学实验
22
实验三 M 文件与程序设计
MATLAB 还提供了跳出循环的 break 语句,遇到此语句立即执行此循环 end 的后续语句,
( 3 ) break 语句和 continue 语句
continue 语句控制跳过循环体中的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。
例 12 求 [100 , 200]之间第一个能被 21整除的整数。
for n=100:200if rem(n,21)~=0continueendbreakendn ↙
n = 105
数学实验
23
实验三 M 文件与程序设计三、 函数 M- 文件 我们可以根据需要建立自己的函数文件,它们能够象库函数一样方便地调用,从而极大地扩展 MATLAB 的功能.如果对于一类问题建立起许多函数 M- 文件,就能形成独立的工具箱.
function 因变量 = 函数名(自变量)% 注释说明部分函数体语句
注 2 :这个 M- 文件的文件名必须是 函数名 .m
1. 函数文件的基本结构函数 M- 文件必须由 function 语句引导,其基本结构为:
注 1 :若因变量不止一个,可用方括号将它们括起来,并用逗号分开,每一行 % 后的内容只作为程序的注释, MATLAB 不执行。
数学实验
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.
在文本编辑器中输入:
数学实验
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
在命令窗口中输入:
数学实验
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
数学实验
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
四、应用举例
数学实验
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
数学实验
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
数学实验
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;
数学实验
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
数学实验
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
数学实验
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
数学实验
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 程序,实现上述游戏 .