MATLAB 编程/控制流
IF 语句可用于在逻辑测试(表达式)返回真值(除 0 外的任何值)时执行代码。在 IF 语句之后添加的 ELSE 语句在表达式为假(0)时执行。
语法
if expression statements elseif expression2 statements end
SWITCH 语句用于根据单个变量的值执行多个可能的运算集之一。它们旨在取代基于相同变量的嵌套 IF 语句,因为嵌套 IF 语句可能变得非常繁琐。语法如下
switch variable case value1 statements(1) case value2 statements(2) ... otherwise statements end
END 关键字只在整个 SWITCH 块结束后才需要,而不是在每个 CASE 之后。如果您终止 SWITCH 语句并在其后使用 CASE 语句,您将收到一个错误提示,提示 CASE 关键字的使用无效。如果发生这种情况,可能是因为您删除了循环或 IF 语句,但忘记删除相应的 END 关键字,从而导致多余的 END 关键字。因此 MATLAB 认为您在预期之外的地方结束了 SWITCH 语句。
OTHERWISE 关键字会对除 CASE 语句中指定的那些值之外的任何 VARIABLE 值执行特定的代码块(通常是错误消息)。
习惯使用 C 风格语言的程序员通常会在每个 CASE 之后添加 BREAK 语句。在 C、C++ 和 Java 中,如果不添加 BREAK 语句,代码将在上面的代码中继续执行,如果 VALUE1 为真,那么 STATEMENTS(1)、STATEMENTS(2) 等将在 C 风格语言中执行。然而,在 MATLAB 中,只有 STATEMENTS(1) 会执行。
TRY/CATCH 语句在 TRY 块中执行特定的代码块。如果它因错误或警告而失败,则此代码的执行将终止,并将执行 CATCH 块中的代码,而不是仅仅向屏幕报告错误并终止整个程序。这在调试和过滤错误计算时很有用,例如,如果您不小心尝试查找奇异矩阵的逆矩阵,而您不希望完全结束程序。
语法
try statements catch statements end
请注意,与其他控制流语句不同,TRY/CATCH 块不依赖于任何条件。因此 TRY 块中的代码将始终至少部分执行。TRY 块中的代码并非全部都将始终执行,因为当出现错误时,TRY 的执行将结束。此外,如果 TRY 块不失败,CATCH 块中的语句将永远不会执行。
FOR 语句使用迭代器执行指定次数的代码。语法
for iterator = startvalue:increment:endvalue statements end
迭代器变量初始化为 STARTVALUE,并在每次遍历循环时增加 INCREMENT 的值,直到达到 ENDVALUE 的值。如果省略 INCREMENT,则假定其值为 1,如以下代码所示
for ii = 1:3 statements end
这将执行 STATEMENTS 三次。
WHILE 语句在特定条件评估为假或零之前执行代码。示例
while condition statements end
忘记在 WHILE 循环中更改条件是导致无限循环的常见原因。
MATLAB 包含 BREAK 和 CONTINUE 关键字,以便更严格地控制循环。BREAK 关键字将导致程序离开当前所在的循环,并从循环结束后的下一行继续执行,无论循环的控制条件如何。如果代码位于嵌套循环中,它只会退出当前所在的循环,而不是所有循环。语法是在您希望中断的循环中简单地写下 BREAK 关键字。
与 BREAK 相反,CONTINUE 将导致程序返回到当前所在的循环的开头,并重新检查条件,以查看是否应该继续执行循环代码。CONTINUE 语句后的循环中的代码在同一次遍历中不会执行。
如果您想完全退出函数(而不是只退出循环),可以在代码的最后一行之前使用 RETURN 关键字。任何输出变量的值都会立即返回给调用函数。以下函数示例演示了其工作原理
function output = controlTest(doWhat) switch doWhat case 1 output = -1; return; case 2 output = 3; end output = output + 4; end
调用
>> output = controlTest(1)
将返回 OUTPUT = -1,因为 OUTPUT 被定义为 -1,而 RETURN 语句告诉 MATLAB 立即获取 OUTPUT 的当前值并将其传递回调用函数。但是,调用
>> output = controlTest(2)
将返回 OUTPUT = 7,因为 OUTPUT 最初被定义为 3,然后为其添加了 4。由于 RETURN 语句仅在 DOWHAT=1 的情况下执行,因此它不会被调用,并且会执行函数的其余部分。
请注意,如果在调用 RETURN 语句之前未定义输出变量,您将收到一个错误提示,因此请谨慎使用此方法。