Hopp til innhald
Fagartikkel

Eksponentialfunksjonen som modell. Regresjon

Eksponentialfunksjonar blir ofte brukte som modellar for vekst.

Eksponentialfunksjonen som modell

Talet på aure i eit vatn har auka kraftig etter at det i 1998 vart sett i gang med kalking av vatnet. Tabellen viser talet på aure i vatnet nokre år etter 1998.

Aurebestand

Årstal

1998

2000

2002

2004

Talet på år etter 1998, x

0

2

4

6

Talet på aure i tusen, N

4,0

6,7

10,9

17,4

Tabellen viser at aurebestanden aukar meir og meir. Vi vil finne ein modell for utviklinga av aurebestanden.

Regresjon med GeoGebra

Vi legg dataa frå tabellen inn i reknearket i GeoGebra. Så merker vi cellene og klikkar på knappen for regresjonsanalyse.

Punkta viser at vi må finne ein funksjon som veks raskare og raskare ettersom x-verdiane aukar, noko vi òg ser direkte av tabellen. Derfor kan ein eksponentiell modell passe godt med dei observerte verdiane.

Ved å velje "Eksponentiell 2" som regresjonsmodell får vi talet e som grunntal i potensen.

Vi får funksjonen N gitt ved

Nx=4,05e0,24x

som modell for utviklinga av aurebestanden.

For å få grafen og punkta over i det vanlege grafikkfeltet kopierer vi han over ved å trykke på knappen til høgre for innstillingshjulet, og vi vel "Kopier til grafikkfeltet".

Av grafane kan vi til dømes sjå at ut frå denne modellen vil aurebestanden ha passert 46 000 individ i 2008 og 76 000 individ i 2010.

Regresjon med Python

Regresjon med Python kan gjerast på fleire måtar. Her har vi valt å bruke metoden curvefit frå scipy.optimize sjølv om han gir oss meir data enn vi skal bruke her.

Metoden er basert på at vi skriv i koden kva slags type funksjon som skal brukast i den matematiske modellen. Dette blir gjort ved å definere modellen som ein eigendefinert pythonfunksjon i koden. I vårt tilfelle ønsker vi å tilpasse målingane til ein eksponentialfunksjon av typen fx=a·ebx. Starten på programmet kan sjå slik ut:

python
1        # importerer nødvendige bibliotek
2from scipy.optimize import curve_fit
3import numpy as np
4import matplotlib.pyplot as plt
5
6        # lagar funksjonen som beskriv modellen
7def modell(x,a,b):
8  return a*np.e**(b*x)

Parameterane til pythonfunksjonen modell er først den frie variabelen x, deretter konstantane som skal brukast i modellfunksjonen, a og b. Funksjonen modell blir brukt av metoden curvefit saman med ei liste med x-verdiane og ei liste med y-verdiane i målingane. curvefit gir tilbake to lister. Den eine inneheld dei to konstantane a og b (i vårt tilfelle) som gjer at den matematiske funksjonen vi definerte i pythonfunksjonen modell, passar mest mogleg med måledataa. Den andre lista inneheld dei såkalla kovariansane, som vi ikkje skal bruke her.

Koden kan vidare sjå slik ut:

python
1        # legg inn måledataa i lister
2x_verdiar = [0,2,4,6]
3y_verdiar = [4,6.7,10.9,17.4]
4
5        # bruker metoden curve_fit og legg resultata i to lister
6konstantar,kovarians = curve_fit(modell,x_verdiar,y_verdiar)
7
8        # hentar ut konstantane frå lista konstantar
9a, b = konstantar
10
11        # lagar utskrift av funksjonen
12print(f"Funksjonen blir f(x) = {a:.3f}e^({b:.3f}x).")
13
14        # plottar data
15plt.plot(x_verdiar,y_verdiar,'o', label = "Målingar")
16
17        # plottar modell
18x_array = np.linspace(min(x_verdiar),max(x_verdiar),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$, talet på år etter 1998") # tittel på x-aksen
23plt.ylabel("$y$, talet på tusen aure")
24plt.show()
Kommentarar til koden i den andre kodeblokka

I linje 9 bruker vi éi linje på å legge verdiane frå lista konstantar over til dei to variablane.

Lista kovarians bruker vi ikkje i programmet. Vi har vurdert dette med kovarians til å vere utanfor det som trengst i faget. Kovariansen seier noko om kor godt dataa passar til modellen.

I linje 15 bruker vi ein o i plot-kommandoen for at grafen skal bli punkt og ikkje ein samanhengande graf. Vi kunne òg ha brukt kommandoen scatter i staden for plot her.

Du treng kanskje ikkje kommandoen plt.show() til for å få sjå plotta.

Køyring av koden gir denne utskrifta:

"Funksjonen blir f(x) = 4.126e(0.240x)."

Vi får nesten den same modellfunksjonen som med GeoGebra. Årsaka til at det ikkje blir likt, kan vere at ulike program kan bruke litt ulike måtar å rekne seg fram til resultatet på.

Vidare utvikling av aurebestanden

Etter modellen vil aurebestanden halde fram med å vekse raskare og raskare. Er det slik det vil utvikle seg vidare?

Registreringa av aurebestanden heldt fram kvart andre år etter 2004. Resultata ser du i tabellen nedanfor.

Aurebestand

Årstal

1998

2000

2002

2004

2006

2008

2010

Talet på år etter 1998, x

0

2

4

6

8

10

12

Talet på aure i tusen, N

4,0

6,7

10,9

17,4

21,5

24,5

26,0

I koordinatsystemet nedanfor ser du grafen til N saman med dei registrerte verdiane i 2006, 2008 og 2010 (merkte av som grøne punkt).

Det viser seg altså at modellen ikkje var eigna til å seie noko om utviklinga i perioden etter 2004.

Eksponentialfunksjonar passar ofte godt til å beskrive korleis populasjonar forandrar seg i eit avgrensa tidsrom mens det er rik tilgang på mat og lite eller ingenting som avgrensar veksten.

Etter kvart blir utviklinga annleis. Når populasjonen blir stor nok, blir veksten bremsa fordi det til dømes blir for lite mat.

teorisida "Logistisk vekst" ser vi på ein matematisk modell som passar betre til utviklinga i aurebestanden.