0

Вопрос по syntax, matlab, octave, for-loop – Для цикла с шагом умножения в MATLAB

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

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

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

2 ответа
5

Возможно, вы хотите что-то вроде for i=2.^[1:6] disp(i) end

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

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
3

Вы можете перебирать любой вектор

поэтому вы можете использовать векторные операции для создания вектора значений перед началом цикла. Например, цикл по первым 100 квадратным числам можно записать так:

values_to_iterate = [1:100].^2;
for i = values_to_iterate
   i
end

Или вы можете перебрать каждыйposition в векторе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

В отличие от С, здесь не должно быть «правило». чтобы перейти от одного значения к другому. Итерированный вектор может быть совершенно произвольным:

for i = [10, -1000, 23.3, 5, inf]
     i
end

Похожие вопросы