Загрузка данных


import numpy as np
import matplotlib.pyplot as plt

def euler(f, ts, y0, n=1000):
    t = np.linspace(ts[0], ts[1], n)
    h = t[1] - t[0]
    y = np.empty((len(y0), n))
    y[:, 0] = y0
    for i in range(1, n):
        y[:, i] = y[:, i-1] + h * f(t[i-1], y[:, i-1])
    return t, y

def f(t, y, k=1, r=1):
    dP_dt = r * y * (1 - y / k)
    return dP_dt

def log(t, p0=0.5, k=1, r=1):
    return k * p0 * np.exp(r * t) / (k + p0 * (np.exp(r * t) - 1))

x, y = euler(f, [-6, 6], [log(-6)])

plt.plot(x, y[0, :], label="Расчёт")
plt.plot(x, log(x), ls="-", label="Логарифм")
plt.legend()
plt.show()