有没有办法在MATLAB中使用自定义步骤的for循环?我想要做的是迭代2小于给定数字的所有2的幂。 C ++中的等价循环(例如)将是:
for (int i = 1; i < 65; i *= 2)
注1:这种迭代最适合for循环,所以我不想使用while循环。
注2:我实际上使用的是Octave,而不是MATLAB。
答案 0 :(得分:5)
也许你想要的东西是
for i=2.^[1:6]
disp(i)
end
除了你需要弄清楚指数的范围。这使用了从那以后的事实
a_(i+1) = a_i*2
这可以改写为a_i = 2^i
。
否则你可以做类似下面的事情
i=1;
while i<65
i=i*2;
disp(i);
end
答案 1 :(得分:3)
您可以迭代任何向量,这样您就可以在开始循环之前使用向量运算来创建值向量。例如,前100个平方数的循环可以这样写:
values_to_iterate = [1:100].^2;
for i = values_to_iterate
i
end
或者你可以遍历向量values_to_iterate
中的每个位置(这会产生相同的结果,但是有i
跟踪你有多少次迭代的好处完成 - 如果您将每个循环的结果按顺序写入输出向量,这非常有用):
values_to_iterate = [1:100].^2;
for i = 1:length(values_to_iterate)
values_to_iterate(i)
results_vector(i) = some_function( values_to_iterate(i) );
end
更简洁地说,您可以简单地编写第一个示例:
for i = [1:100].^2
i
end
与C不同,没有必须从一个值到另一个值的“规则”。 迭代的向量可以是完全任意的:
for i = [10, -1000, 23.3, 5, inf]
i
end