Skip to content

MATLAB - If End 语句

MATLAB - 条件控制流:if...end 语句

Section titled “MATLAB - 条件控制流:if...end 语句”

在编程中,我们经常需要根据特定条件执行不同的代码块。MATLAB 为此提供了 if...end 语句。它允许您的程序做出决策并遵循不同的路径,构成了条件逻辑的基础。

MATLAB 中条件块的基本结构使用 if、elseif、else 和 end 关键字。

if <logical_expression_1>
% 如果 logical_expression_1 为真,则执行的语句
elseif <logical_expression_2>
% 如果 logical_expression_1 为假 AND logical_expression_2 为真,则执行的语句
else
% 如果所有前面的表达式都为假,则执行的语句
end
  • if 块可以单独存在。
  • elseif 和 else 是可选的,提供备用路径。
  • 您可以有多个 elseif 块,但只能有一个 else 块。
  • 整个结构必须由一个 end 关键字终止。

您可以将逻辑流可视化为一系列问题:

开始
|
v
+-------------------------+
| 条件1为真吗? | --(是)--> [执行代码块1] --+
+-------------------------+ |
| (否) |
v |
+-------------------------+ |
| 条件2为真吗? | --(是)--> [执行代码块2] --+
+-------------------------+ |
| (否) |
v |
[执行 'else' 块] -----------------------------------------+
| |
v |
结束 <-----------------------------------------------------------+

让我们编写一个脚本来分类温度读数。创建一个名为 classifyTemperature.m 的脚本文件,并添加以下代码:

% 定义一个摄氏温度
temperatureC = 23.5;
% 检查条件并对温度进行分类
if temperatureC < 0
classification = 'Freezing';
elseif temperatureC >= 0 && temperatureC < 15
classification = 'Cold';
elseif temperatureC >= 15 && temperatureC < 25
classification = 'Moderate';
else % temperatureC >= 25
classification = 'Warm';
end
% 将结果显示到命令窗口
% fprintf 函数用于格式化并打印输出字符串。
% %g 是浮点数的占位符。
% %s 是字符串的占位符。
% \n 用于创建新行。
fprintf('A temperature of %g C is considered %s.\n', temperatureC, classification);

当您从 MATLAB 命令行窗口运行此脚本时,它将显示以下结果:

A temperature of 23.5 C is considered Moderate.

在 if 语句中,始终使用 && 进行逻辑 AND 运算,使用 || 进行逻辑 OR 运算。这些是“短路求值(short-circuiting)”运算符。对于 A && B,如果 A 为假,MATLAB 将不会评估 B。这既高效又能防止错误,例如在检查变量是否存在后再使用它。

MATLAB 针对数组和矩阵运算进行了优化。虽然 if 语句必不可少,但应避免在循环内部逐个处理数组元素。取而代之,使用逻辑索引(logical indexing)。这是 MATLAB 惯用编程的核心概念,并且速度显著更快。

% --- 慢速方法:使用带有 if 语句的循环 ---
data = [-10, 5, 20, 30, -2];
for i = 1:length(data)
if data(i) < 0
data(i) = 0; % 将负值替换为 0
end
end
% --- 快速方法:使用逻辑索引(向量化)---
data = [-10, 5, 20, 30, -2];
negative_indices = (data < 0);
% 上一行创建一个逻辑数组:[1, 0, 0, 0, 1]
data(negative_indices) = 0; % 使用逻辑数组设置值
% 上述代码的更简洁版本:
data(data < 0) = 0;
  • 赋值 vs. 比较:一个非常常见的错误是在 if 条件中使用 =(赋值)而不是 ==(比较)。例如,if x = 5 将导致错误。它应该是 if x == 5。
  • 浮点数比较:由于精度限制,在比较浮点数是否完全相等时要小心。与其使用 if x == 0.1,更安全的做法是检查差值是否在一个小容差范围内:if abs(x - 0.1) < 1e-9。
  • 不匹配的 end:忘记 end 语句或 end 语句过多都会导致语法错误。MATLAB 编辑器非常擅长通过突出显示匹配的关键字和自动缩进代码(Ctrl+I 或 Cmd+I)来帮助您找到这些错误。