Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
практикум по матлабу.pdf
Скачиваний:
156
Добавлен:
29.03.2015
Размер:
1.19 Mб
Скачать

если перед ними поставить точку. Например, операция [1,2,3,4].*[1,2,3,4] или [1,2,3,4].ˆ2 дадут один и тот же результат [1,4,9,16]. Попробуйте эти операции или им подобные выполнить самостоятельно. Эти действия в особенности полезны при использовании графики.

3.4.Сохранение данных из рабочей области

При выходе из системы MATLAB все переменные рабочей области теряются. Однако при вызове команды save перед выходом все переменные рабочей области записываются на диск в нетекстовом формате в файл с именем matlab.mat. Если впоследствии загрузить MATLAB, то команда load восстановит все переменные рабочего пространства.

4. Операторы for, while, if, case и операторы отношения

При использовании в своей основной форме перечисленные выше операторы управления MATLAB работают так же, как и в большинстве языков программирования.

4.1.Цикл for

Например, для данного n, оператор x = [ ]; for i = 1:n,x=[x,iˆ2], end

или

x = [ ]; for i = 1:n x = [x,iˆ2] end

создает определенный вектор размерности n, а оператор x = []; for i = n:-1:1, x=[x,iˆ2], end

создает вектор с теми же элементами, но размещенными в обратном порядке. Попробуйте выполнить это сами. Заметим, что матрица может быть пустой (например, в случае оператора x = [ ].) Последовательность опреаторов

for i = 1:m for j = 1:n

H(i, j) = 1/(i+j-1); end

end H

создаст и напечатает на экране матрицу Гильберта размерности mxn. Точка с запятой, которая завершает внутренний оператор, предотвращает вывод на экран

117

ненужных промежуточных результатов, в то время как последний оператор H выводит на экран окончательный результат.

4.2. Цикл while

В общем виде цикл while записывается в виде

while <условие> <операторы> end

<Операторы> будут повторяться до тех пор, пока <условие> будет оставаться истинным. Например, для заданного числа a приведенная далее последовательность операторов вычислит и выведет на дисплей наименьшее неотрицательное число n, такое что 2n < a:

n = 0;

while 2^n < a n = n + 1; end

n

4.3.Условный оператор if

В общем виде простой оператор if используется следующим образом:

if <условие> <операторы> end

<Операторы> будут выполняться только если <условие> истинно. Возможно также множественное ветвление, что демонстрируется приведенным далее примером.

if n < 0 parity = 0;

elseif rem(n,2) == 0 parity = 2;

else

parity = 1; end

118

При использовании двухвариантного условного оператора часть, связанная с elseif, конечно, не используется.

4.4.Оператор переключения case

При необходимости построить конструкцию ветвления с более чем двумя логическими условиями удобнее использовать не вложенные операторы if, а оператор переключения switch ... case. Этот оператор имеет следующую структуру:

switch <выражение>

%<выражение> - это обязательно скаляр или строка case <значение1>

операторы

%выполняется, если <выражение>=<значение1> case <значение2>

операторы

%выполняется, если <выражение>=<значение2>

...

otherwise операторы

%выполняется, если <выражение> не совпало

%ни с одним значением

end

4.5.Условия (операторы отношения)

В MATLAB используются следующие операторы отношения:

<

меньше чем

>

больше чем

<=

меньше или равно

>=

больше или равно

==

равно

˜=

не равно

Отметим, что знак = используется в операторах присваивания, в то время как знак == используется в операторах отношения. Операторы отношения (или, другими словами, логические переменные, которые они создают) могут объединяться с помощью следующих логических операторов:

119

&

И

|

ИЛИ

˜

НЕ

Когда эти операторы применяются к скалярам, то результатом является тоже скаляр 1 или 0 в зависимости от того, является ли результат истиной или ложью. Попробуйте вычислить 3 < 5, 3 > 5, 3 == 5, и 3 == 3. Когда операторы отношения применяются к матрицам одного размера, результатом является матрица того же размера, у которой в качестве элементов стоят 0 или 1, в зависимости от соотношения между соответствующими элементами исходных матриц. Попробуйте вычислить a=rand(5), b=triu(a), a == b. Операторы while и if интерпретируют отношение между матрицами как истинное в том случае, если результирующая матрица не имеет нулевых элементов.

Так, если вы хотите выполнить оператор в том случае, когда матрицы A и B полностью совпадают, вы можете написать

if A == B <операторы> end

но если вы хотите выполнить оператор в том случае, когда матрицы A и B не равны, вы должны ввести if any(any(A ˜= B)) <оператор> end или, что проще, if A == B else <оператор> end. Заметим, что конструкция if A ˜= B, <оператор>, end почти наверняка не даст того, что нужно, поскольку оператор будет выполняться только если каждый элемент матрицы A будет отличаться от соответствующего элемента матрицы B. Для сведения матричных отношений к вектору или скаляру можно воспользоваться функциями any и all. В предыдущем примере необходимо использование функции any два раза, поскольку эта функция - векторная (см. 5.2). Оператор for допускает использовать любую матрицу вместо 1:n. Для более полного знакомства с возможностями, расширяющими мощь оператора for, см.[6].

4.6. Функция find

Хотя функция find не относится формально к условным операторам или операторам отношения, тем не менее мы решили поместить ее в этот раздел, поскольку ее использование весьма полезно для работы с циклами и условными операторами.

Оператор k=find(x) возвращает вектор k номеров ненулевых элементов вектора/матрицы x. Если x- матрица, то при определении индексов она рассматривается как вектор, образованный последовательно соединенными столбцами матрицы. Вектор find(x) можно использовать совместно с операторами отношения, поскольку результатом применения оператора отношения к матрицам является мат-

120