MATLAB - 循环
MATLAB - 循环结构和最佳实践
Section titled “MATLAB - 循环结构和最佳实践”在编程中,循环(loop)是一种控制结构,它重复执行一段代码块,直到满足指定条件。循环对于自动化重复任务至关重要,例如处理数组中的元素或运行迭代算法。
循环的基本控制流程涉及条件检查。如果条件为真,循环体执行,然后再次检查条件。这会一直持续到条件变为假。
MATLAB 提供了两种主要的循环类型:for 和 while。
for 循环
Section titled “for 循环”for 循环以固定的次数执行代码块。它遍历向量或矩阵的元素,在每次迭代中为循环变量分配新值。
for loopVariable = range % 要执行的代码end示例:数组元素求和
Section titled “示例:数组元素求和”% 创建一个数字向量data = [10, 20, 30, 40, 50];total = 0; % 初始化累加器
% 遍历 'data' 中的每个元素for val = data total = total + val;end
fprintf('The sum is: %d\n', total);while 循环
Section titled “while 循环”while 循环重复执行一段代码块,只要指定条件保持为真。迭代次数不是预先确定的,而是取决于条件。
while condition % 要执行的代码 % (必须包含能改变条件的代码)end示例:查找第一个大于 1000 的 2 的幂
Section titled “示例:查找第一个大于 1000 的 2 的幂”n = 1;
while n < 1000 n = n * 2;end
fprintf('The first power of 2 greater than 1000 is: %d\n', n);循环控制语句
Section titled “循环控制语句”你可以使用控制语句改变循环的流程:
break:立即终止整个循环,执行在end关键字之后的语句处继续。continue:跳过当前迭代的其余部分,并继续循环的下一次迭代。
关键最佳实践:向量化和预分配
Section titled “关键最佳实践:向量化和预分配”尽管循环是基础,但在 MATLAB 中过度使用它们会导致代码运行缓慢。MATLAB 针对**向量化(vectorized)**操作进行了优化,这些操作可以一次性作用于整个数组。在编写循环之前,请始终考虑是否存在向量化的替代方案。
让我们计算 1,000,000 个点的 $$y = \sin(x)$$。
x = linspace(0, 2*pi, 1e6);
% 慢速的 'for' 循环方法tic; % 启动计时器y_loop = zeros(1, 1e6);for i = 1:length(x) y_loop(i) = sin(x(i));endtoc; % 结束计时器
% 快速向量化方法tic; % 启动计时器y_vec = sin(x);toc; % 结束计时器
% 向量化方法快几个数量级。如果循环不可避免,你必须为在循环内部增长的数组预分配(pre-allocate)内存。否则,MATLAB 将被迫在每次迭代中重新调整数组大小,这效率极低。
% 差:在循环中增长数组tic;bad_array = [];for i = 1:50000 bad_array(i) = i^2;endtoc;
% 好:使用 zeros() 预分配内存tic;good_array = zeros(1, 50000); % 一次性分配所有内存for i = 1:50000 good_array(i) = i^2;endtoc;
% 预分配方法明显更快。