Уравнения. Системы уравнений
8.3. Нахождение символьных решений дифференциальных уравнений
Для символьного решения дифференциальных уравнений в Mathematica имеется функция DSolve. С её помощью решаются следующие типы уравнений:
- обыкновенные дифференциальные уравнения (ОДЕ) и системы уравнений. ОДУ содержат одну независимую переменную и одну или больше зависимых переменных;
- дифференциальные уравнения в частных производных (ДУЧП) и системы уравнений. ДУЧП содержат две или более независимые переменные и одну или больше зависимых переменных;
- системы дифференциально-алгебраические уравнения (ДАУ). Часть уравнений системы является дифференциальными, другая часть — алгебраическими.
Формат обращение к функции DSolve для решения дифференциального уравнения следующий: DSolve[eqn,f[t],t], где eqn — дифференциальное уравнение относительно функции f[t]. Таким образом, функция DSolve имеет три обязательных аргумента. В примере In[1] на рис. 8.12 мы нашли аналитическое решение простейшего обыкновенного дифференциального уравнения первого порядка. В Out[1] мы видим, что результатом выполнения функции является список правил замены. Получить вместо списка правил список корней выражение можно тем же способом, что и в случае алгебраических уравнений — при помощи оператора " /. " (пример In[2]).
Общее решение дифференциального уравнения содержит параметры C[i] (в нашем примере это только постоянная C[1]), которые определяются начальными и граничными условиями. Для получения частного решения уравнения эти условия следует задать. Для этого первым аргументом функции DSolve указывается одномерный список, в котором, помимо самого уравнения, содержатся уравнения, задающие дополнительные условия — см. пример In[3] на рис. 8.12, в котором мы решаем то же уравнение, что и в In[1], но задаём значение функции y[x] при начальном значении переменной x.
Дополнительных условий не должно быть чрезмерное количество: в этом случае Mathematica не сумеет найти удовлетворительное решение и выдаст предупреждающее сообщение — пример In[4] на рис. 8.12.
В Out[3] мы получили выражение для y[x], являющееся решением нашего ОДУ, которое теперь можем подставить в любое выражение, содержащее y[x]. Однако это решение не определяет правил замены для производных y'[x], y''[x] и т.д. [5, с. 35], в чём мы убеждаемся в примере In[5] на рис. 8.12, пытаясь осуществить замену для ряда выражений.
Чтобы производные также могли быть заменены в соответствии с полученным выражением, необходимо во втором аргументе функции DSolve указать только заголовки искомых функций, не записывая их аргументы (пример In[6] на рис. 8.12). Тогда решение будет представлено в виде так называемой чистой функции — выражения с заголовком Function (с чистыми функциями мы подробней познакомимся в следующей лекции) — ср. Out[3] и Out[6]. И такое выражение уже можно подставить в любое другое выражение, содержащее как саму функцию, так и её производные: замена будет произведена корректно — ср. Out[5] и Out[7].
Функция DSolve позволяет также решать системы дифференциальных уравнений: при этом в качестве первого аргумента указывается список уравнений системы, а второго — список искомых функций. Третьим аргументом по-прежнему остаётся независимая переменная. Пример нахождения общих решений систем дифференциальных уравнений — In[1] на рис. 8.13. Для нахождения частного решения системы следует указать начальные или граничные условия, число которых зависит от числа функций независимой переменной и порядка уравнений — пример In[2].
Следует отметить, что функция DSolve умеет также решать алгебраические уравнения — см. пример In[3] на рис. 8.13, в котором мы в общем виде решили квадратное уравнение относительно переменной y[v].
Математические зависимости, полученные в результате действия функции DSolve, могут быть визуализированы графическими средствами Mathematica. Для визуализации математических функций независимой переменной чаще всего используется функция Plot (пример In[2] на рис. 8.14), а для изображения фазовых портретов — ParametricPlot (примеры In[3] и In[4]).
В рассмотренных выше примерах мы познакомились с решением ОДУ при помощи функции DSolve. Однако как было сказано в начале лекции, с её помощью можно решать и другие виды ДУ, например, ДУ в частных производных. Единственное отличие при задании функции DSolve в этом случае заключается в форме задания последнего обязательного аргумента: он задаётся в виде списка, элементами которого являются все независимые переменные уравнения или системы уравнений. В примере In[1] на рис. 8.15 мы решаем уравнение Кортевега-де Вриза в общем случае; в примере In[2] мы визуализируем частное решение уравнения средствами трёхмерной графики.
А.Н. Прокопеня и А. В. Чичурин [5, с. 36] отмечают, что при помощи функции DSolve Mathematica умеет решать дифференциальные уравнения (в том числе высших порядков), если их решения могут быть выражены через специальные функции. В примере In[1] на рис. 8.15 мы решили дифференциальное уравнение, получив в результат, содержащий функции Эйри.
Если функция DSolve не может найти аналитического решения, Mathematica просто перепечатывает в ячейку Out данные, введённые в области In — пример In[2] на рис. 8.16. В этом случае следует обратиться к следующему разделу настоящей лекции, посвящённому численному решению дифференциальных уравнений.
Подробней о функции DSolve см. книги Е. М. Воробьёва [1, с. 58–61] и А. Н. Прокопени и А. В. Чичурина [5, с. 34–36].