Материал: Matlab. Практический подход. Самоучитель

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Самоучитель Matlab

Кроме условных операторов, имеются операторы цикла for и while. И тот, и другой используются для выполнения последовательности однотипных действий, однако синтаксис у них существенно отличается. В частности, синтаксис вызова оператора цикла for имеет такой вид:

for переменная=значение_1:значение_2:значение_3 команды

end

После ключевого слова for указывается индексная переменная, для которой через знак равенства указывается начальное значение (значение_1), шаг дискретности (значение_2) и конечное значение (значение_3). Начальное значение, шаг дискретности и конечное значение разделяются двоеточиями. Шаг дискретности можно не указывать – в этом случае шаг дискретности единичный.

Выполняется оператор цикла for по следующей схеме: индексная переменная последовательно, с установленным шагом дискретности, пробегает значения от начального до конечного значений, и для каждого из этих значений индексной переменной выполняются команды, вплоть до ключевого слова end, являющегося идентификатором окончания оператора цикла. Далее приведен пример кода, в котором использован оператор цикла for для вычисления суммы ряда:

function y=MyExp(x,n) z=0;

q=1;

for i=0:n-1 z=z+q; q=q*x/(i+1); end

y=z+q; end

Функцией MyExp() по двум ее аргументам (первый x

и второй n ) вы-

 

x2

 

x3

 

xn

n

xk

 

 

 

 

 

числяется сумма 1 + x +

+

+... +

=

, которая дает при-

 

 

n !

 

2!

3!

 

k =0

k !

x

k

ближенное значение для экспоненциальной зависимости exp(x) =

 

.

 

 

 

 

 

 

 

 

 

 

 

k =0

k !

 

 

 

 

 

 

 

 

 

 

 

 

В коде функции объявляются две локальные переменные (переменная z с начальным нулевым значением и переменная q с начальным единичным значением), а основу кода составляет оператор цикла for. В операторе цикла вводится индексная переменная i с начальным значением 0, конечным значением n-1 (через переменную n обозначен второй аргумент функции MyExp()). Шаг дискретности индексной переменной явно не задан, поэто-

126

Глава 3. Элементы программирования

му по умолчанию он равен единице. На каждом итерационном шаге в операторе цикла выполняется две команды: сначала значение переменной z увеличивается на величину q (команда z=z+q), а затем командой q=q*x/ (i+1) текущее значение переменной q умножается на x (первый аргумент функции MyExp()) и делится на увеличенное на единицу значение индексной переменной. В переменную z записывается сумма ряда, а каждое очередное слагаемое ряда заносится в переменную q. Здесь использовано то

обстоятельство, что если на k-м шаге добавка рана q

 

xk

k

 

, то на следу-

 

 

xk +1

 

 

 

 

 

k !

 

 

x

 

 

 

 

 

 

 

 

 

 

ющем, k+1-м шаге qk +1

 

= qk

 

 

 

. После выполнения опера-

(k +1)!

k +1

тора цикла сумма вычислена с учетом слагаемого для значения индексной переменной со значением n-1, а переменная q имеет значение добавки для следующего итерационного шага. Этот шаг реализуется уже после оператора цикла командой y=z+q, в результате чего переменная y получает нужное значение. На рис. 3.25 показано окно редактора m-файлов с кодом функции

MyExp().

Рис. 3.25. Программный код функции с оператором цикла для вычисления экспоненты

Результат вычисления экспоненты для единичного первого аргумента (аргумент в экспоненциальной зависимости) и различных значений второго аргумента (верхний индекс суммы ряда) представлен на рис. 3.26.

Стоит отметить, что чем больше по абсолютной величине первый аргумент, тем больше необходимо учитывать слагаемых при расчете экспоненты.

Синтаксис вызова оператора while такой:

while условие команды

end

127

Самоучитель Matlab

Рис. 3.26. Результат вычисления экспоненты по разному числу слагаемых в ряде

После ключевого условия while указывается условие. Это условие проверяется, и если оно истинно, выполняются команды, указанные после этого условия, вплоть до инструкции окончания оператора end. Затем снова проверяется условие. Работа оператора while завершается, если условие становится ложным. Отсюда следует, что команды в операторе while должны быть такими, чтобы их выполнение на каком-то этапе приводило к изменению значения условия, иначе цикл будет бесконечным. Хотя это

инеобязательно: работа условных операторов и операторов цикла может быть прервана с помощью инструкции break. Существует инструкция

идля досрочного завершения работы функции – это инструкция return. На рис. 3.27 показано окно редактора m-файлов с кодом функции, в которой использован оператор цикла while.

Рис. 3.27. Окно редактора m-файлов с кодом функции, в которой использован оператор while

Код функции SqrAvr() приведен ниже:

128

Глава 3. Элементы программирования

function s=SqrAvr(n) sum=0;

i=1; while i<=n

sum=sum+i*i;

i=i+1;

end s=sum/n; end

У функции один

аргумент (обозначен как n ), на основании которо-

 

1

 

n

го по формуле

 

k2 вычисляется значение, возвращаемое функцией

 

n k =1

в качестве результата. Сразу оговоримся, что имеет место соотношение

1

n

 

(n +1)(2n +1)

 

k2

=

, которое можно использовать для проверки кор-

n

 

k =1

6

 

 

 

 

 

ректности работы функции. Результат вызова функции приведен в документе на рис. 3.28.

Рис. 3.28. Результат вызова функции SqrAvr()

Легко видеть, что значение вычислено корректно. Что касается самого программного кода, использованного для вычислений, то он достаточно прост. Вначале объявляются локальные переменные sum (используется для вычисления суммы квадратов натуральных чисел, начальное значение равно 0) и i (индексная переменная с начальным значением 1). В операторе цикла while проверяется условие i<=n (индексная переменная не превышает значение аргумента n функции SqrAvr()). В теле оператора цикла выполняется команда sum=sum+i*i, которой на величину квадрата индексной переменной i увеличивается значение переменной sum, а затем командой i=i+1 на единицу увеличивается значение индексной переменной. После завершения работы оператора цикла командой s=sum/n в переменную s записывается значение функции SqrAvr().

129

Самоучитель Matlab

Логические значения и логические операторы

Все выглядит очень логично, Штирлиц.

К/ф "Семнадцать мгновений весны"

Как уже упоминалось в первой главе книги, в Matlab в качестве логического значения истина используется единица, а в качестве логического значения ложь используется ноль. Другими словами, любое логическое выражение, если оно истинно, интерпретируется как единица, а если ложно – как ноль. Более того, если числовое значение употребляется в качестве логического выражения, то ненулевое значение интерпретируется как истина, а нулевое значение интерпретируется как ложь.

Особый интерес представляют возможные операции, которые применимы к логическим значениям, а также способы получения и обработки логических массивов. Начнем с логических операций, логических функций и логических операторов. Сюда же отнесем и операторы сравнения, которые часто используются в логических выражениях.

На заметку

В первой главе мы кратко познакомились с логическими и условными операторами. Здесь мы несколько расширим свои познания в этой области.

Некоторые операторы сравнения уже использовались нами ранее. Для удобства список операторов сравнения приведен в табл. 3.1 вместе с встроенными функциями, используемыми для сравнения значений.

Табл. 3.1. Операторы сравнения

Оператор

Функция

Описание

 

 

 

<

lt()

Меньше. Выражение A<B истинно, если значение перемен-

ной A меньше значения переменной B. Тот же результат мо-

 

 

жет быть получен с помощью команды lt(A,B)

>

gt()

Больше. Выражение A>B истинно, если значение перемен-

ной A больше значения переменной B. Тот же результат мо-

 

 

жет быть получен с помощью команды gt(A,B)

 

 

Меньше или равно. Выражение A<=B истинно, если значе-

<=

le()

ние переменной A не превышает значения переменной B.

Тот же результат может быть получен с помощью команды

 

 

le(A,B)

 

 

Больше или равно. Выражение A>=B истинно, если зна-

>=

ge()

чение переменной A не меньше значения переменной B.

Тот же результат может быть получен с помощью команды

 

 

ge(A,B)

130

Источник: https://studfile.net/preview/16433384/