MATLAB: перерыв для цикла процесса
Я создал цикл for в функции Matlab. То, что я хочу сделать, это выполнить цикл для заданного числа итераций (maxsteps), но если разница между самым последним результатом F(шаг) и предыдущим результатом F(шаг-1) ниже указанного порога, то для обрежьте петлю:
for steps = 1:maxsteps
(various calculations)
if F(steps) - F(steps-1) < 0.001
Break
end
end
F(шаги) - это размерный вектор N (= maxsteps), который в каждом цикле "получает" новый столбец, выполняя сумму между двумя значениями, которые различаются на каждой итерации: F(шаги) = a + b.
Предполагая, что maxsteps равно 8 (или любому целому числу), когда я выполняю функцию, я получаю следующую ошибку:
Индексы индексов должны быть либо действительными положительными целыми числами, либо логическими.
Если я выполняю функцию без разрыва, то она работает отлично (но, конечно, я теряю опцию порога).
РЕДАКТИРОВАТЬ [1]: Теперь, когда я снова увидел проблему, я думаю, что проблема может быть в первой итерации. Потому что, когда шаги = 1, то F(1) - F(0) < 0,001, что, я полагаю, невозможно. Мне нужно что-то придумать, чтобы решить эту проблему.
1 ответ
Проблема (как вы заметили) заключается в том, что в первый раз в цикле вы выполняете эту операцию:
F(1) - F(0) < 0.0001
Этот нулевой индекс недействителен и вызывает вашу ошибку.
Вместо этого вам нужно убедиться, что вы выполнили весь цикл хотя бы один раз (чтобы избежать нулевого индекса). Таким образом, вы можете добавить дополнительные условные if
заявление.
if steps > 1 && (F(steps) - F(steps-1)) < 0.0001
Использование логического и (&&
) не будет оценивать второе условное выражение, если первое оценивается как false
,