Численное решение дифференциальных уравнений
Большинство нелинейных дифференциальных уравнений не имеет аналитического решения. Кроме того, часто аналитическое решение и не нужно, но требуется получить ответ в виде графических зависимостей.
В таких случаях для решения дифференциальных уравнений в численном виде используется функция dsolve с параметром numeric или type=numeric. При этом решение возвращается в виде специальной процедуры, по умолчанию реализующей широко известный метод решения дифференциальных уравнений Рунге—Кутта—Фелберга порядков 4 и 5 (в зависимости от условий адаптации решения к скорости его изменения). Эта процедура называется rkf45 и символически выводится (без тела) при попытке решения заданной системы дифференциальных уравнений. Последнее достаточно наглядно иллюстрирует рис. 13.2.
Рис. 13.2. Решение системы дифференциальных уравнений численным методом rkf45 с выводом графика решения
Указанная процедура возвращает особый тип данных, позволяющих найти решение в любой точке или построить график решения (или решений). Для графического отображения Maple 7 предлагает ряд возможностей, и одна из них представлена на рис. 13.2 — см. последнюю строку ввода. При этом используется функция plot[odeplot] из пакета odeplot, предназначенного для визуализации решений дифференциальных уравнений.
В список параметров функции dsolve можно явным образом включить указание на метод решения, например опция mathod=dverk78 задает решение непрерывным методом Рунге—Кутта порядка 7 или 8. Вообще говоря, численное решение дифференциальных уравнений можно производить одним из следующих методов:
Обилие используемых методов расширяет возможности решения дифференциальных уравнений в численном виде. Большинство пользователей Maple 7 вполне устроит автоматический выбор метода решения по умолчанию. Однако в сложных случаях возможна прямая установка одного из указанных выше методов. С деталями реализации методов можно ознакомиться по справочной системе.
С помощью параметра ' abserr' =аеrr можно задать величину абсолютной погрешности решения, а с помощью 'minerr'=mine — минимальную величину погрешности. В большинстве случаев эти величины, заданные по умолчанию, оказываются приемлемыми для расчетов.
Maple 7 реализует адаптируемые к ходу решения методы, при которых шаг решения h автоматически меняется, подстраиваясь под условия решения. Так, если прогнозируемая погрешность решения становится больше заданной, шаг решения автоматически уменьшается. Более того, система Maple способна автоматически выбирать наиболее подходящий для решаемой задачи метод решения.
Еще один пример решения системы дифференциальных уравнений представлен на рис. 13.3. Здесь на одном графике представлены зависимости у(х) и z(х), представляющие полное решение заданной системы. При этом процедура имеет особый вид listprocedure и для преобразования списка выходных данных в векторы решения Y и Z используется функция subs.
Для решения достаточно сложных задач полезны специальная структура DESol для решения дифференциальных уравнений и инструментальный пакет DEtools, содержащий самые изысканные средства для графической визуализации результатов решения дифференциальных уравнений. Эти средства мы более подробно рассмотрим в дальнейшем.
Рис. 13.3. Решение системы дифференциальных уравнений численным методом с выводом всех графиков искомых зависимостей
ВНИМАНИЕ
При решении некоторых задач физики и радиоэлектроники выбираемый поумолчанию шаг изменения аргументах или t - Л может привести к неустойчивости решения. Неустойчивости можно избежать рядом способов. Можно, например, нормировать уравнения, избегая необходимости использования малого шага. А можно задать заведомо малый шаг. Например, при method=classical для этого служит параметр stepsize-h. Примеры такого подхода будут даны в уроке 17 (см. Решение физических задач и моделирование цепи на туннельном диоде).