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

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

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

Для объявления функции использован следующий программный код:

f:=x->if x<0 then x^2*exp(x)

else sin(2*PI*x)^4*exp(-x^2)

end_if

Всоответствиисэтимкодомопределяетсякусочно-непрерывнаяфункция,ко- торая при отрицательных аргументах принимает значение f(x) = x2 exp(x) и при неотрицательных аргументах равна f (x) = sin(2πx)4 exp(−x2) . Для большей наглядности там же приведен график описанной функции. График построен с помощью команды plot(f,x=-7..2). Здесь стоит обратить внимание, что первым аргументом указано только имя функции (без аргумента). Это необходимо, поскольку в противном случае, если указать аргумент, график построен не будет в силу невозможности обработать в символьном виде условие, проверяемое в условном операторе. В том формате вызова, который использован, оператор (имя функции), указанный первым аргументом функции plot(), действует на диапазон изменения переменной, указанной вторым аргументом функции plot().

Если проверяется несколько условий, используют вложенные условные операторы. Полезными могут стать и логические операторы, с помощью которых проверяются сложные условия.

На заметку

В MuPAD используются следующие логические операторы. Логическое и – оператор and, логическое или – оператор or, логическое исключающее или – оператор xor, логическое отрицание – оператор not, логическая импликация – оператор ==> и логическое тождество – оператор <=>. Результатом выражения A and B является значение TRUE, если оба операнда A и B равны TRUE. Если хотя бы один из операндов равен FALSE, результатом выражения является FALSE. Результатом выражения A or B является значение TRUE, если хотя бы один из операндов равен TRUE. Если оба операнда равны FALSE, значением выражения будет FALSE. Значение выражения A xor B равно TRUE, если один и только один из операндов равен TRUE (другой, соответственно, равен FALSE). Если оба операнда равны TRUE или оба равны FALSE, значением выражения A xor B будет FALSE. Выражение not A равняется TRUE, если операнд A равен FALSE. Если значение операнда A равно TRUE, результатом выражения является значение FALSE. Значение выражения A ==> B определяется как результат вычисления выражения (not A) or B, то есть результатом будет FALSE, если первый операнд равен TRUE, а второй операнд равен FALSE. Во всех прочих случаях результатом будет TRUE. Выражение A <=> B является эквивалентом выражения (A ==> B) and (B ==> A). Если проще, то результат выражения A <=> B равен TRUE при одинаковых значениях операндов и равен FALSE при разных значениях операндов.

Кроме того, для создания логических выражений часто используют операторы сравнения: равно (=), не равно (<>), меньше (<), больше (>), меньше или равно (<=), больше или равно (>=).

386

Глава 9. Символьные вычисления

Еще один пример объявления кусочно-непрерывной функции приведен в документе на рис. 9.33.

Рис. 9.33. Еще одна кусочно-непрерывная функция

Для определения функции использован следующий программный код:

f:=x->if x<0 or x>4 then cos(2*PI*x)^2

else if x<1 then 1-x^2

else if x<3 then sin(2*PI*x) else x-3 end_if

end_if end_if

В данном случае функция состоит из нескольких фрагментов. Для значений аргумента функции x < 0 и x > 4 соответствующая функциональная зависимость имеет вид f (x) = cos(2πx)2 . Для значений аргумента в диа-

387

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

пазоне 0 ≤ x < 1 зависимость имеет вид f(x) = 1 −x2 . Для значений аргумента 1 ≤ x < 3 использована зависимость f (x) = sin(2πx). Наконец, в случае, если аргумент попадает в диапазон значений 3 ≤ x ≤ 4 , значение функции вычисляется по формуле f (x) = x − 4 . Весь этот нехитрый алгоритм реализован через систему вложенных условных операторов. Составить представление о том, как выглядит вся функциональная зависимость, можно по документу на рис. 9.34.

Рис. 9.34. График кусочно-непрерывной функции

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

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

else if условие then

команды

else if условие then

команды

else команды

end_if

end_if

end_if

388

Глава 9. Символьные вычисления

используется конструкция вида

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

elif условие then команды elif условие then команды else команды

end_if

Какая из них лучше в плане читабельности, решать читателю. Что касается нашей функции, то ее код мог бы выглядеть так (для удобства имя функции заменено на f2):

f2:=x->if x<0 or x>4 then cos(2*PI*x)^2 elif x<1 then 1-x^2

elif x<3 then sin(2*PI*x) else x-3

end_if

При этом результат выполнения команды определения функции фактически такой же, как и при использовании "неупрощенного" синтаксиса (рис. 9.35).

Рис. 9.35. Еще один способ определения кусочно-непрерывной функции

Желающие могут проверить, что это та же самая функция, что рассматривалась выше.

389

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

Еще один способ проверки нескольких условий подразумевает использование оператора выбора case. В этом случае некоторое выражение проверяется на предмет совпадения с одним из возможных значений и в зависимости от того, есть совпадение или нет, выполняются определенные команды. Синтаксис вызова оператора такой:

case выражение of значение_1 do

команды_1

of значение_2 do

команды_2

...

otherwise

команды end_case

После ключевого слова case указывается проверяемое выражение. Далее идут блоки вида of значение do. Значение выражения, указанного после ключевого слова case, последовательно сравнивается со значениями в блоках of значение do до первого совпадения. Если совпадение найдено, выполняются все команды, начиная с соответствующего блока и до конца оператора case (инструкция end_case).

На заметку

Чтобы досрочно выйти из оператора выбора case, используют инструкцию break.

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

GetColor:=x-> case x

of 1 do

print(Unquoted,"1 - означает КРАСНЫЙ"); break

of 2 do

print(Unquoted,"2 - означает ЖЕЛТЫЙ"); break

of 3 do

print(Unquoted,"3 - означает ЗЕЛЕНЫЙ"); break

otherwise print(NoNL,x);

390

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