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()