Цикл for используется для повторения команды или набора команд в случае, когда число повторений заранее известно. Синтаксис цикла for имеет следующий вид:
forvar = b1:b2:b3
Команды (текст программы)
End
Здесь var – переменная (счетчик) цикла, которая при каждом повторении цикла изменяется от начального значения b1 до конечного значения b3 с шагом b2 (если параметр b2 не указан, по умолчанию его значение принимается равным 1). Переменная цикла может принимать не только целые, но и вещественные значения с любым знаком. Команды в тексте программы разделяются запятой <,>, точкой с запятой <;> или нажатием клавиши <Enter>. Ввод команд завершается командой end. Цикл завершается, как только значение var превысит b3. Команды между for и end воспринимаются системой как части одной сложной команды. Поэтому нажатие клавиши <Enter> для перехода к следующей строке не приводит в данном случае к выполнению этих команд. Выполнение команд начинается только тогда, когда введена «закрывающая скобка» сложной команды в виде ключевого слова end.
Если несколько сложных команд такого типа вложены одна в другую, вычисления начинаются лишь тогда, когда записан конец (end) наиболее охватывающей (внешней) сложной команды.
Например, для поиска суммы элементов матрицы A, расположенных ниже главной диагонали, в файл-функции Sn следует использовать два цикла for, причем начальное значение счетчика внутреннего цикла зависит от текущего значения счетчика внешнего цикла:
function s=Sn(A)
[n m]=size(A);
s=0;
for j=1:m
for i=j+1:n
s=s+A(i,j);
end
end
В том случае, когда число повторений заранее неизвестно и определяется в ходе выполнения набора команд, следует организовать цикл while. Цикл while работает, пока выполнено условие цикла.
Пример файл-функции polsum, которая находит сумму всех первых положительных элементов вектора:
function s=polsum(x)
s=0;
k=1;
while x(k)>0
s=s+x(k);
k=k+1;
end
Вызовем файл-функцию polsumиз командной строки:
>> a=[1 -2 3];
>> S=polsum(a)
S =
Файл-функция polsum имеет один недостаток: если все элементы вектора – положительные числа, то k становится больше длины вектора x, что приводит к ошибке, например:
>> a=[1 2 3];
>> S=polsum(a)
??? Index exceeds matrix dimensions.
Кроме проверки значения x(k), следует позаботиться о том, чтобы значение k не превосходило длины вектора x. Вход в цикл должен осуществляться только при одновременном выполнении условий k <= length(x) и x(k) > 0, т. е. необходимо применить логический оператор < И >, обозначаемый в MATLAB символом &. Заменим в файл-функции polsum условие цикла while x(k)>0 на составное while k <= length(x)&x(k) > 0. Если первое из условий не выполняется, то второе условие проверяться не будет, именно поэтому выбран такой порядок операндов. Теперь файл-функция polsum будет работать верно для любых векторов: