Lotka-Volterra mudel (kahe liigi kooslus)

Probleemi püstitus: Olgu x(t) jäneste ja y (t) huntide arv ajamomendil t. Jäneste toidulaual pole praktilisi piiranguid, sest hundid ei lase neil liialt paljuneda. Huntide toidulaud sõltub jäneste arvukusest. Teeme lihtsustava eelduse, et jänestel pole teisi looduslikke vaenlasi peale huntide, ning jänesed on huntide ainsaks toiduks. Kui poleks hunte, alluks jäneste arvukus Malthuse seadusele:

x'(t)=a x(t),kus  a>0;

Kui poleks jäneseid,alluks huntide arvukus seadusele

y'(t)=-b y(t),kus b>0.

Jäneste ja huntide kooseksisteerimist võib kirjeldada lihtsa diferentsiaalvõrrandite süsteemiga

(dx/dt)=ax - (Subscript[a, 1])xy,

(dy/dt)=-by + (Subscript[b, 1])xy,

kus a, b, (Subscript[a, 1  ])ja  (Subscript[b, 1]) on positiivsed konstandid. Siin liige x(t)y(t) on proportsionaalne jänese ja hundi kohtumise tõenäosusele ning sellised kohtumised mõjuvad negatiivselt jäneste arvukusele ning positiivselt huntide arvukusele.

Siin x(t) ja y(t) on liikide arvukused, seega probleemi lahendamisel vaatleme neid võrrandeid mitte kogu xy tasandil vaid selle esimeses veerandis, s.t. x ≥ 0 ja y ≥ 0.

Jagades teise võrrandi esimesega, saame ühe hariliku diferentsiaalvõrrandi

(dy/dx)=((-by+(Subscript[b, 1])xy)/(ax-(Subscript[a, 1])xy))

ehk

y(-b + (Subscript[b, 1])x)dx=x(a - (Subscript[a, 1])y)dy.

See on eralduvate muutujatega võrrand. Eraldame muutujad

xy[((-b+(Subscript[b, 1])x)/x)dx-((a-(Subscript[a, 1])y)/y)dy]=0.

Lahendid x = 0 ja y = 0 jätame kõrvale kui ülesande sisust lähtudes ebahuvitavad. Arvutame

∫((-b+(Subscript[b, 1])x)/x)dx+∫((-a+(Subscript[a, 1])y)/y)dy = C,

-b ln x + (Subscript[b, 1])x-a lny + (Subscript[a, 1])y = C

ln ((x^(-b))((e^(Subscript[b, 1]))^x)(y^(-a))((e^(Subscript[a, 1]))^y))=ln (Subscript[C, 1]),  kus ln (Subscript[C, 1]) = C.

Siit

((e^((Subscript[b, 1])x))/(x^b)).((e^((Subscript[a, 1])y))/(y^a))=(Subscript[C, 1]).

Viimane seos esitabki lahendeid ilmutamata kujul. Selle lähemal uurimisel ilmneb, et lahendid kujutavad endast kinnisi kõveraid ümber punkti, mille koordinaatideks on

x=(b/(Subscript[b, 1])),   y = (a/(Subscript[a, 1])).

Konkreetne mudel

Oletame, et ilma huntideta suureneks jäneste arvukus ühes ajavahemikus neljakordseks. Jäneste niisugust kasvu saab modelleerida diferentsiaalvõrrandi  (dx/dt)=1.4x , kui y = 0  abil.

Selle võrrandi täpne lahend on  x(t) = x(0) (e^(1,4t)), mis tähendab eksponentsiaalset kasvu teguriga (e^(1,4)) mis on umbes 4,0552.  Seega  a = 1,4.

Oletame,et ilma jänesteta väheneks huntide arvukus ühes ajavahemikus umbes 10 % võrra. 
Huntide arvu niisugust kahanemist saab modelleerida diferentsiaalvõrrandi 
 (dy/dt)=-0.1y,  kui x = 0  abil.

Selle võrrandi täpne lahend on y(t)=y(0)(e^(-0,1t)), mis tähendab
eksponentsiaalset kahanemist teguriga(e^(-0,1 ))mis on umbes 0.904837.   Seega b =0,1.

Olgu  (Subscript[a, 1]) = 0.02 katsetest võetud konstant, mis näitab, kui suur osa jänestest tapetakse ühe hundi poolt ühe ajaperioodi jooksul.

Olgu  (Subscript[b, 1]) = 0.001 katsetest võetud konstant, mis näitab, kui palju sünnib hunte juurde ühe ajaperioodi jooksul iga ärasöödud jänese kohta.

Seega jäneste ja huntide kooseksisteerimist võib kirjeldagu diferentsiaalvõrrandite süsteem

(dx/dt)=1,4x - 0,02xy,

(dy/dt)=-0,1y + 0,001xy,

Konkreetse mudeli realisatsioon programmina

a = 1.4;  
a1 = 0.02; 
b = 0.1; 
b1 = 0.001; 
sol = NDSolve[
{x'[t] == a x[t] - a1 x[t] y[t],
 y'[t] == - b y[t] + b1 x[t] y[t],
 x[0] == 100, y[0] == 60 }, {y, x}, {t, 0, 80} ];

 Plot[Evaluate[{x[t], y[t]} /. sol], {t, 0, 80}, PlotStyle -> {RGBColor[1,0,0], RGBColor[0,0,1]},
   PlotRange->All]

gr1 = ParametricPlot[Evaluate[{x[t], y[t]} /. sol], {t, 0, 20}, Epilog -> {PointSize[0.02],Point[{b/b1, a/a1}],
	Dashing[{0.03,0.03}], Line[{{b/b1, 0},{b/b1, 120}}], Line[{{0, a/a1},{420, a/a1}}] 	}]

TableForm[Table[{t,(x/.sol[[1]])[t],(y/.sol[[1]])[t]},{t,0,80}],
TableHeadings->{None,{"t", "x[t]", "y[t]"}}]

Tasakaalupunkt konkreetse mudeli jaoks

Tasakaalupunkti antud algparameetrite puhul saame varemvaadeldud võrdustest:

x=(b/(Subscript[b, 1]))=(0.1/0.001)=100,   y = (a/(Subscript[a, 1]))=(1.4/0.02)=70.