Otok zajcev in lisic

V začetku 80.let  so tudi k nam z Otoka pljusnile Mavrice – črna škatlica s smešno gumijasto tipkovnico  (Mirko tipka na radirko) je bila v bistvu eden  prvih osebnih računalnikov in  v njem je bilo junaško srce – procesor Zilog80.  Spomina je imela mrcina celih 64kb, od tega 16kb ROMa in 48kb RAMa. Za zunanjo spominsko enoto so Mavrice imele kar kaseto, ki smo jo poganjali na z računalnikom povezanim kasetnikom, namesto monitorja pa je služil kar TV sprejemnik – če je bil barvni, ste imeli  tudi barve. Srečni kupec je poleg Mavrice dobil še kaseto s programi in eden od teh programov je bil tudi Otok zajcev in lisic.

Torej, na otoku živijo zajci in lisice. Število zajcev se s časom veča zato, ker se zajci razmnožujejo, in pada zato, ker jih lisice lovijo. Število lisic pa se prav tako spreminja – veča, ker se množijo, in manjša, ko jim zmanjka hrane.  Označimo z z trenutno število zajcev, za l trenutno število lisic, dz in dl pa naj bosta prirastka zajcev in lisic v časovnem intervalu dt.  Število  tako zajcev kot lisic lahko opišemo z diferencialnima enačbama:

\[ dz=(az-bz\cdot l)dt, \]

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

Da je prirastek zajcev odvisen od njihovega trenutnega števila, ne preseneti, daj je to značilno za naravno rast. Upad števila (negativni predznak!) pa je odvisen od števila srečanj zajcev in lisic, to število pa je premo sorazmerno tako s številom zajcev kot s številom lisic.  Umiranje lisic zaradi lakote pa je premo sorazmerno s številom lisic in obratno sorazmerno s številom zajcev. Pri tem sta a in c konstanti, ki nekaj povesta o plodnosti zajklje oziroma lisice, b je v zvezi z verjetnostjo, da ob srečanju lisica-zajec slednji izdahne, d pa, da lisica od lakote umre.

Imamo torej sistem dveh nelinearnih diferencialnih enačb 1. reda, zato  rešitev ni preprosta. A spreminjanje obeh populacij s časom se je dalo spremljati že na tej Mavrici, danes pa lahko to počnemo v preglednicah ali nalogo sprogramiramo v kakem programskem jeziku.  V programu najprej določimo časovni interval ter začetno število zajcev in lisic, nato pa računamo prirastke iz diferencialnih enačb.

Kaj pričakujemo? Najbolj verjeten izid je, da bo na otoku najprej  zmanjkalo zajcev, nato pa še lisic in otok bo opustel.  Ob skrbno izbranih konstantah in začetni populaciji pa se nam lahko zgodi tole:

Rdeče so zajci, modro pa lisice. Grafa nista v merilu, zajcev je  5000 krat več kot lisic. Opazimo, da se populaciji spreminjata ciklično, da je vrh populacije lisic zamaknjen glede zajce in da je manjšanje populacije pri lisicah hitrejše kot pri zajcih.

Program je pisan v Pythonu, konstante se vidijo v kodi:

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")
z=100
l=10
a=6.
b=1
c=4.
d=3000
dt=0.001
for t in range(10000):
    z=z+(a*z-b*z*l)*dt
    l=l+(c*l-d*l/z)*dt
    can.create_line(10+t*dt*100,500-z/1000,11+t*dt*100,500-z/1000, 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()

Naloga: Določi  konstante ali začetno število v obeh populacijah tako, da so nihanja v populaciji čim manjša.  Dosežeš lahko takle

ali še boljši graf. Vse to lahko storiš že s srednješolskim znanjem. (Namig: Če se količini ne spreminjata, kakšna je leva stran enačb?)

Več o tej tematiki lahko najdeš tu.

Simulacija gibanja satelita v VisualPythonu

Poljubno gibanje lahko simuliramo tako, da upoštevamo naslednje korake:

  1. izberemo majhen časovni interval dt,
  2. podamo komponente krajevnega vektorja [math]\vec{r}=(x,y)[/math] telesa  na začetku gibanja in komponente njegove hitrosti [math]\vec{v}=(v_x,v_y)[/math] takrat,
  3. zapišemo za telo 2. Newtonov zakon po komponentah in iz izrazimo komponenti pospeška,
  4. uporabimo definicjo pospeška in iz nje izračunamo novi komponenti hitrosti, [math]v_x\leftarrow v_x+a_x\cdot dt,\quad v_y\leftarrow v_y+a_y\cdot dt[/math]
  5. uporabimo definicijo hitrosti in iz nje določimo komponenti nove lege telesa  [math]x\leftarrow x+v_x\cdot dt,\quad y\leftarrow y+v_y\cdot dt,[/math]
  6. narišemo novo lego,
  7. pravkar izračunani lego in hitrost proglasimo za stari, nato pa ponavljamo korake 3-7.

Tako simulacijo lahko izvedemo samo s kalkulatorjem, točke rišemo npr. na mmilimetrski papir (če ga še prodajajo). Lahko pa seveda uporabimo preglednico ali še boljše, programski jezik. Zadnje čase je naših šolah v modi  Python, sorazmerno lahko je  preiti nanj, čr ste se  prej ukvarjali s Pascalom in Delphijem.  Spodnji program je napisan v VisualPythonu,  različici, ki je posebej primerna za grafične prikaze.

Rezultat, ki ga dobimo, je premikajoč se satelit na spodnji sličici:



In takoj se ponujajo  modifikacije programa – satelit, ki pušča za sabo sled, preverjanje Keplerjevih zakonov, dvojna zvezda, zvezdna kopica, trk kopic….Zanimivo vprašanje, na katerega lahko prv hitro odgovorimo,  je postavil Ivan Kuščer: kakšen bi bil tir satelita, če bi privlačna sila med telesi nekoliko odstopala od Newtonovega gravitacijskega zakona, npr.

[math]\vec{F}=\frac{GmM}{r^{3+\alpha}}\vec{r}.[/math]

Prav tako lahko npr. napišete  igro, v kateri z raketo in omejeno količino goriva pristajate na Zemlji ali Luni in ste ves čas v nevarnosti, da če vam goriva zmanjka, postanete umetni satelit….