Численное решение дифференциального уравнения на Python

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

введите сюда описание изображения

from scipy.optimize import minimize
import matplotlib.pyplot as plt
import numpy as np
from math import e

ESP = EPS = 10e-6

# Задаём дискретное время
num_of_fractions = 51   # Количество делений на дискретной шкале времени
t = np.linspace(0, 2, num_of_fractions)     # Дискретная шкала времени
dt = t[1] - t[0]    # Рассчитываем шаг шкалы

print(f"t: {t}")
print(f"dt: {dt}")


def f(y):
    return np.sum(((y[1:] - y[:-1]) / dt) ** 2 + 4 * y[1:] ** 2 + ((y[1:] - y[:-1]) / dt) * np.exp(4 * t[1:]))


y0 = np.full(num_of_fractions, 0.2)    # Начальное значение y
print(y0)

# Задаем ограничения на y. У нас y(0)=0 и y(2)=1
bounds = np.full((num_of_fractions, 2), (None, None))
bounds[0], bounds[-1] = (-18.0 - ESP, -18.0 + ESP), (4.0 - ESP, 4.0 + ESP)

# Минимизируем функционал
res = minimize(f, y0, method='l-bfgs-b', bounds=bounds)


# Определим функцию, возвращающую аналитическое решение. Напомню, что y = (e^t - e^(-t))/(e^2 - e^(-2))
def f_analytical(t):
    return (np.exp(t) - np.exp(-t)) / (np.exp(2) - np.exp(-2))


# Построим график и убедимся, что численное и аналитическое решения совпали
plt.plot(t, res.x, 'r', t, f_analytical(t), '--b')
plt.xlabel('t')
plt.ylabel('y')
plt.legend(('y численный', 'y аналитический'))
plt.show()

Ответы (0 шт):