作为一种常用的编程语言,MATLAB 支持各种流程控制结构,如循环结构、条件转移结构、客观结构等另外 MATLAB 还支持一种新的结构 --- 试探结构。
循环语句有两种结构: for ... end 结构和 while ... end 结构。 这两种语句结构不完全相同,各有各的特色。for ... end 语句通常的调用格式为:
for 循环变量=s1:s3:s2
循环体语句组
end
注意,这里的循环语句是以 end 结尾的,这和 C 语言的结构不完全一致。
〖例〗 如果用户想由 MATLAB 求出 1+2+...+100 的值,可以作下列的循环:
>> mysum=0; for i=1:1:100,mysum=mysum+i; end; mysum
mysum =
5050
在上面的式子中,可以看到 for 循环语句中 s3 的值为 1。在 MATLAB 实际编程中,如果 s3 的值为 1,
则可以在该语句中省略,故该语句可以简化成 for i=1:100。
在实际编程中,在 MATLAB 下采用循环语句会降低其执行速度,所以前面的程序可以由下面的命令来代替: i=1:100; mysum=sum(i)。在这一语句中,首先生成了一个向量 i, 然后用内部函数 sum() 求出 i 向量的各个元素之和,或更简单地,该语句还可以写成 sum(1:100)。如果前面的 100 改成 10000, 再运行这一程序,则可以明显地看出,后一种方法编写的程序比前一种方法快得多。
MATLAB 并不要求循环点等间距,假设 V 为任意一个向量,则可以用 for i=V 来表示循环。
同样的问题在 while 循环结构下可以表示为
mysum = 0; i=1; while (i<=100), mysum=mysum+i; i=i+1; end
条件转移语句:和 C 语言相象
if 条件式1
条件块语句组1
elseif 条件式2
条件块语句组2
...
else
条件块语句组n+1
end
开关结构:
MATLAB 从 5.0 版开始提供了开关语句结构,其基本语句结构为:
switch 开关表达式
case 表达式1
语句段1
case {表达式2,表达式3,..., 表达式m}
语句段2
...
otherwise
语句段n
end
MATLAB 开关语句与 C 有区别:
- 当开关表达式的值等于表达式 1 时,将执行语句段 1,执行完语句段 1 后将转出开关体,无需像 C 语言那样在下一个 case 语句前加 break 语句,所以本结构在这点上和 C 语言是不同的。
- 当需要在开关表达式满足若干个表达式之一时执行某一程序段,则应该把这样的一些表达式用大括号括起来,中间用逗号分隔。事实上,这样的结构是 MATLAB 语言定义的单元结构, 其具体内容将在后面叙述。
- 当前面枚举的各个表达式均不满足时,则将执行 otherwise 语句后面的语句段,此语句等价于 C 语言中的 default 语句。
- 在 case 语句引导的各个表达式中,不要用重复的表达式,否则列在后面的开关通路将永远也不能执行。
- 程序的执行结果和各个 case 语句的次序是无关的。
试探结构:
MATLAB 从 5.2 版本开始提供了一种新的试探式语句结构,其一般的形式为:
try
语句段1
catch
语句段2
end
本语句结构首先试探性地执行语句段 1,如果在此段语句执行过程中出现错误,则将错误信息赋给保留的 lasterr 变量,并放弃这段语句,转而执行语句段 2 中的语句。这种新的语句结构是 C 等语言中所没有的。