340 likes | 521 Views
实验三 M 文件与程序设计. —— matlab 语言称为第四代编程语言,程序简洁、可读性很强,而且调试十分容易 , 是 matlab 的重要组成部分。. 一、 M 文件. 二、程序控制结构. 三、函数文件. 一、 M 文件. 1.M 文件概述. 用 MATLAB 语言编写的程序,称为 M 文件。 M 文件可以根据调用方式的不同分为两类:命令文件( Script File )和函数文件( Function File ). 2.M 文件的建立与打开. ( 1 )建立新的 M 文件. 菜单操作:菜单选择 File——New——M-file
E N D
实验三 M文件与程序设计 —— matlab语言称为第四代编程语言,程序简洁、可读性很强,而且调试十分容易, 是matlab的重要组成部分。 一、M文件 二、程序控制结构 三、函数文件
一、M文件 1.M文件概述 用MATLAB语言编写的程序,称为M文件。M文件可以根据调用方式的不同分为两类:命令文件(Script File)和函数文件(Function File). 2.M文件的建立与打开 (1)建立新的M文件 菜单操作:菜单选择File——New——M-file 命令操作:命令窗口中输入 edit 命令按钮:单击工具栏上的New M-File命令
操作后会启动MATLAB文本编辑器,输入M文件的内容并存盘就建立了一个新的M文件。操作后会启动MATLAB文本编辑器,输入M文件的内容并存盘就建立了一个新的M文件。 注:储存时文件名遵循MATLAB变量命名的原则,但必须 以m为扩展名.
(2 )打开已有的M文件 菜单操作:菜单选择File——Open——选择文件 命令操作:命令窗口中输入:edit 文件名 命令按钮:单击工具栏上的Open File命令,选择文件 3.命令文件 一个复杂的程序我们可以建立一个文本文件并把它储存起来,可以随时调用进行计算,这就是命令文件。执行时只要在工作区中键入不带扩展名的文件名即可 . 注:命令文件中的变量都是全局变量,在执行过程中,其命令可以使用工作区中的变量,它所产生的变量也将成为工作区的一部分 .
例1建立命令文件,将华氏温度f转换为摄氏温度c.例1建立命令文件,将华氏温度f转换为摄氏温度c. 在文本编辑器中输入: clear; f=input(‘Input Fahrenheit temperature:'); c=5*(f-32)/9 以文件名f1c.m存盘,然后在命令窗口中输入: f1c ↙ Input Fahrenheit temperature:73 ↙ c = 22.7778
二、程序控制结构 matlab语言的程序控制结构与其它高级语言是一致的,分为顺序结构,选择结构,循环结构。 1.顺序结构—— 依次顺序执行程序的各条语句 (1)数据的输入——input 调用格式:A=input(提示信息,选项) 其中提示信息为一个字符串,用于提示用户输入什么样的数据。 如果在input函数调用时采用‘s’选项,则允许用户输入一个字符串。 (2)数据的输出——disp 调用格式:disp(输出项) 其中输出项既可以为字符串,也可以为矩阵。
例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
(3)关系运算符 关系运算比较两个数值,若真则值为1,若不成立则值为0,关系运算符可以作用于两个同样大小的矩阵或数组, MATLAB的关系运算符有: < 小于;> 大于;< = 小于或等于;> = 大于或等于; = = 等于;~ = 不等于 例3 A=1:5,B=5:-1:1↙ A = 1 2 3 4 5 B = 5 4 3 2 1 D=A= =B C=A>=4 C = 0 0 0 1 1 D = 0 0 1 0 0
(4)逻辑运算符 MATLAB的逻辑运算符有: & 与运算;| 或运算;~ 非运算 逻辑运算将任何非零元素视为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 0 c = 1 1 1 1 0 0 0 0 0 d = 0 0 0 1 1 1 1 1 1
(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 2 b = 1 0 1 0 c = 1 0 1 1 d = 0 e = 1
2.选择结构——根据一定条件来执行的各条语句2.选择结构——根据一定条件来执行的各条语句 (1)if 语句 条件语句 if 最简单的用法是: if 条件 <语句1> end 如果条件成立,则语句1执行;否则,执行 end 的后继命令 if 语句的另一种用法是: if 条件 <语句1> else <语句2> end 如果条件成立,则语句1执行;否则,语句2执行,然后执行 end 的后续命令.
当我们有多个选择时,还可以用下列结构: if 条件1 <语句1> elseif 条件2 <语句2> …… elseif 条件n <语句n> else <语句n+1> end
例6 计算分段函数的值 if x<=0 f=0 elseif x<=pi/2 f=sin(x) else f=1 end
(2)switch 语句 switch语句根据表达式的值来执行相应的语句,用法如下: switch 〈表达式〉 case value1 〈语句1〉 case value2 〈语句2〉 …… otherwise 〈语句n〉 end
例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; 程序为:
case num2cell(10:24) rate=8/100; case num2cell(25:49) rate=10/100; otherwise rate=14/100; end price=price*(1-rate) 存盘为ff2.m,在命令窗口中输入: >> ff2 ↙ 请输入商品价格700 ↙ price = 665
(3)try 语句 try语句用法如下: try 〈语句1〉 catch 〈语句2〉 end 运行时先试探性执行语句组1,如果语句组1在执行过程中出现错误,则将错误信息付给保留的lasterr变量,并转去执行语句组2。
3.循环结构——被重复执行的一组语句,循环是计算机解决问题的主要手段3.循环结构——被重复执行的一组语句,循环是计算机解决问题的主要手段 (1)for 语句 循环语句for 的一般形式为: for 〈循环变量〉=〈初值〉:〈步长〉:〈终值〉 〈循环体语句〉 end 注:步长为1时可以省略 例8 x(1)=1; for i=2:6 x(i)=2*x(i-1); end x ↙ x = 1 2 4 8 16 32
for 循环的另一种形式是: for 〈循环变量〉=〈数组或矩阵〉 〈循环体语句〉 end 执行过程是依次将矩阵的格列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。 例9 I=[1 2;3 4]; for i=I k=i(1); f(:,k)=i.^k; end f ↙ f = 1 4 3 16
循环语句可以嵌套,即一个循环结构的循环体又包括一个循环结构 。也称为多重循环。 例10 for i=1:3 for j=1:4 a(i,j)=1/(i+j-1); end end format rat a ↙ a = 1 1/2 1/3 1/4 1/2 1/3 1/4 1/5 1/3 1/4 1/5 1/6
(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
(3)break语句和continue语句 MATLAB还提供了跳出循环的 break 语句,遇到此语句立即执行此循环 end 的后续语句, continue语句控制跳过循环体中的某些语句。当在循环体内执行到该语句时,程序将跳过循环体中所有剩下的语句,继续下一次循环。 例12求[100,200]之间第一个能被21整除的整数。 for n=100:200 if rem(n,21)~=0 continue end break end n ↙ n = 105
三、 函数M-文件 我们可以根据需要建立自己的函数文件,它们能够象库函数一样方便地调用,从而极大地扩展MATLAB的功能.如果对于一类问题建立起许多函数M-文件,就能形成独立的工具箱. 1.函数文件的基本结构 函数M-文件必须由function语句引导,其基本结构为: function 因变量=函数名(自变量) %注释说明部分 函数体语句 注1:若因变量不止一个,可用方括号将它们括起来,并用逗号分开,每一行%后的内容只作为程序的注释,MATLAB不执行。 注2:这个M-文件的文件名必须是 函数名.m
2.函数调用 函数调用的一般格式是: 因变量=函数名(自变量) 例13建立函数文件,将华氏温度f转换为摄氏温度c. 在文本编辑器中输入: function c=f2c(f) c=5*(f-32)/9 以文件名f2c.m存盘,然后在命令窗口中输入: y=input('Input FAhrenheit temperture:');x=f2c(y)↙ Input Fahrenheit temperture:70↙ c = 21.1111 x = 21.1111
例14定义多元函数 建立函数文件eryuan.m function f=eryuan(x,y) f=(y^2+2*x)/(y^2-2*x); 在命令窗口中输入: eryuan(3,2) ↙ ans = -5
函数可以嵌套调用,即一个函数可以调用别的函数,甚至调用它自身,一个函数调用它自身称为函数的递归调用。函数可以嵌套调用,即一个函数可以调用别的函数,甚至调用它自身,一个函数调用它自身称为函数的递归调用。 例15利用函数的递归调用求n! 递归调用函数文件factor.m如下: function f=factor(n) if n<=1 f=1; else f=factor(n-1)*n; end >> factor(5) ↙ ans = 120
四、应用举例 例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; end a1=i*2 a2=100-i*2 a1 = 44 a2 = 56
例17从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们的和。例17从键盘输入若干个数,当输入0时结束输入,求这些数的平均值和它们的和。 建立命令文件li17.m 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):'); end if(cnt>0) sum mean=sum/cnt end
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
附: 猜数字 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 end end y;
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
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!') end end
1.建立函数 的M文件,并计算 f (10)和 f (100). 实验任务 2.若一个三位整数各位数字的立方和等于该数本身,则称该数位水仙花数,输出全部水仙花数. 3.个人所得税计算方法为: 应纳个人所得税税额= (应纳税所得额-2000)*适用税率-速算扣除数 不超过500元的,税率5%,速算扣除数为0; 超过500元至2000元的部分,税率10%,速算扣除数为25 超过2000元至5000元的部分,税率15 %,速算扣除数为125 超过5000元至20000元的部分,税率20 %,速算扣除数为375 超过20000元至40000元的部分,税率25%,速算扣除数为1375
超过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程序,实现上述游戏.