Ознакомительная версия.
Рис. 9.25. Иллюстрация итераций при решении нелинейного уравнения методом Ньютона
А теперь рассмотрим вычисление длины дуги, заданной произвольным выражением, например 2-х^3 в интервале изменения х от 0 до 2. Для этого исполним команду (вызов подпакета опущен, поскольку был выполнен ранее):
> ArcLengthTutor(2-х^3, х=0..2);
Интерактивное окно для этого примера представлено на рис. 9.26. График дает представление исходной функции и функции, описывающей изменение значения длины дуги в заданном интервале изменения х. Кроме того выводится выражение для длины дуги, вычисленное значение длины дуги на заданном интервале и вид команды для вычисления длины дуги в командном режиме (внизу окна).
Рис. 9.26. Иллюстрация к вычислению длины дуги
9.6.6. Подпакет вычислений Precalculus
Пакет вычислений Precalculus служит для визуализации таких операций, как вычисление полиномов, нахождение пределов функций, решение систем неравенств, представление функций и др. Он содержит только интерактивные средства, построенные по аналогии с приведенными ранее средствами. Поэтому и здесь мы ограничимся парой примеров.
Например, для получения графика и корней полинома х^3 + 3*х^2 - 2 достаточно исполнить команды:
> with(Student[Precalculus]):
> PolynomialTutor(х^3+3*х^2-2);
В появившемся интерактивном окне можно наблюдать график полинома и список его действительных корней — рис. 9.27.
Рис. 9.27. Окно с графиком полинома и его вычисленными корнями
Следующий пример иллюстрирует вызов обучающего окна по стандартным функциям:
> StandardFunctionsTutor();
При таком задании в окне задается функция синуса, но ее можно изменить на другую функцию или выражение со стандартными функциями — например, sin(x)/x (рис. 9.28). Кроме графика исходной функции (он дан красным цветом) строится график преобразованной функции. Используется линейное преобразование с набором заданных параметров а, b, с и d.
Рис. 9.28. Окно с графиком основной и преобразованной функциями
9.6.7. Другие возможности и особенности пакета Student Package
Из других возможностей пакета Student можно отметить расширение возможностей графики с помощью десятков модифицированных или новых опций графики и графических функций. Познакомиться с набором опций можно по справке для данного пакета.
К сожалению, ввиду новизны пакета он содержит явные недоработки. Например, на рис. 9.25 непонятно, что выводит третья кривая на рисунке — объяснения по этому поводу нет в справке по примененной функции. При больших x места на графике для представления чисел, отложенных по осям, явно не хватает и цифры отображаются с большими искажениями. Впрочем, стоит отметить, что по пакету представлены исходные коды на Maple-языке, так что чересчур требовательный пользователь может довести пакет «до ума». Несомненно, что корпорация Maple-Soft планирует существенное расширение средств Maplets в программных утилитах, включенных в пакеты расширений систем Maple.
Глава 10
Типовые средства программирования
По существу все описанные выше средства (операторы, команды и функции) систем Maple 9.5/10 являются компонентами языка программирования системы Maple. Но есть ряд типовых средств программирования (функции пользователя, условные выражения, циклы, средства вывода, маплеты и др.), которые и рассматриваются в данной главе [23, 51, 52]. Применение таких средств существенно расширяет возможности систем Maple в решении ряда математических и научно-технических задач.
10.1.1. Задание функции пользователя
Хотя ядро Maple 9 5/10, библиотека и встроенные пакеты расширения содержат свыше 3500 команд и функций, всегда может оказаться, что именно нужной пользователю (и порою довольно простой) функции все же нет. Тогда возникает необходимость в создании собственной функции, именуемой функцией пользователя. Для этого используется следующая конструкция:
name(x,y,...)->expr
После этого вызов функции осуществляется в виде name(х,у,…), где (x,y,…) — список формальных параметров функции пользователя с именем name. Переменные, указанные в списке формальных параметров, являются локальными. При подстановке на их место фактических параметров они сохраняют их значения только в теле функции (expr). За пределами этой функции переменные с этими именами оказываются либо неопределенными, либо имеют ранее присвоенные им значения.
Следующие примеры иллюстрирует сказанное (файл p1):
> restart;
> х:=0;y:=0;
х := 0 у := 0
> m:=(x,y)->sqrt(х^2+y^2);
> m(3,4);
5
> m(3., 4);
5.000000000
> [x,y];
[0, 0]
Нетрудно заметить, что при вычислении функции m(х,у) переменные х и у имели значения 3 и 4, однако за пределами функции они сохраняют нулевые значения, заданные им перед введением определения функции пользователя. Использование хотя бы одного параметра функции в виде числа с плавающей точкой ведет к тому, что функция возвращает результат также в виде числа с плавающей точкой.
10.1.2. Конструктор функций unapply
Еще один способ задания функции пользователя базируется на применении функции-конструктора unapply:
name:=unapply(expr, var1, var2, ...)
Ниже даны примеры такого задания функции пользователя (файл p1):
> restart;
> fm:=unapply(sqrt(х^2+y^2),х,y);
> fm(4.,3.);
5.000000000
> fe:=unapply(х^2+y^2,х,y);
fе:=(х,у)→х²+у²
> fe(sin(х),cos(х));
sin(x)² + cos(x)²
> simplify(fe(sin(x),cos(x)));
1
Последний пример показывает возможность проведения символьных операций с функцией пользователя.
10.1.3. Визуализация функции пользователя
В ряде случаев весьма желательна визуализация результатов выполнения функций пользователя. Порой она может давать неожиданный результат. На рис. 10.1 представлены примеры задания двух функций пользователя от двух переменных и построение их графиков с помощью функции plot3d.
При задании функций пользователя рекомендуется просмотреть их графики в нужном диапазоне изменения аргументов. К сожалению, наглядными являются только графики функций одной и двух переменных.
Рис. 10.1. Примеры задания функций пользователя двух переменных с построением их графиков
10.1.4. Импликативные функции
Другой важный класс функций, которые нередко приходится задавать — импликативные функции, в которых связь между переменными задана неявно в виде какого-либо выражения. Самый характерный пример такой функции — это выражение для задания окружности радиусаr: х²+у²=r².
Итак, импликативные функции записываются как уравнения. Соответственно их можно решать с помощью функции solve. Следующие примеры иллюстрируют задание уравнения окружности в общем и в частном (численном) виде (файл p1):
> impf:=х^2+y^2=r^2;
impf := x² + у² = r²
> subs(х=а,impf);
а² + у² = r²
> solve(%);
> impf1:=х^2+у^2=25;
impf1 := х² + у² =25
> subs(х=4,impf1);
16 + y² =25
> solve(%);
3, -3
Для графической визуализации импликативных функций служит функция implicitplot пакета plots. На рис. 10.2 представлено задание двух импликативных функций и построение их графиков.
Рис. 10.2. Задание двух импликативных функций и построение их графиков
В данном случае задано построение двух эллипсов. Верхний — это окружность, сплюснутая по вертикали, а второй — наклонный эллипс.
10.2. Управляющие структуры
10.2.1. Условные выражения
Программы, все инструкции которых выполняются строго последовательно называются линейными программами. Большинство же программ относятся к разветвляющимся программам, у которых возможны переходы от одной ветви с командами к другой в зависимости от получаемых при вычислениях результатов и условий работы. Для создания таких программ используются управляющие структуры.
Простейшую конструкцию разветвляющихся программ в Maple-языке программирования задает оператор if или оператор условного выражения:
if <Условие сравнения> then <Элементы>
|elif <Условие сравнения> then <Элементы>|
Ознакомительная версия.