Математический анализ
Численное решение обыкновенных дифференциальных уравнений высших порядков
ОДУ высших порядков
Обыкновенные дифференциальные уравнения порядка выше первого называются ОДУ высших порядков.
ОДУ второго порядка в общем случае записывается в виде:
или, если это возможно, в виде, разрешенном относительно старшей производной:
Общим решением ОДУ второго порядка называется функция . где и – произвольные постоянные.
Частным решением ОДУ второго порядка называется всякая функция , получающаяся из общего решения при конкретных значениях постоянных , .
Задачей Коши для ОДУ второго порядка называется задача нахождения частного решения ОДУ, удовлетворяющего заданным начальным условиям:
Аналогичные определения имеют место и для ОДУ -го порядка, которое в общем виде записывается как
или
если его можно разрешить относительно старшей производной.
Общим решением ОДУ -го порядка называется функция вида содержащая произвольных постоянных.
Частным решением ОДУ -го порядка называется всякая функция , получающаяся из общего решения при конкретных значениях постоянных , , ..., .
Задачей Коши для ОДУ -го порядка называется задача нахождения частного решения ОДУ, удовлетворяющего заданным начальным условиям:
Численные методы решения ОДУ высших порядков
Задача Коши для ОДУ -го порядка может быть сведена к решению системы из ОДУ первого порядка. Для этого все производные от неизвестной функции до -го порядка включительно, входящие в уравнение, обозначим за новые функции:
Введенные функции удовлетворяют следующей системе ОДУ первого порядка:
При этом начальные условия принимают вид:
Для решения такой системы ОДУ первого порядка можно использовать рассмотренные в предыдущих разделах численные методы (Эйлера, Эйлера–Коши, Рунге–Кутта).
Непосредственная реализация методов численного решения ОДУ высших порядков в Engee
Пример. Численно решим в Engee ОДУ второго порядка с начальными условиями , на отрезке .
Для этого введем новую неизвестную функцию . Отсюда следует, что . Тогда уравнение примет вид: . Вместо исходного ОДУ второго порядка будем решать систему из двух ОДУ первого порядка:
с начальными условиями , .
Реализуем алгоритм метода Эйлера для этой системы ОДУ так, как мы это делали в предыдущем разделе "Численное решение систем обыкновенных дифференциальных уравнений".
using Plots;
a = 0;
b = 2;
n = 1000;
h = (b - a) / n;
t = zeros(n+1);
func1 = zeros(n+1);
func2 = zeros(n+1);
y = zeros(n+1);
z = zeros(n+1);
t[1] = a;
y[1] = 5;
z[1] = 3;
for i in 1:n
t[i+1] = t[i] + h;
func1[i] = z[i];
y[i+1] = y[i] + h * func1[i];
func2[i] = 5*z[i] - 6*y[i];
z[i+1] = z[i] + h * func2[i];
end
Точное (аналитическое) решение этого уравнения имеет вид: . Построим графики приближенного и точного решений.
y_acc = 12*exp.(2*t) - 7*exp.(3*t);
plot(t, y, label="y(t)")
plot!(t, y_acc, label="y(t)")
✏️Задание 1
Решите в Engee методом Эйлера ОДУ второго порядка при начальных условиях , на отрезке , разбивая отрезок на частей. Постройте график решения.
Подсказка
Введите новую неизвестную функцию . Тогда уравнение преобразуется к виду . В результате получится система из двух ОДУ первого порядка:
с начальными условиями , .
Решение
using Plots;
a = 0;
b = 1;
n = 1000;
h = (b - a) / n;
t = zeros(n+1);
func1 = zeros(n+1);
func2 = zeros(n+1);
y = zeros(n+1);
z = zeros(n+1);
t[1] = a;
y[1] = 1;
z[1] = 4;
for i in 1:n
t[i+1] = t[i] + h;
func1[i] = z[i];
y[i+1] = y[i] + h * func1[i];
func2[i] = 6*z[i] - 25*y[i];
z[i+1] = z[i] + h * func2[i];
end
plot(t, y, label="y(t)")
Численное решение ОДУ высших порядков с помощью встроенных функций Engee
Пример. Решим ОДУ второго порядка из предыдущего примера с начальными условиями , на отрезке с помощью встроенных функций Engee.
Точно так же приведем это ОДУ к системе ОДУ первого порядка:
с начальными условиями , .
Воспользуемся функциями ODEProblem и solve так же, как мы это делали в предыдущем разделе "Численное решение систем обыкновенных дифференциальных уравнений".
using Plots, DifferentialEquations;
function f(du, u, p, t)
du[1] = u[2]
du[2] = 5*u[2] - 6*u[1]
end
u0 = [5.0, 3.0];
tspan = (0.0, 2.0);
prob = ODEProblem(f, u0, tspan);
sol = solve(prob)
plot(sol)
Функция u1(t) – это и есть решение уравнения. Функция u2(t) – первая производная от решения.
✏️Задание 2
Решите ОДУ второго порядка из Задания 1 при начальных условиях , на отрезке с помощью встроенных функций Engee. Постройте график решения.
Подсказка
ОДУ второго порядка преобразуется в систему ОДУ первого порядка
с начальными условиями , .
Решение
using Plots, DifferentialEquations;
function f(du, u, p, t)
du[1] = u[2]
du[2] = 6*u[2] - 25*u[1]
end
u0 = [1.0, 4.0];
tspan = (0.0, 1.0);
prob = ODEProblem(f, u0, tspan);
sol = solve(prob)
plot(sol)
Функция u1(t) – это и есть решение уравнения. Функция u2(t) – первая производная от решения.