Математический анализ в Maple 9



Решение обыкновенных дифференциальных уравнений

Сразу следует отметить, что с обыкновенными дифференциальными уравнениями и системами этих уравнений Maple справляется достаточно неплохо. Если уравнение в принципе решается, то Maple, скорее всего, его решит. Полезной в этом случае будет процедура dsolve(), параметрами которой указываются уравнение (система уравнений), начальные условия (если такие имеются), а также функция (или набор функций для системы уравнений), относительно которой это уравнение (систему) следует решать. Рассмотрим пример.

Задача 5.1

Составить дифференциальное уравнение, описывающее падение парашютиста, если сила сопротивления воздуха пропорциональна квадрату его скорости.

В первую очередь определяем уравнение, присвоив его в качестве значения переменной Eq (запись D@@2 означает, что оператор D действует дважды).



На заметку
Уравнение есть прямым следствием второго закона Ньютона. Если координатную ось выбрать так, чтобы она была направлена вниз, т.е. в направлении к поверхности Земли, а начало отсчета совместить сточкой начала движения парашютиста, то зависимость координаты парашютиста от времени будет тем самым определять расстояние, которое парашютист пролетел. Ускорение равно, как известно, второй производной от координаты по времени. Кроме того, на парашютиста действуют две силы: сила тяжести, равная произведению массы парашютиста на ускорение свободного падения (д) — она направлена вниз, ее направление совпадает с направлением координатной оси и поэтому проекция данной силы на координатную ось положительна, и сила сопротивления воздуха — направлена вверх и поэтому ее проекция отрицательна. После сокращения формулы на массу парашютиста из второго | закона Ньютона получаем нужное уравнение (а — коэффициент пропорциональности в выражении для силы сопротивления воздуха, нормированный на массу парашютиста).


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

После этого уравнение можно решать.

Первым аргументом процедуры dsolve() указано множество, состоящее , из уравнения и начальных условий. Уравнение решается относительно функции x(t).

На заметку
Задачу поиска решения уравнения (системы уравнений), удовлетворяющего данным начальным условиям, называют задачей Коши.


Полученное решение, тем не менее, является достаточно громоздким. Его можно несколько упростить.

Чтобы задать функциональную зависимость x(t) согласно полученному выше равенству и не набирать его при этом непосредственно с клавиатуры, Воспользуемся процедурой unapply(). Эта процедура позволяет выделить функциональную зависимость, так что не придется прибегать даже к копированию выражения в буфер обмена.

Первым параметром процедуры unapply() указывается выражение, из которого "извлекается" функциональная зависимость, а вторым параметром — переменная, по отношению к которой определяется данная функциональная зависимость. Другими словами, результатом выполнения процедуры unapply() есть оператор, действие которого на указанную вторым параметром переменную продуцирует выражение, указанное первым параметром.

Оператор v определяем как результат действия оператора дифференцирования D на функциональный оператор х (в результате зависимость v(t) будет определять скорость парашютиста в момент времени t).

Скорость парашютиста в таком случае дается следующей закономерностью.

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

Далее исследуем динамику парашютиста по прошествии существенных промежутков времени. Вычислительному ядру Maple сообщим, что параметры д и а положительны.

После этого вычисляем предел, к которому стремится скорость при стремлении времени к бесконечности.

Таким образом, в пределе бесконечно больших времен скорость парашютиста выходит на стационарное значение — движение будет равномерным.

Еще один интересный пример — математический маятник с трением. Об этом в следующей задаче.

Задача 5.2

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

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

Данное уравнение можно решить в общем виде; в этом случае начальные , условия не указываются.

Переменные среды _С1 и _С2 являются, с математической точки зрения, Произвольными константами, которые в общем случае определяются из дополнительных условий — как правило, начальных.

Далее с помощью уже известной процедуры unapply() определяем соответствующую функциональную зависимость.

