Инструментальные средства математического моделирования. Учебное пособие
.pdf
3. Типовые средства программирования
3.1. Функции пользователя
Простейшим способом ввода функций пользователя является присваивание введенной функции некоторой переменной: Name:=выражение, т. е. фактически использование операции присваивания (пример: y:=x*x+1;).
Для задания функций пользователя можно применить функ-
циональный оператор: name:=(x,y,...)->expr (пример: r:=(x,y)- >sqrt(x^2+y^2);).
Вызов функции имеет вид name(x,y,...), где (х,у,...) – список ее формальных параметров, являющихся локальными переменными. При их замене на фактические параметры они сохраняют значения только в теле функции (ехрr). За ее пределами локальные переменные либо неопределены, либо сохраняют ранее присвоенные им значения. Задать функцию пользователя можно, исполь-
зуя команду unapply: name:=unapply(expr,var1,var2,...) (пример: r:=unapply(sqrt(x^2+y^2), x, y);).
Визуализировать введенные функции можно следующим обра-
зом (рис. 3.1):
Рис. 3.1. Визуализация функций
21
3. Типовые средства программирования
Другой важный класс – импликативные функции, в которых связь между переменными задана неявно, в виде какого-либо выражения. Пример такой функции – задание окружности радиуса r: х^2 + у^2 = r^2. Импликативные функции записываются как уравнения. Их можно решать с помощью команды solve и команды графической визуализации implicitplot пакета plots.
3.2. Условные выражения
Для подготовки разветвляющихся программ в Maple-язык программирования включен оператор if, позволяющий создавать следующую конструкцию:
if <Условие сравнения> then <Элементы> |elif «Условие сравнения> then <Элементы>| |e1se <Элементы>| fi:
В вертикальных чертах | | указаны необязательные элементы данной конструкции. Следующих два вида условных выражений чаще всего используются на практике:
• if <Условие> then <Элементы 1> fi – если Условие выполняется, то исполняются Элементы 1, иначе ничего не выполняется;
• if <Условие> then <Элементы 1> else <Элементы 2> fi – если условие выполняется, то исполняются Элементы 1, иначе исполняются Элементы 2.
В задании условий используются логические конструкции со знаками сравнения (<, <=, >, >=, =, <>) и логическими операторами and, or и not, возвращающие логические значения true и false. Пример:
> х:=5:
> if x<0 then print(‘Negative’) fi;
Negative
> x:-l: > if x<0 then print(‘Negative’) fi;
В этом примере анализируется значение х. Если оно отрицательно, то с помощью функции вывода print на экран выводится сообщение «Negative». А вот если х неотрицательно, то не выводится никакого сообщения. В другом примере если х неотрицательно, то выводится сообщение «Positive»:
> х:=5: if x<0 then print(‘Negative’) else print(‘Positive’) fi;
22
3.3. Циклы
Negative
> x:=l: if x<0 then printСNegative») else printC’Positive’) fi;
Positive
Еще один пример особой формы задания конструкции if-then- else-fi:
>х:=–5: ‘if (x<0, print(‘Negative’),print(‘Positi ve’));
Negative
>х:=1: ‘if (х<0, print(‘Negative’),print(‘Positiv e’));
Positive
В этой конструкции вида ‘if ‘(Условие. Выражение1, Выражение 2) если Условие выполнятся, то будет исполнено Выражение1, в противном случае будет исполнено Выражение2.
3.3. Циклы
Зачастую необходимо циклическое повторение выполнения выражения заданное число раз или до тех пор, пока выполняется определенное условие. Maple имеет обобщенную конструкцию цикла, которая задается следующим образом: for <name>| |from <exprl>| |to <expr3>| |by <expr2>| while <expr4>| do <Statement sequence> od;
Здесь name – имя управляющей переменной цикла, exprl, ехрr2 и ехрrЗ – выражения, задающие начальное значение, конечное значение и шаг изменения переменной name, ехрr4 – выражение, задающее условие, пока цикл (набор объектов между словами do и od) будет выполняться.
В ходе выполнения цикла управляющая переменная меняется от значения exprl до значения ехрr2 с шагом, заданным ехрrЗ. Если блок by <ехрr2> отсутствует, то управляющая переменная будет меняться с шагом +1 при ехргКехрг2. Это наглядно поясняет следующий пример:
> for i front 1 to 5 do print(i) od;
1 2 3 4 5
В нем выводятся значения переменной i в ходе выполнения цикла. Нетрудно заметить, что она и впрямь меняется от значе-
23
3. Типовые средства программирования
ния 1 до значения 5 с шагом +1. Следующий пример показывает, что границы изменения управляющей переменной можно задать арифметическими выражениями:
> for i from 7/(2+5) to 2+3 do print(i) od:
1 2 3 4 5
А еще один пример показывает задание цикла, у которого переменная цикла меняется от значения 1 до 10 с шагом 2:
> for i from 1 to 10 by 2 do print(i) od:
1 3 5 7 9
В этом случае выводятся нечетные числа от 1 до 9. Шаг может быть и отрицательным:
> for i from 9 to 1 by -2 do print(i) od:
9 7 5 3 1
Следует отметить, что если expr1>expr2 задать заведомо невыполнимое условие, например, ехрr1>ехрr2 и положительное значение шага, то цикл выполняться не будет. Цикл можно прервать с помощью дополнительного блока while <ехрr4>. Цикл с таким блоком выполняется до конца или до тех пор, пока условие ехрr4 истинно.
> |
for i from 1 to 10 by 2 while i<6 do print(i) od: |
|
1 |
3 |
5 |
Таким образом, конструкция цикла в Maple-языке программирования вобрала в себя основные конструкции циклов for и while. Есть еще одна, более специфическая конструкция цикла:
|for <name>| |in <exprl>| |whi1e <expr2>| do <statement sequence> od:
Здесь exprl задает список значений, которые будет принимать управляющая переменная name. Цикл будет выполняться, пока не будет исчерпан список и пока выполняется условие, заданное выражением ехрг2. Например:
> for i in [1,2,5,-1,7,12] |
do print(i) od; |
|
1 |
2 5 -1 7 12 |
while i>0 do print(i) od: |
> |
for i in [1,2.5.-1,7.12] |
|
1 2 5
24
3.3.Циклы
Вцикле этого вида управляющая переменная может меняться произвольно.Циклымогутбытьвложенными.Возможнаупрощенная частная конструкция цикла типа while (while expr do statseq od:). Здесь выражения statseq выполняются, пока выполняется логическое условие ехрr. Пример такого цикла:
>n:=1:
n:=1.
>while n<16 do n:=2*n od; n:=2 n:=4 n:=8 n:=16
В этом примере идет удвоение числа n с начальным значением n=1 до тех пор, пока значение n меньше 16.
Контрольные вопросы
1.Способы задания функции пользователя.
2.Формы записи условных выражений.
3.Оператор цикла for.
4.Оператор цикла while.
25
4. Средства математического анализа
Применение систем символьной математики особенно эффективноприрешениизадачматематическогоанализа.Mapleобладает богатейшей базой данных по формулам математического анализа и может полноценно заменять тома книг со справочными данными [1, 4, 5]. При этом важно, что Maple не только «знает» многие формулы, но и может успешно использовать их при решении достаточно сложных задач в аналитическом (символьном) виде.
Начнем рассмотрение таких операций с вычисления производных.
4.1. Вычисление производных и пределов
Вычисление производных n-го порядка функции f – одна из самых распространенных задач математического анализа. В cреде Maple операция дифференцирования реализуется следующими
командами: |
|
diff(f, xl, х2, .... xn) |
diff(f, [xl, х2, .... хn]) |
Diff(f, xl, x2, .... xn) |
Diff(f, [xl, x2, .... хn]) |
Здесь f – дифференцируемое алгебраическое выражение, в общем случае f зависит от n переменных, по которым производится дифференцирование. Функция Diff является инертной формой вычисляемой функции diff и может использоваться для естественного воспроизведения производных в документах. Первая из этих функций (в вычисляемой и в инертной форме) вычисляет частные производные для выражения f по переменным x1, х2, ..., хn. В простейшем случае diff(f(x),x) вычисляет первую производную функции f(x) по переменной х. При n, большем 1, вычисления производных выполняются рекурсивно, например diff (f (х,y), х, у) эквивалентно diff(diff (f(x,y), х), у). Оператор $ можно использовать для вычисления производных высокого порядка. Для этого после имени соответствующей переменной ставится этот оператор и указывается порядок производной. Например, выражение diff (f(x),x$4) вычисляет производную 4-го порядка и эквивалентно записи diff (f (х) ,х,х,х,х). A diff (g(x,y) ,x$2,y$3) эквивалентно diff(g(x,y),x,x,y,y,y) ;
26
4.1. Вычисление производных и пределов
Для создания функций с производными может также использоваться дифференциальный оператор D. Иногда он позволяет создавать более компактные выражения, чем функции diff и Diff. Дифференциальный оператор можно записывать в следующих формах: D(f) или D[i](f), где параметр f – выражение или имя функции, i – положительное целое число, выражение или последовательность. Оператор D(f) просто вычисляет имя производной от f, поскольку в этой форме он эквивалентен unapplay(diff(f(х),х),х). В форме D(f) (х) этот оператор подобен diff(f(x),x) (рис. 4.1).
Рис. 4.1. Операторы дифференцирования
Для вычисления пределов функции f в точке х =а используются следующие функции:
limit(f,x=a); limit(f,x=a,dir); Limit(f,x=a); Limit(f,x=a,dir);
27
4. Средства математического анализа
Здесь f – алгебраическое выражение, х – имя переменной, dir – параметр, указывающий на направление поиска предела (left – слева, right – справа, real – в области вещественных значений, complex – в области комплексных значений). Значением а может быть бесконечность, как положительная, так и отрицательная
(рис. 4.2).
Рис. 4.2. Вычисление пределов функций
4.2. Вычисление интегралов
Для вычисления неопределенных и определенных интегралов Maple предоставляет следующие функции:
int(f,x); int(f,x=a..b); int(f,x=a..b,continuous): Int(f,x); Int(f,x=a..b): Int(f,x=a..b,continuous):
Здесь f – подынтегральная функция, х – переменная, по которой выполняются вычисления, а и b – нижний и верхний пределы интегрирования, continuous – необязательное дополнительное условие.
Maple старается найти аналитическое значение интеграла с заданной подынтегральной функцией, Если это не удается (например, для «не берущихся» интегралов), то возвращается исходная
28
4.2. Вычисление интегралов
запись интеграла. Для вычисления определенного интеграла надо использовать функцию
evalf(int(f ,х=а. .b)).
Иллюстрация примеров вычисленя интегралов приведена на рис. 4.3. С помощью функций taylor и convert можно попытаться получить аналитическое решение в виде полинома умеренной степени.
Рис. 4.3. Интегрирование функций
Для вычисления определенных интегралов используются те же функции int и Int, в которых надо указать пределы интегрирования, например х=а..b, если интегрируется функция переменной х.
Maple позволяет вычислять определенные интегралы с переменными пределами интегрирования. Если обычный определенный интеграл представлен числом (или площадью в геометрической
29
4. Средства математического анализа
интерпретации), то интегралы с переменными пределами являются функциями этих пределов.
В примере, представленном на рисунке 4.4, функция z(x) равна интегралу с переменными верхним и нижним пределами. С помощью функции plot построен график функций x и z. Обратите внимание на способ построения нескольких кривых на одном графике, для этого функции x и z указаны в виде списка, т. е. в квадратных скобках.
Рис. 4.4. Интегрирование с переменными пределами
В случае вычисления кратных интегралов в качестве подынтегральной функции указывается соответствующий интеграл
(рис. 4.5).
30
