Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
для вялички / TROPA V MATLAB_21.doc
Скачиваний:
101
Добавлен:
13.02.2016
Размер:
2.79 Mб
Скачать

4.2 Операторы цикла

Цикл for используется для повторения команды или набора команд в случае, когда число повторений заранее известно. Синтаксис цикла for имеет следующий вид:

for var = 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 =

1

Файл-функция 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 будет работать верно для любых векторов:

>> a=[1 2 3];

>> S=polsum(a)

S =

6

4.3 Операторы ветвления

Ветвление в ходе работы программы осуществляется при помощи конструкции if-elseif-else. Самый простой вариант ее использования (без elseif и else) реализован в файл-функции possum , которая предназначена для нахождения суммы всех элементов вектора, больших 2:

function s=possum2(x)

s=0;

for k=1:length(x)

if x(k)>2

s=s+x(k);

end

end

Если ход программы должен изменяться в зависимости от нескольких условий, то следует использовать полную конструкцию if-elseif-else. Каждая из ветвей elseif в этом случае должна содержать условие выполнения набора команд, размещенных после нее. Важно понимать, что условия проверяются подряд, первое выполненное условие приводит к работе соответствующего набора, выходу из конструкции if-elseif-else и переходу к команде, следующей за end. У последней ветви else не должно быть никакого условия. Команды, находящиеся между else и end, выполняются в том случае, если все условия оказались невыполненными.

Предположим, что требуется написать файл-функцию для вычисления кусочно-заданной функции:

f(x)=

Она имеем вид

function f=pwf(x)

if x<-1

f=-abs(x)^(1/3);

elseif x<=3

f=x;

else

f=2-x;

end

Первое условие x < -1 проверяется в ветви if. Отметим, что условие –1 ≤ x не требуется включать в следующую ветвь elseif , поскольку в эту ветвь программа заходит, если предыдущее условие (x < -1) не выполнено. Условие x > 3 также проверять не надо. Если не выполнены два предыдущих условия x < -1 и x ≤ 3, то x будет больше трех.

Соседние файлы в папке для вялички