Я хотел бы создать цикл в Matlab, который работал бы только через определенные пользователем интервалы времени, а не просто все время. Как можно написать это условие цикла?
С уважением
Я хотел бы создать цикл в Matlab, который работал бы только через определенные пользователем интервалы времени, а не просто все время. Как можно написать это условие цикла?
С уважением
Обычно вы итерируете несколько способов. Есть два основных способа, которые я могу придумать не сразу. Я также открою это для вики сообщества, чтобы другие могли легко редактировать это.
Во-первых, используя простой цикл For
.
Общий синтаксис for index = 1:someValue
someValue
в данном случае действительно может быть чем угодно, что больше 1
. Часто это просто последнее значение индекса матрицы, которую вы хотите пройти.
Вы также можете изменить это! Допустим, вы хотите, чтобы каждый 3-й индекс начинался со 2-й позиции в матрице. Все, что вам нужно сделать, это: for index = 2:3:someValue
Здесь 3 указывает циклу, что он должен добавить 3 к index
в конце каждой итерации цикла, пока вы не дойдете до (или не превзойдете) someValue
.
Еще одна модификация идет в обратном направлении. В этом случае вы начинаете с «конца» и переходите к началу. Это будет выглядеть так: for index = someValue:-1:1
Вы также можете выполнять каждый 4-й индекс, двигаясь назад for index = someValue:-4:1
.
Очевидно, вы можете заменить значение между двумя :
на нужный размер шага. Вам просто нужно знать о потенциальных проблемах с индексированием, которые могут возникнуть. А именно попытка индексации за пределы матрицы или потенциально отрицательная.
Во-вторых, здесь вы можете изменить значение внутри самого цикла. Как правило, это не лучшая идея, когда вы используете цикл for
, поскольку значение вашей индексирующей переменной будет изменяться циклом, а также вами внутри цикла. Много раз вы увидите, что это делается с помощью while
цикла или do while
комбо.
Вот несколько примеров:
index = 0;
do
{
% some operations
index = index + aNumber;
}while(index <= someValue)
В приведенном выше примере цикл будет продолжать цикл до тех пор, пока значение индекса index
не станет больше или равным someValue
в конце текущей итерации цикла. Этот тип цикла будет ВСЕГДА, и я повторяю, ВСЕГДА выполняется хотя бы один раз.
index = 0;
while(index <= someValue)
{
%some operations
index = index + aNumber;
}
В этом случае цикл продолжится, пока index
удовлетворяет логическому утверждению здесь. Если утверждение неверно, когда вы пытаетесь запустить цикл в первый раз, он вообще не будет выполняться.
Надеюсь, это поможет, и не стесняйтесь просить дополнительных разъяснений, если вы этого хотите!
Другие, пожалуйста, отредактируйте, чтобы добавить дополнительную информацию или очистить то, что я, возможно, не объяснил полностью =)
Вы имеете в виду что-то вроде этого:
for i = [1:5 7:10 12:14 21:22]
do_func(i)
end
или даже
for i = [1:5 4:7 19:-1:15]
do_func(i)
end
?
Если вы хотите выполнить действие только при выполнении определенного условия в цикле, вам просто нужно что-то вроде:
for i=1:length(arr)
if condition(arr(i))
do_something(arr(i));
end
end