文章目录
一、实验目的
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. 问题:建立函数文件命名时没有与函数指令的名称一致,导致函数不能调用。
解决办法:函数文件的名称必须与函数指令的名称一致,否则函数不能调用