Цикл for с шагом умножения в MATLAB

Есть ли способ использовать цикл for в MATLAB с пользовательским шагом? Что я хочу сделать, так это перебрать все степени 2 меньше заданного числа. Эквивалентный цикл в С++ (например) будет:

for (int i = 1; i < 65; i *= 2)

Примечание 1. Этот вид итерации лучше всего подходит для циклов for, поэтому я бы не хотел использовать циклы while.
Примечание 2. m на самом деле использую Octave, а не MATLAB.


person Paul Manta    schedule 04.04.2012    source источник


Ответы (2)


Возможно, вы хотите что-то вроде

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
person Azim J    schedule 04.04.2012

Вы можете перебирать любой вектор, поэтому вы можете использовать векторные операции для создания своего вектора значений перед запуском цикла. Например, цикл по первым 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
person Bill Cheatham    schedule 04.04.2012