Model dravce a kořisti

5. Model dravce a kořisti#

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from scipy.integrate import solve_ivp
def korist(x,y,a,b):
    return a*x - b*x*y #- 0.1*x**2

def dravec(x,y,c,d):
    return -c*y+d*x*y

def model(t,X):
    x,y = X
    a=1.1
    b=1
    c=1.2
    d=0.45
    return [korist(x,y,a,b),dravec(x,y,c,d)]

# def model(t,X):
#     x,y = X
#     return [x*(1-x-1.4*y),y*(1-1.5*x-y)]

t = np.linspace(0, 50, 500)
sol = solve_ivp(
    model, 
    [t[0], t[-1]], # interval pro reseni
    [1, 1.5], # pocatecn podminka
    t_eval=t
)

df = pd.DataFrame(data=sol.y.T, index=t, columns=["kořist","dravec"])
df.index.name = "čas"
ax = df.plot(style=["-","--"])
ax.set(title='Lotkův-Volterrův model', ylim= (0,None));
# plt.savefig("Lotka-Volterra_prubeh.pdf")
../_images/a634c15dec2c1606db49cff6a1a064603dbcfea7613c03618411e2a6278bb06b.png
xmax = 5
ymax = 4
x, y = np.meshgrid(np.linspace(0.01, xmax, 15), 
                   np.linspace(0.01, ymax, 15))

# Komponenty vektoroveho pole
u,v = model(0,[x,y])
fig,ax = plt.subplots()
ax.quiver(x,y,u,v,color='gray',units='xy', angles='xy') # vykresleni s jednotkovou delkou
ax.streamplot(x, y, u, v, density=1)
# ax.plot(df['kořist'],df['dravec'])

ax.set(
xlabel="populace kořisti",
ylabel="populace dravce",
title="Lotkův–Volterrův model dravce a kořisti");
# plt.savefig("Lotka-Volterra_portret.pdf")
../_images/c635358784ee131dc4cbefa4a686a9567d5bbd732b81d9e630452085410f80b3.png

Následující model je kopií předchozího. Navíc je vše spojeno v jednom poli. Předělejte jej na model konkurence dvou populací, mezi kterými je slabá konkurence. Pokuste se opravit i komentář. Může pomoci nástroj poskytující okamžitý náhled.

Predaci je možno modelovat soustavou soustavou rovnic

\[\begin{split}\begin{aligned} \frac{\mathrm dx}{\mathrm dt} &= ax - bxy,\\ \frac{\mathrm dy}{\mathrm dt} &= -cy + dxy, \end{aligned}\end{split}\]
kde \(x\) je velikost populace kořisti, \(y\) je velikost populace predátora, \(t\) je čas a ostatní proměnné jsou parametry modelu.

xmax = 4
ymax = 4
def model(t,X,a=1,b=1,c=1,d=0.5):
    x,y = X
    return [a*x - b*x*y ,-c*y+d*x*y]

x, y = np.meshgrid(np.linspace(0.01, xmax, 15), 
                   np.linspace(0.01, ymax, 15))

# Komponenty vektoroveho pole
u,v = model(0,[x,y])
fig,ax = plt.subplots()
ax.quiver(x,y,u,v,color='gray',units='xy', angles='xy') # vykresleni s jednotkovou delkou
ax.streamplot(x, y, u, v, density=1)

ax.set(
xlabel="populace x",
ylabel="populace y",
title="Model (doplňte čeho)");
../_images/7e739ab105b5d78f1f07aac02d6792adf3503c66ad32c7d92a1866a01f4b24e9.png