MATLAB6:M文件和控制流

avatar
作者
猴君
阅读量:0

文章目录


一、实验目的

  1. 熟悉运用MATLAB的控制指令。
  2. 理解M脚本文件和函数文件的本质区别。
  3. 能够运用所学知识,编制程序解决一般的计算问题。

二、实验内容

  1.for循环结构及注释

for x=array
   (commands)
end

A、x为循环变量,(commands)为循环体
B、X依次取array中的元素,每取一次,执行一次commands,直到x大于array中的最后一个元素
C、循环次数确定

  2.使用for循环的注意事项
A、在for后面的表达式中的数组可以是任何合法的MATLAB数组
B、 应该尽量提高代码向量化程度,避免循环
C、避免使用i,j作为循环变量

  3.while循环结构

while expression
   (commands)
end

A、expression的值为逻辑真(非0),则执行循环体,直到表达式值为假,结束循环。
B、循环次数不确定

  4.使用while循环的注意事项
A、一般情况下,expression表达式都是标量
B、MATLAB允许它为数组,此时只有数组元素都为真时,循环体才被执行
C、如果表达式为空数组,被认为是假

  5.While循环与for循环的区别
while循环体被执行的次数是不确定的(由expression的值决定),而for结构中循环体的执行次数是确定的(由for后的数组的列数决定)

  6.if-else-end分支结构

if expr1 %expr为条件表达式,该表达式结果为“标量逻辑1或0”
   (commands1) %expr允许为空数组,此时认为条件为假
elseif expr2 %expr只有当逻辑数组全为1时,该分支才被执行
   (commands2)
………
else
   (commandsk)
end

  7.switch-case结构

switch expr %expr为表达式
  case value_1 %value_1为给定值(数值,字符串标量,胞元数组)
     (commands1) %expr等于value_1时,执行组命令1,然后跳过该结构
……
   case value_k
     (commandsk) %ex等于testk时,执行组命令k,然后跳过该结构
   otherwise %以上情况“并”的“补”,可无
     (commands) %若所有case都补发生,则执行该组命令
end

  8.常见指令

指令说明
break指令break指令,或导致包含该指令的while、for 循环终止,或在if - end, switch - case, try – catch中导致中断。
continue指令跳过位于它之后的循环体中其他指令,而执行循环的下一个迭代…
pause和pause(n)A、第一种格式使程序暂停执行,等待用户按任意键继续;B、第二种格式使程序暂停n秒后,再继续执行。
return结束return指令所在函数的执行,而把控制转至主调函数或者指令窗。否则,只有待整个被调函数执行完后,才会转出。

  9.M文件的一般结构

结构说明
函数声明行(Function declaration line)位于函数文件的首行,以关键字function开始,函数名及输入输出量都由次行定义。
H1行(The first help text line)紧随函数声明行后的第一注释行。
在线帮助文本区(Help text)H1行及其后的连续注释行。通常包括:函数输入输出量的含义,调用格式说明
编写和修改记录与在线帮助文本区相隔一个空行的注释行。标志编写、修改该文件的作者、日期、版本记录。用于软件档案管理
函数体(Function body)用MATLAB指令实现函数功能。只有函数声明和函数体是函数文件必不可少的部分

三、仿真结果

1.分别用for和while语句编写计算K=1+2+22+…+263的程序。另编写一种不用循环的计算程序。
答:for语句:

>>a(1)=1;a(2)=3; for ii=2:63     a(ii+1)=2^(ii)+a(ii); end;a(ii+1)  

while语句:

>> a(1)=1;a(2)=3;ii=2; while ii<=63     a(ii+1)=2^(ii)+a(ii);     ii=ii+1; end;a(ii) 

不用循环的计算程序:

>>x=0:63; y=2.^(x); sum(y) 

2.计算f(x)中x从0到15的累加求和,f(x)=0,x<=5;(x-3)/4,5<x&x<=10;2x,x>10
答:

>> x=6:10; y=(x-3)/4; c1=sum(y); a=11:15; b=2*a; c2=sum(b); c=c1+c2 c =   136.2500 

3.有一群鸡和兔子,加在一起头的数量是36,脚的数量是100,编程序解答鸡和兔子数量各是多少?
答:设鸡有x只,兔子有y只。由已知条件,可得方程组x+y=36和2x+4y=100。令A=[1,1;2,4],B=[36;100],编程结果如下:

>> A=[1,1;2,4]; B=[36;100]; X=A\B X =     22     14 

4.产生20个两位随机整数,输出其中小于平均值的奇数。
答:

>> a=fix(rand(2,10)*100) b=mean(sum(a)) h=1; for i=1:20     if (a(i)<b)&&( rem((a(i)+1),2)==0 )         c(h)=a(i);         h=h+1;     end end,c a =     78    24     9    94    57    23    82     4    64    64     38    40    13    95     5    35     1    16    73    45 b =     86 c =      9    13    57     5    23    35     1    73    45    11 

四、实践中遇到的问题及解决方法

  1.问题:开始我只会用MATLAB产生随机数,不会产生20个两位随机整数
  解决办法:思路:先产生20个随机数,因为产生的随机数是与小数形式产生的,乘于100后就是带有两个小数的两位数,在求整,就达到要求了,具体程序可以写成:a=fix(rand(1,20)*100),其中fix表示取整数。
  2. 问题:不会求平均值。例如求一个4X5数组A中所以元素的平均值
解决办法:可以使用mean函数,但需要注意它的用法。用法一:mean(A),默认是先求得每一列的的和,然后对每一个列求平均值。用法二:mean(sum(A)),此时所输出的就是整个数组的平均值,需要加以注意
  3.问题:matlab里,不会用if语句判断奇数偶数?
  解决办法:对x判断奇数偶数,可以采用以下程序:a = mod(x,2);或a= rem(x,2)。MATLAB结果显示:如果a=1,说明x为奇数;如果a=0,说明x为偶数。
  4. 问题:建立函数文件命名时没有与函数指令的名称一致,导致函数不能调用。
  解决办法:函数文件的名称必须与函数指令的名称一致,否则函数不能调用

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!