Сообщество Engee

Дифференциальные уравнения

Автор
avatar-artpgchartpgch
Notebook

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

Используем библиотеки, которые будут необходимы для нашей задачи:

In [ ]:
using SymPy, DifferentialEquations

Аналитическое решение

Создадим символьную переменную x и символьную функцию y(x):

In [ ]:
x = Sym("x");
y = SymFunction("y");

Определим дифференциальное уравнение: y'(x) = y(x) - x²

In [ ]:
уравнение = diff(y(x), x) ~ y(x) - x^2

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

In [ ]:
решение = dsolve(уравнение, y(x), ics = Dict(y(0) => 0))
функция = lambdify(rhs(решение), (x))
a = -2;
б = 2;
шаг = 0.01;
ф = функция.(a:шаг)
println("Аналитическое решение: ")
display(решение)

Численное решение

Определим функцию:

In [ ]:
f(u, p, x) = u - x^2

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

Разделим задачу на два интервала и выполним решение в направлении возрастания от начальной точки, затем снова объединим решения:

In [ ]:
решение_справа = solve(ODEProblem(f, 0, (0, 2)), saveat=0.01);
решение_слева = solve(ODEProblem(f, 0, (0, -2)), saveat=0.01);
х = [решение_слева.t[end:-1:2]; решение_справа.t];
у = [решение_слева.u[end:-1:2]; решение_справа.u];
Графическое отображение решений

Построим графики аналитического и численного решения:

In [ ]:
plot(a:шаг, ф, linewidth = 4.1, label = "Аналитическое", legend=:topright)
plot!(х, у, ls=:dash, lw=3.5, label = "Численное", legend=:topright)
xlabel!("x")
ylabel!("y")
Out[0]:

Выводы

Следует отметить, что если начальные условия находится внутри интервала, то для численного решения необходимо разделять задачу на две части. На полученном графике мы видим то, что оба решения совпадают. Таким образом, можно сделать выводы о том, что для решения дифференциальных уравнений в Engee, можно использовать как численные, так и аналитические методы.