sunnuntai 14. tammikuuta 2024

Logistiset kasvumallit

Diclaimer: Bloggerin matematiikkatyökalu on järjettömän buginen ja epäluotettava. Siksi olenkin tekstissäni pyrkinyt mahdollisuuksien mukaan välttämään ylimääräisten symbolien käyttöä.

Lähdetään oletuksesta, että N(t) on populaation koko hetkellä t, b on syntyneiden määrä ja d kuolleiden määrä. Saadaan

\begin{equation}N(t+\triangle t)=N(t)+b \triangle t N(t) -d \triangle t N(t)  \end{equation}

\begin{equation}\frac{N(t+\triangle t)-N(t)}{\triangle t}=(b-d)N(t)  \end{equation}

kun t lähestyy nollaa, saadaan differentiaaliyhtälöksi

\begin{equation}\frac{dN}{dt}=(b-d)N(t)  \end{equation}

sekä differentiaaliyhtälön ratkaisuksi

\begin{equation}N(t)=N_0 e^{rt},  \end{equation}
missä r on kasvuvauhti. Kyseessä on toisin sanoen eksponentiaalisesti kasvava yhtälö. Malthusin lähde, Chasnovin Mathemathical Biology -moniste löytyy ilmaiseksi täältä. Seuraavassa yksinkertainen diskreetti esimerkki eksponentiaalisen kasvun mallin kuvaajasta:

Perusominaisuuksiltaan eksponentiaalinen malli sopii erinomaisesti taloudellisen kasvun ja kassaantumisen kuvaamiseen, mutta resurssien luonnossa asettamien rajoitusten vuoksi erityisen huonosti populaatioiden kasvun mallintamiseen. Tästä syystä Malthusin kasvumallin pohjalta kehitettiin Verholstin malli eli logistinen kasvumalli, jossa otetaan huomioon kasvun yläraja K:

\begin{equation}\frac{dN}{dt}=F(N)=rN(1-\frac{N}{K}). \end{equation}
Verhulstin mallissa N kuvaa populaation kokoa, r kasvuvakiota ja K populaation koon ylärajaa. Logistisen kasvumallin kasvunopeus hidastuu ajan ja populaation koon kasvun mukana. Logistisen kasvumallin differentiaaliyhtälölle voidaan muotoilla seuraavanlainen kuvaaja populaation muutosnopeuden ja koon mukaan:


Logistinen kasvumalli ratkaisemalla differentiaaliyhtälöiden ratkaisumenetelmiä hyödyntäen päädytään kaavaan

\begin{equation}N(t)=\frac{P_0*K*e^{r*t}}{(K-P_0)+P_0*e^{rt}} \end{equation}

jonka pohjalta saadaan muotoiltua populaation koon kuvaaja:

 

Logistiselle kasvumallille saadaan tasapainopisteiksi N=0 ja N=K. Tasapainopisteiden stabiilius saadaan tarkistettua derivoimalla logistinen malli, jolloin saadaan
\begin{equation}F'(N)=r(1-\frac{2N}{K}). \end{equation}

Sovittamalla tasapainopisteet derivoituun yhtälöön, huomataan, että kun N=0, yhtälö saa muodon F'(0)=r ja kun F'(K)=-r. Kyseessä on toisin sanoen satulapiste, jossa nollapiste on epästabiili sekä K stabiili. Populaatio voi siis lähestyä nollapistettä mielivaltaisen lähelle kyeten kuitenkin kasvamaan siitä pois, mutta lähestyminen kapasiteetin ylärajaa (voi) johtaa ajautumiseen kohti ääripistettä.

Logistisella mallilla on olemassa myös Allee-efektillä täydennetty muoto

\begin{equation}\frac{dN}{dt}=-rN(1-\frac{N}{A})(1-\frac{N}{K}), \end{equation}
missä populaation kasvuvauhti on negatiivinen kun 0<A<N sekä positiivinen kun N<A<K, oletuksella että on aina voimassa A<K. Ensimmäisessä tapaksessa Allee-efektiä sanotaan "vahvaksi", jälkimmäisessä "heikoksi".  Tällöin populaation koolla on siis vaikutusta kasvunopeuteen, mutta vaikutuksen suuruus ja suunta riippuvat muuttujan A arvoista. Allee-efektillä varustetun logistisen kasvumallin kuvaajat ovat vahvalla Allee-efektillä kun K=102 ja A=40:

sekä heikolla kun A = 10 ja N = 11-100:


Allee-efektillä täydennetyn mallin stabiilisuusominaisuudet seuraavat pitkälti tavallisen logistisen mallin vastaavia, joten niitä ei tässä erikseen käydä läpi. Aiheesta on syvällisemmin kirjoittanut Lv, Chen ja Chen artikkelissaan.

Wallace ja Tsoularis muotoilivat esseessään seuraavan yleisen muodon logistisen kasvun funktiolle:

\begin{equation} \frac{dN}{dt}=rN^{\alpha}(1-(\frac{N}{K})^{\beta})^{\gamma} .\end{equation}

Huomataan, että kun alfa = 1 ja gamma = 0, saadaan eksponentiaalinen kasvumalli. Kun taas alfa = 1, beta=1 ja gamma=1, saadaan tavallinen logistinen kasvumalli. Muuttujien eri arvoilla voidaan edelleen muotoilla suoraan ainakin Gompertzin malli, Blumbergin malli, Hyper-Gompertz... käytännössä kaikki kuvaavat samanlaista käyrää, mutta pienin erilaisin painotuksin. Mainittuja malleja ei tässä käsitellä enempää.

Käytetyt R-koodit:


eksponentiaalifunktio <- function(r,t){
    funktio <- r*exp(t)
    return(funktio)
}

plot(x=1:7,y=eksponentiaalifunktio(0.1,1:7),type = "l", col="red",xlab="aika",ylab = "populaation koko")
 
logistinen_funktio <- function(r,N,K){
funktio <- r*N*(1-N/K)
return(funktio)
}


plot(x=0:100,y=logistinen_funktio(0.5,0:100,100),type = "l", col="red",xlab="N",ylab = "F(N)")
 
logistinen_funktio1 <- function(p_0,K,t,r){
funktio <- p_0*K*exp(r*t)/((k-p_0)+p_0*exp(r*t))
return(funktio)
} 
 
plot(x=0:30,y=logistinen_funktio1(1,100,0:30,0.5),type = "l", col="red",xlab="aika",ylab = "populaation koko")

allee_funktio <- function(r,N,K,A){
    funktio <- -r*N*(1-N/A)*(1-N/K)
    return(funktio)
}

plot(x=0:100,y=allee_funktio(0.5,0:100,102,40),type = "l", col="red",xlab="N",ylab = "F(N)")
lines(x, y2, type = "l", col = "black")   
plot(x=0:89,y=allee_funktio(0.5,11:100,102,10),type = "l", col="red",xlab="N",ylab = "F(N)")
lines(x, y2, type = "l", col = "black")  

Ei kommentteja:

Lähetä kommentti