БлогNot. MathCAD: решаем основные типы дифференциальных уравнений встроенными функциями

MathCAD: решаем основные типы дифференциальных уравнений встроенными функциями

Решать дифференциальные уравнения (далее ДУ) в MathCAD, составляя собственные подпрограммы-функции не всегда удобно и экономично по времени, хотя и полезно на этапе обучения. Опишем в этой заметке способы решения основных типов ДУ с помощью стандартных средств пакета, ограничимся простыми примерами.

1. ДУ с разделяющимися переменными. Общая постановка задачи: y'=f(x,y)=g(x)*h(y), y(x0)=y0. То есть, f(x,y) допускает представление в виде произведения функций от x и от y.

Для решения уравнения достаточно задать его правую часть как пользовательскую функцию MathCAD, определить интервал поиска решения [x0,x1], начальное условие y0 и применить стандартную функцию Odesolve. Покажем этот процесс на примере уравнения y'=2x-y+x2, x∈[0,2], y(0)=0 с известным решением y(x)=x2:

Решение дифференциальных уравнений с разделяющимися переменными
Решение дифференциальных уравнений с разделяющимися переменными

Знак "равно" в записи уравнений, конечно же, жирный (панель Boolean или сочетание клавиш Ctrl+=).

Функция Odesolve вернула именно функцию y, её нужно смотреть от аргумента, например, y(1)=.

И ещё 2 особенности:

Фича MathCAD - у ряда функций решения ДУ есть "версии", которые пишутся и с Большой, и с маленькой буквы. Функции, имена которых начинаются с маленькой буквы, используются в тех случаях, когда важным является решение задачи в конечной точке интервала.
Фича MathCAD - в блоке Given-Odesolve штрих ` является не просто знаком, а оператором взятия производной. И это не штрих ' с клавиши русской "Э"... это обратный штрих ` с клавиши "Ё", слева от "1".

Зная точное решение, графически сравним с ним найденное решение. Как видно на графике, MathCAD справился с задачей отлично.

Графики полученного и точного решения совпадают
Графики полученного и точного решения совпадают

2. Неоднородное ДУ первого порядка. В общем виде такое уравнение можно записать как y'=a(x)*y+b(x). Оно решается аналитически по формуле, которую можно найти в любой книге по решению обыкновенных ДУ:

Формула для решения неоднородного ДУ первого порядка
Формула для решения неоднородного ДУ первого порядка

Здесь С – константа интегрирования. Остаётся применить формулу к конкретному уравнению (возьмём для примера задачу y'+2xy=x*e-x2sin(x), y(0)=1) и оценить её символьно:

Аналитическое решение неоднородного ДУ первого порядка в MathCAD
Аналитическое решение неоднородного ДУ первого порядка в MathCAD

Здесь мы получаем решение в общем виде. Нижний оператор оценён символьно (см. панель "Символика"), а аргумент t используется, так как x в документе "уже занят" (для корректной работы символьной оценки переменные не должны быть определены заранее).

После подстановки начального условия получим частное решение y(t,Y0), а для проверки решения будет достаточно подставить полученную функцию в исходное уравнение и упростить его символьной функцией simplify. Полученный результат в нашем случае совпал с заданной в условии правой частью. Также для y(x,Y0), как и для любой функции, можно построить график на нужном интервале изменения x.

Проверка решения неоднородного ДУ первого порядка и построение графика
Проверка решения неоднородного ДУ первого порядка и построение графика

3. Неоднородное ДУ второго порядка. В общем виде имеем уравнение y'' + p(x)*y' + g(x)*y = f(x) плюс набор краевых условий, количество которых соответствует порядку задачи, например y(0)=..., y'(0)=... или y(0)=..., y(1)=...

Возьмём уравнение, которое мы мучили вот здесь, решим его стандартными средствами, сравним с известным точным решением и построим график:

Решение неоднородного ДУ второго порядка в MathCAD
Решение неоднородного ДУ второго порядка в MathCAD

Здесь при вызове Odesolve второй параметр, равный единице - это правая граница интервала, третий параметр, равный 10, задаёт количество интервалов. Точное решение u(t) взяли по ссылке. Как видим, даже на 10 интервалах всё очень хорошо совпадает.

4. Система ДУ. Подход к решению системы ДУ покажем на примере. Пусть задана система дифференциальных уравнений

x' = a*x - y - (x2 + y2)*x,
y' = a*y + x - (x2 + y2)*y,
x(0)=0, y(0)=1, a=-0.2

Чтобы решить эту систему стандартной функцией rkfixed, нужно задать для неё вектор начальных значений x = (x0, y0) и вектор правых частей D(t,x).

После этого задача решится вызовом rkfixed, второй и третий параметры (0, 20) задают интервал по времени t, на котором ищется решение, четвёртый параметр 100 означает количество точек на интервале.

Функция вернёт матрицу решений системы, в которой количество строк соответствует количеству точек на интервале, а количество столбцов - количеству уравнений в системе.

Для построения графика достаточно отобразить зависимость столбцов Zi,1, Zi,2 от Zi,0, i=0..99:

Решение системы ДУ в MathCAD функцией rkfixed
Решение системы ДУ в MathCAD функцией rkfixed

 Скачать расчёты из этой статьи в архиве .zip с документом .xmcd, Mathcad 15 (46 Кб)

10.11.2015, 17:16 [51169 просмотров]


теги: математика mathcad

показать комментарии (2)