Eksponentialfunksjonen som modell. Regresjon
Eksponentialfunksjonen som modell

Antall ørret i et vann har økt kraftig etter at det i 1998 ble satt i gang med kalking av vannet. Tabellen viser antall ørret i vannet noen år etter 1998.
Årstall | 1998 | 2000 | 2002 | 2004 |
|---|---|---|---|---|
Antall år etter 1998, | 0 | 2 | 4 | 6 |
Antall ørret i tusen, | 4,0 | 6,7 | 10,9 | 17,4 |
Tabellen viser at ørretbestanden øker mer og mer. Vi vil finne en modell for utviklingen av ørretbestanden.
Regresjon med GeoGebra
Vi legger dataene fra tabellen inn i regnearket i GeoGebra. Så merker vi cellene og klikker på knappen for regresjonsanalyse.
Punktene viser at vi må finne en funksjon som vokser raskere og raskere ettersom -verdiene øker, noe vi også ser direkte av tabellen. Derfor kan en eksponentiell modell passe godt med de observerte verdiene.
Ved å velge "Eksponentiell 2" som regresjonsmodell får vi tallet som grunntall i potensen.
Vi får funksjonen gitt ved
som modell for utviklingen av ørretbestanden.
For å få grafen og punktene over i det vanlige grafikkfeltet kopierer vi den over ved å trykke på knappen til høyre for innstillingshjulet, og vi velger "Kopier til grafikkfeltet".
Av grafene kan vi for eksempel se at ut fra denne modellen vil ørretbestanden ha passert 46 000 individer i 2008 og 76 000 individer i 2010.
Regresjon med Python
Regresjon med Python kan gjøres på flere måter. Her har vi valgt å bruke metoden curve_fit fra scipy.optimize selv om den gir oss mer data enn vi skal bruke her.
Metoden er basert på at vi angir i koden hva slags type funksjon som skal brukes i den matematiske modellen. Dette gjøres ved å definere modellen som en egendefinert pythonfunksjon i koden. I vårt tilfelle ønsker vi å tilpasse målingene til en eksponentialfunksjon av typen . Starten på programmet kan se slik ut:
1 # importerer nødvendige bibliotek 2from scipy.optimize import curve_fit 3import numpy as np 4import matplotlib.pyplot as plt 5 6 # lager funksjonen som beskriver modellen 7def modell(x,a,b): 8 return a*np.e**(b*x)
Parametrene til pythonfunksjonen modell er først den frie variabelen x, deretter konstantene som skal brukes i modellfunksjonen, og . Funksjonen modell brukes av metoden curve_fit sammen med ei liste med -verdiene og ei liste med -verdiene i målingene. curve_fit gir tilbake to lister. Den ene inneholder de to konstantene a og b (i vårt tilfelle) som gjør at den matematiske funksjonen vi definerte i pythonfunksjonen modell, passer mest mulig med måledataene. Den andre lista inneholder de såkalte kovariansene, som vi ikke skal bruke her.
Koden kan videre se slik ut:
1 # legger inn måledataene i lister 2x_verdier = [0,2,4,6] 3y_verdier = [4,6.7,10.9,17.4] 4 5 # bruker metoden curve_fit og legger resultatene i to lister 6konstanter,kovarians = curve_fit(modell,x_verdier,y_verdier) 7 8 # henter ut konstantene fra lista konstanter 9a, b = konstanter 10 11 # lager utskrift av funksjonen 12print(f"Funksjonen blir f(x) = {a:.3f}e^({b:.3f}x).") 13 14 # plotter data 15plt.plot(x_verdier,y_verdier,'o', label = "Målinger") 16 17 # plotter modell 18x_array = np.linspace(min(x_verdier),max(x_verdier),300) 19y_array = modell(x_array,a,b) 20plt.plot(x_array,y_array,"brown", label = "Modell") 21plt.legend(bbox_to_anchor=(0.6,1)) 22plt.xlabel("$x$, antall år etter 1998") # tittel på x-aksen 23plt.ylabel("$y$, antall tusen ørret") 24plt.show()
Kjøring av koden gir følgende utskrift:
"Funksjonen blir f(x) = 4.126e^(0.240x)."
Vi får nesten den samme modellfunksjonen som med GeoGebra. Årsaken til at det ikke blir likt, kan være at ulike programmer kan bruke litt ulike måter å regne seg fram til resultatet på.
Videre utvikling av ørretbestanden
Etter modellen vil ørretbestanden fortsette å vokse raskere og raskere. Er det slik det vil utvikle seg videre?
Registreringen av ørretbestanden fortsatte hvert andre år etter 2004. Resultatene ser du i tabellen nedenfor.
Årstall | 1998 | 2000 | 2002 | 2004 | 2006 | 2008 | 2010 |
|---|---|---|---|---|---|---|---|
Antall år etter 1998, | 0 | 2 | 4 | 6 | 8 | 10 | 12 |
Antall ørret i tusen, | 4,0 | 6,7 | 10,9 | 17,4 | 21,5 | 24,5 | 26,0 |
I koordinatsystemet nedenfor ser du grafen til sammen med de registrerte verdiene i 2006, 2008 og 2010 (merket av som grønne punkter).
Det viser seg altså at modellen ikke var egnet til å si noe om utviklingen i perioden etter 2004.
Eksponentialfunksjoner passer ofte godt til å beskrive hvordan populasjoner endrer seg i et begrenset tidsrom mens det er rik tilgang på mat og lite eller ingenting som begrenser veksten.
Etter hvert blir utviklingen annerledes. Når populasjonen blir stor nok, bremses veksten fordi det for eksempel blir for lite mat.
På teorisiden "Logistisk vekst" ser vi på en matematisk modell som passer bedre til utviklingen i ørretbestanden.