Matlab for循环怎么写?从基础到进阶的超详细指南
刚学Matlab的时候,我对它的for循环真是又爱又恨。爱的是它写起来比C语言简单,不用嵌套那么多括号和条件判断;恨的是它的语法和我之前学过的Python、Java都不一样,一开始总是写错!后来用得多了才发现,Matlab的for循环其实超灵活,只是需要摸清它的脾气。今天就把我总结的Matlab for循环写法全部分享给你,从最基础的数值循环到复杂的数组遍历,再到那些容易踩的坑,保证你看完就能上手写循环啦!
一、基础数值循环——最简单的入门写法
Matlab的for循环最基础的用法就是遍历一个数值范围。比如你想循环10次,直接写for i=1:10就行,然后跟着循环体。举个直观的例子:计算1到10的总和。
sum_num = 0;
for i=1:10
sum_num = sum_num + i;
end
disp(sum_num);
运行这段代码,你会得到结果55。是不是很简单?这里的i从1开始,每次自动加1,直到10结束——完全不用像C语言那样写for(i=1;i<=10;i++),省去了不少冗余代码!
如果你想调整步长,比如遍历1到10的奇数,只需把范围改成1:2:10(步长为2);想倒序遍历10到1,就写10:-1:1(步长为-1)。比如倒序打印数字:
for i=10:-1:1
disp(i);
end
这段代码会依次输出10、9、...、1,新手很容易就能理解。
二、进阶用法——遍历数组和矩阵
除了数值范围,Matlab的for循环还能直接遍历数组元素。比如你有一个数组a=[1,3,5,7],想逐个处理每个元素:
a = [1,3,5,7];
for x=a
disp(x*2);
end
运行后会输出2、6、10、14——是不是超方便?但要注意:如果你想修改原数组的元素,一定要用索引!比如把数组里的每个元素翻倍:
a = [1,3,5,7];
for i=1:length(a)
a(i) = a(i)*2;
end
disp(a);
这里用i作为索引访问a(i),才能真正修改原数组。如果直接写for x=a然后修改x,原数组是不会变的(别踩这个坑!)。
遍历矩阵的行或列
处理矩阵时,我们常需要遍历每行或每列。比如有一个2行3列的矩阵A=[1,2,3;4,5,6],遍历每行的写法:
A = [1,2,3;4,5,6];
for row=1:size(A,1) % size(A,1)获取矩阵行数
disp(A(row,:)); % A(row,:)表示第row行的所有元素
end
这段代码会先打印第一行[1,2,3],再打印第二行[4,5,6]。如果想遍历列,只需把size(A,1)换成size(A,2),A(row,:)换成A(:,col)。
嵌套循环——打印99乘法表
嵌套循环就是循环里套循环,最经典的例子就是打印99乘法表:
for i=1:9
for j=1:i
fprintf('%d*%d=%d ',j,i,j*i);
end
fprintf('\n');
end
外层循环控制行数i,内层循环控制列数j(j<=i避免重复),用fprintf格式化输出,就能得到整齐的乘法表啦!
三、那些容易踩的坑——别让这些错误浪费你的时间
1. 循环变量的“只读”特性(超级重要!!!)
Matlab的循环变量是不能在循环体内修改的——或者说,修改了也没用。比如你写:
for i=1:5
i = i+1;
disp(i);
end
你以为输出会是2、3、4、5、6?其实不然!Matlab每次迭代都会把循环变量重置为原范围的下一个值。比如第一次i=1被改成2,输出2;第二次循环i会自动变成2(原范围的第二个值),再改成3输出3;直到第五次结束。所以修改循环变量完全是无用功,别浪费时间在这上面!
2. 忘记预分配内存——导致循环变慢
Matlab是解释型语言,如果在循环里动态扩展数组,会不断重新分配内存,速度极慢。比如:
result = [];
for i=1:10000
result = [result, i];
end
这段代码运行起来会很卡!正确的做法是预分配内存:
result = zeros(1,10000); % 提前分配1行10000列的数组
for i=1:10000
result(i) = i;
end
我之前写过一个处理10万数据的循环,没预分配时跑了5分钟,预分配后不到10秒就搞定——差别真的超大!
3. 不必要的循环——优先用向量化操作
Matlab最擅长的是向量化操作,有时候用向量化代替循环会更快更简洁。比如计算1到10的平方,用循环写:
squares = zeros(1,10);
for i=1:10
squares(i) = i^2;
end
但用向量化写只需一行:
squares = (1:10).^2;
不仅代码更短,运行速度也更快。所以写循环前,先想想能不能用向量化操作代替——但如果逻辑复杂,循环也是很好的选择!
四、实用技巧——让你的循环更高效
1. 用break跳出循环
如果想在满足某个条件时提前结束循环,用break就行。比如找第一个大于100的数:
numbers = [50,70,90,110,130];
found = 0;
for x=numbers
if x>100
found = x;
break;
end
end
disp(found);
这段代码会在找到110时立刻跳出循环,不用遍历整个数组。
2. 用continue跳过当前迭代
如果想跳过当前迭代,直接进入下一次,用continue。比如打印1到10中的奇数:
for i=1:10
if mod(i,2)==0 % mod(i,2)求余数,偶数余数为0
continue;
end
disp(i);
end
遇到偶数时continue会跳过当前循环,只打印奇数。
3. 遍历单元格数组
单元格数组(cell array)是Matlab里存储不同类型数据的容器,遍历写法如下:
cell_array = {'apple', 'banana', 'orange'};
for x=cell_array
disp(x{1}); % x是单元格类型,用x{1}获取内容
end
这样就能直接输出每个字符串啦!
五、总结
Matlab的for循环其实没那么难,只要掌握了基础的数值范围写法、数组/矩阵遍历,再避开那些容易踩的坑(比如修改循环变量、忘记预分配内存),就能写出高效又清晰的循环代码啦!
最后再提醒一句:Matlab是向量化语言,优先考虑向量化操作,但如果逻辑复杂,循环也是很好的选择。多写多练,你就能熟练掌握Matlab的for循环啦!希望这篇文章能帮到你,下次写循环的时候再也不用抓耳挠腮啦!

浙公网安备 33010602011771号