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,

Другие вопросы по тегам