Если предположить, что в начальный момент отклонение маятника от положения равновесия равнялось А, а начальная скорость была равна нулю, то константы С1 и С2 можно определить как решение системы уравнений (обычных, не дифференциальных!).

Чтобы переменным _С1 и _С2 присвоить соответствующие значения (при решении такие значения находятся, но не присваиваются), можно воспользоваться процедурой assign(). Если в качестве аргумента этой процедуры указано равенство, то, согласно этому равенству, вычислительным ядром Maple будет выполнено присваивание (формально можно полагать, что знак равенства заменяется оператором присваивания). Ниже в качестве аргумента указана переменная среды — ссылка на результат выполнения последней команды. Это множество, элементами которого являются два равенства, определяющие переменные _С1 и _С2. В результате выполнения приведенной ниже команды переменные получат значения.

Наличие в выражении экспонент смущать не должно: если параметр a меньше частоты в (это соответствует затухающим колебаниям), то показатели в экспонентах становятся комплексными и решения выражаются, на самом деле, через синус и косинус, правда с экспоненциальными множителями.

Чтобы представить, какова динамика системы во времени, присвоим конкретные значения константам. Если положить значение А равным 1, то для данных начальных условий х можно будет интерпретировать как значение координаты, нормированной на амплитуду колебаний.

Положив ю равной 1, переходим фактически к безразмерному времени (от t к mi). При этом параметр а можно интерпретировать как нормированный на частоту. Однако сделанные замечания носят скорее вспомогательный характер и сути проблемы не затрагивают.

Далее строим график (если точнее, то поверхность) зависимости координаты маятника от времени и параметра а, определяющего трение в системе.

Несложно заметить, что с увеличением силы трения амплитуда колебаний затухает быстрее — что и не удивительно!

Приведенные выше примеры достаточно просты. Но Maple справляется и с более сложными задачами. Некоторые из них приведены ниже.

Задача 5.3

Найти решение задачи Коши.

В данном случае укажем уравнение, равно как и начальное условие, непосредственно аргументом процедуры dsolve().

Как можно видеть выше, получаем решение.

Иногда, если Maple не может найти решение в классе элементарных функций, последнее представляется в виде интегралов. Ниже такая ситуация проиллюстрирована на примере задачи нахождения общего решения уравнения.

Задача 5.4

Найти общее решение уравнения y(x)+exp(-x)y=sin(x).

Решение представлено в виде интеграла, который вычислить аналитически не удается, однако при необходимости могут быть получены приближенные оценки.

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

Задача 5.5

Найти решение задачи Коши

Задаем непосредственно уравнение.

В результате получено два решения, и оба корректные. По сравнению с предыдущими примерами, процедура принципиально не изменилась, однако обозначения намного понятнее. Тем не менее увлекаться подобным "радикализмом" все же не стоит, поскольку Maple не русифицирован и неприятности в связи с этим могут возникнуть в самых неожиданных местах.

Практически так же можно решать и системы дифференциальных уравнений. В этом случае все дифференциальные уравнения с начальными условиями, организованные в виде множества, указываются первым параметром процедуры dsolve(), а второе множество содержит в качестве своих элементов функции, относительно которых решается система.

В результате получено два решения, и оба корректные. По сравнению с предыдущими примерами, процедура принципиально не изменилась, однако обозначения намного понятнее. Тем не менее увлекаться подобным "радикализмом" все же не стоит, поскольку Maple не русифицирован и неприятности в связи с этим могут возникнуть в самых неожиданных местах.

Практически так же можно решать и системы дифференциальных уравнений. В этом случае все дифференциальные уравнения с начальными условиями, организованные в виде множества, указываются первым параметром процедуры dsolve(), а второе множество содержит в качестве своих элементов функции, относительно которых решается система.

Задача 5.6

Найти общее решение системы уравнений

Однако не всегда удается получить точное решение. Иногда приходится довольствоваться и приближенным. Именно об этом далее пойдет речь.