2016-12-09 3 views
0

Я создал цикл 'for' в функции matlab. Я хочу выполнить цикл для заданного количества итераций (maxsteps), но если разница между последним результатом F (шаг) и предыдущим результатом F (шаг 1) ниже указанного порога, то сократить цикл короче:MATLAB: Break for loop process

for steps = 1:maxsteps 

    (various calculations) 

if F(steps) - F(steps-1) < 0.001 
    Break 
end 
end 

диафрагменное (шаги) представляет собой N (= maxsteps) размерность вектора, который на каждом цикле «получает» новый столбец, выполнив сумму между двумя значениями, которые отличаются на каждой итерации: F (этапы) = a + b.

Предполагая, что maxsteps 8 (или любое целое число), когда я исполню функцию, я получаю следующее сообщение об ошибке:

подстрочные индексы должны быть либо вещественные положительные целые или логические выражения.

Если я выполняю функцию без перерыва, то она отлично работает (но я, конечно, теряю возможность порога).

EDIT [1]: Теперь, когда я снова увидел проблему, я думаю, что проблема может быть на первой итерации. Потому что, когда шаги = 1, то F (1) - F (0) < 0,001, что, я полагаю, невозможно. Мне нужно подумать о чем-то, чтобы исправить эту проблему.

ответ

0

Вопрос (как вы отметили), что первый раз через петлю, вы выполняете эту операцию:

F(1) - F(0) < 0.0001 

Этот нулевой индекс является недействительным и вызывает вашу ошибку.

Вместо этого вы должны убедиться, что вы выполняете весь цикл хотя бы один раз (чтобы избежать нулевого индекса). Таким образом, вы можете добавить дополнительный условный оператор if.

if steps > 1 && (F(steps) - F(steps-1)) < 0.0001 

Использование логического и (&&) не будет оценивать второе условное, если первый имеет значение false.

+0

Я не знал, что смогу сделать это на MATLAB (&&). Благодаря! – Jespar