Otok zajcev in lisic(2)

Prejšnji primer dopolnimo še s travo – upoštevajmo, da se količina trave na otoku veča tako, kot je značilno za  naravno rast, in manjša zato, ker jo zajci jedo. Upoštevajmo tudi, da lahko zajci umirajo, če jim zmanjka trave. Vse to nas vodi do naslednjih diferencialnih enačb:

    \[dz=(az-bz\cdot l-g\frac{z}{x})dt,\]

    \[dl=(cl-d\frac{l}{z})dt.\]

 

    \[dx=(ex-fz\cdot x)dt,\]

Dodatne konstante so e, f in g. Prva opisuje rast trave,  druga meri njeno manjšanje zaradi zajcev, tretja pa pogin zajcev zaradi lakote.  Koda programa v Pythonu je naslednja:

from Tkinter import *
from math import sin,pi
root = Tk()
("symbol",8)
root.title("Zajci in lisice -V. Petruna, januar 2010")
can = Canvas(root, width = 1010, height = 1000, background = "white")
can.create_line(10,500,1000,500, width = 1, fill = "black")
can.create_line(10,500,10,10, width = 1, fill = "black")
x=10
z=100
l=10
a=6.
b=1
c=4.
d=10
e=13
f=0.8
g=0.65
dt=0.001
for t in range(10000):
    x=x+(e*x-f*x*z)*dt
    z=z+(a*z-b*z*l-g*z/x)*dt
    l=l+(c*l-d*l/z)*dt
    can.create_line(10+t*dt*100,500-x,11+t*dt*100,500-x, width = 2, fill = "green")
    can.create_line(10+t*dt*100,500-z,11+t*dt*100,500-z, width = 2, fill = "red")
    can.create_line(10+t*dt*100,500-l*5,11+t*dt*100,500-l*5, width = 2, fill = "blue")
can.pack(side = BOTTOM)
root.mainloop()

S temi konstantami dobimo naslednji izid:

Opazimo, da je dogajanje na otoku kar burno. Količina trave (zelena črta) nekaj časa niha,  nato pa pride do neomejenega razmnoževanja.Za zajce in lisice je to ugodno, od tu naprej se njihovo število periodično spreminja.

Naloga. Poskusi spremeniti  konstante tako, da bodo vse tri količine periodično nihale.

Prav lahko se zgodi, da tisto, kar se nam zdi periodično, to v resnici ni. Primer je spodnji graf:

Če ga pogledamo v 10 krat daljšem času, vidimo

kar pomeni, da bo trave zmanjkalo, nato pa tudi zajcev in lisic. Vse je odvisno od majhnih sprememb konstante f v spodnjem programu. Ta govori o tem, koliko trave popase posamezen zajec.

 

from Tkinter import *
from math import sin,pi
root = Tk()
("symbol",8)
root.title("Zajci in lisice -V. Petruna, januar 2010")
can = Canvas(root, width = 1010, height = 1000, background = "white")
can.create_line(10,500,1000,500, width = 1, fill = "black")
can.create_line(10,500,10,10, width = 1, fill = "black")
x=100
z=30
l=6
a=6.
b=1
c=4.
d=12
e=3.
f=9.06
g=0.67
dt=0.01
xfactor=10 #spreminjaj za razteg časovne osi 
for t in range(10000):
    x=x+(e*x-f*x/z)*dt
    z=z+(a*z-b*z*l-g*z/x)*dt
    l=l+(c*l-d*l/z)*dt 
    can.create_line(10+t*dt*xfactor,500-x,11+t*dt*xfactor,500-x, width = 2, fill = "green")
    can.create_line(10+t*dt*xfactor,500-z,11+t*dt*xfactor,500-z, width = 2, fill = "red")
    can.create_line(10+t*dt*xfactor,500-l*5,11+t*dt*xfactor,500-l*5, width = 2, fill = "blue")
can.pack(side = BOTTOM)
root.mainloop()

Vsaka podobnost z omenjenim otokom in našim planetom je zgolj naključje – ali pa tudi ne.

1 thought on “Otok zajcev in lisic(2)”

Comments are closed.

Scroll to Top