Tilbake
11.3
Matematisk modellering med kode

11.3 Matematisk modellering med kode

Bruk programmering til å modellere matematiske sammenhenger.

55 min
8 oppgaver
ModelleringFunksjonsplottingNumeriske metoder
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 8 oppgaver

Matematisk modellering med kode

I matematikk lager vi ofte modeller — forenklede beskrivelser av virkeligheten. En modell kan for eksempel beskrive hvordan en befolkning vokser, hvordan temperaturen endrer seg, eller hvor mye penger du sparer over tid.

Med programmering kan vi gjøre modellene levende: vi kan beregne verdier for mange tidspunkter, finne når noe skjer, og skrive ut tabeller som viser utviklingen.

I dette kapittelet skal du:

- Modellere lineær vekst (jevn økning) med kode
- Modellere eksponentiell vekst (prosentvis økning) med kode
- Lage tabeller som viser utviklingen over tid
- Bruke programmering til å løse likninger ved systematisk prøving
- Utforske matematiske sammenhenger med kode

Lineær vekst
Ved lineær vekst øker (eller minker) en størrelse med et fast beløp for hvert tidssteg. Den matematiske modellen er:

y=ax+by = ax + b

der aa er stigningstallet (fast endring per steg) og bb er startverdien.

I Python kan vi modellere dette med en løkke:

startverdi = 1000  # b: startverdien
endring = 50       # a: fast endring per måned

verdi = startverdi
for maned in range(1, 13):
    verdi = verdi + endring
    print(f"Måned {maned}: {verdi} kr")

Her øker verdien med 50 kr for hver måned — en jevn økning.

✏️Eksempel: Spareplan med fast månedlig beløp

Ola setter inn 500 kr i sparebøssen hver måned. Han har 2000 kr fra før. Skriv et Python-program som viser hvor mye Ola har etter hver måned i ett år. Hvor lang tid tar det før han har 10 000 kr?

Løsning:

saldo = 2000
innskudd = 500

print(f"Start: {saldo} kr")
print("-" * 25)

for maned in range(1, 13):
    saldo = saldo + innskudd
    print(f"Måned {maned:>2}: {saldo} kr")

# Finn når han når 10 000 kr
saldo = 2000
maned = 0
while saldo < 10000:
    saldo = saldo + innskudd
    maned = maned + 1

print(f"\nOla når 10 000 kr etter {maned} måneder.")

Resultat:

Start: 2000 kr
-------------------------
Måned  1: 2500 kr
Måned  2: 3000 kr
Måned  3: 3500 kr
...
Måned 12: 8000 kr

Ola når 10 000 kr etter 16 måneder.

Vi kan sjekke med formelen: y=500x+2000y = 500x + 2000. Vi løser 500x+2000=10000500x + 2000 = 10\,000:

500x=8000    x=16 ma˚neder500x = 8000 \implies x = 16 \text{ måneder} \checkmark

Eksponentiell vekst
Ved eksponentiell vekst øker (eller minker) en størrelse med en fast prosentandel for hvert tidssteg. Den matematiske modellen er:

y=abxy = a \cdot b^x

der aa er startverdien og bb er vekstfaktoren.

- Hvis veksten er p%p\%, er vekstfaktoren b=1+p100\displaystyle b = 1 + \frac{p}{100}
- Vekst: b>1b > 1 (f.eks. b=1,05b = 1{,}05 for 5 % økning)
- Reduksjon: b<1b < 1 (f.eks. b=0,90b = 0{,}90 for 10 % reduksjon)

I Python:

startverdi = 1000
vekstfaktor = 1.05  # 5 % vekst per år

verdi = startverdi
for aar in range(1, 11):
    verdi = verdi * vekstfaktor
    print(f"År {aar}: {verdi:.2f} kr")

Her ganger vi med vekstfaktoren i hvert steg — verdien vokser raskere og raskere.

✏️Eksempel: Bankinnskudd med rentes rente

Kari setter 5000 kr i banken med 3 % årlig rente (rentes rente). Skriv et program som viser saldoen hvert år i 20 år. Hvor lang tid tar det før pengene er doblet?

Løsning:

saldo = 5000
rente = 0.03
vekstfaktor = 1 + rente

print(f"Start: {saldo:.2f} kr")
print("-" * 30)

for aar in range(1, 21):
    saldo = saldo * vekstfaktor
    print(f"År {aar:>2}: {saldo:.2f} kr")

# Finn doblingstiden
saldo = 5000
aar = 0
while saldo < 10000:
    saldo = saldo * vekstfaktor
    aar = aar + 1

print(f"\nPengene er doblet etter {aar} år.")

Utdrag av resultatet:

Start: 5000.00 kr
------------------------------
År  1: 5150.00 kr
År  2: 5304.50 kr
År  5: 5796.37 kr
År 10: 6719.58 kr
År 15: 7789.81 kr
År 20: 9030.56 kr

Pengene er doblet etter 24 år.

Vi kan sjekke med modellen: y=50001,03xy = 5000 \cdot 1{,}03^x. For dobling: 50001,03x=100005000 \cdot 1{,}03^x = 10\,000, altså 1,03x=21{,}03^x = 2.

En tommelfingerregel sier at doblingstiden er omtrent 72p\displaystyle \frac{72}{p} år der pp er rentesatsen i prosent: 723=24\displaystyle \frac{72}{3} = 24 år. \checkmark

Løse likninger med systematisk prøving

Noen likninger er vanskelige å løse for hånd, men med programmering kan vi finne tilnærmede løsninger ved å prøve mange verdier systematisk.

Metoden kalles numerisk løsning eller brute force:

1. Velg et intervall der løsningen sannsynligvis befinner seg
2. Prøv mange verdier i dette intervallet
3. Finn verdien som gir den minste forskjellen mellom venstre og høyre side

Python er perfekt for dette fordi den kan prøve tusenvis av verdier på brøkdelen av et sekund.

Numerisk løsning av likninger

For å løse en likning f(x)=0f(x) = 0 numerisk, prøver vi mange verdier av xx og finner den som gir f(x)f(x) nærmest 0:

# Løs x^2 - 5 = 0 (altså finn tilnærmet verdi av sqrt(5))
beste_x = 0
minste_avvik = 1000  # Start med et stort tall

for i in range(10001):
    x = i / 10000 * 4  # Prøv verdier fra 0 til 4
    avvik = abs(x**2 - 5)
    if avvik < minste_avvik:
        minste_avvik = avvik
        beste_x = x

print(f"x ≈ {beste_x:.4f}")

Her prøver vi 10 001 verdier mellom 0 og 4, og finner den som gir x2x^2 nærmest 5. Jo flere verdier vi prøver, desto mer nøyaktig blir svaret.

✏️Eksempel: Når har sparekontoen nok penger?

Ola sparer 200 kr i måneden i en konto med 0,3 % månedlig rente (rentes rente). Han starter med 0 kr. Skriv et Python-program som finner ut:
a) Hvor mye har han etter 2 år?
b) Når har han spart 50 000 kr?

Løsning:

rente = 0.003  # 0,3 % per måned
innskudd = 200

# a) Beregn saldo etter 2 år (24 måneder)
saldo = 0
for maned in range(1, 25):
    saldo = saldo * (1 + rente) + innskudd

print(f"a) Etter 2 år: {saldo:.2f} kr")

# b) Finn når han når 50 000 kr
saldo = 0
maned = 0
while saldo < 50000:
    saldo = saldo * (1 + rente) + innskudd
    maned += 1

aar = maned // 12
rest_mnd = maned % 12
print(f"b) Han når 50 000 kr etter {maned} måneder ({aar} år og {rest_mnd} mnd)")

Resultat:

a) Etter 2 år: 4964.97 kr
b) Han når 50 000 kr etter 184 måneder (15 år og 4 mnd)

Forklaring: Hver måned legger vi først til renter på eksisterende saldo (gange med 1,0031{,}003), og deretter legger vi til det nye innskuddet på 200 kr. Med rentes rente vokser saldoen raskere og raskere.

📝Oppgave 1

En bil kjører med konstant fart 80 km/t. Skriv et Python-program som lager en tabell som viser hvor langt bilen har kjørt etter 1, 2, 3, ..., 10 timer. Bruk formelen s=vts = v \cdot t der ss er strekning, vv er fart og tt er tid.

📝Oppgave 2

En by har 25 000 innbyggere og vokser med 2 % per år. Skriv et Python-program som lager en tabell over befolkningen for hvert av de neste 10 årene.

📝Oppgave 3

Skriv et Python-program som sammenligner lineær og eksponentiell vekst:
- Lineær: Starter på 100, øker med 50 per år
- Eksponentiell: Starter på 100, øker med 10 % per år

Lag en tabell for 20 år som viser begge verdiene. Når blir den eksponentielle veksten større enn den lineære?

📝Oppgave 4

Bruk Python til å finne en tilnærmet løsning av likningen x3=100x^3 = 100 ved å prøve verdier av xx mellom 0 og 10. Finn xx med to desimalers nøyaktighet.

📝Oppgave 5

Du har 10 000 kr og vil kjøpe en mobiltelefon som koster 12 000 kr. Du sparer 400 kr per måned. Skriv et Python-program som finner ut:
a) Etter hvor mange måneder har du nok penger?
b) Hvis mobilens pris faller med 2 % per måned (den blir billigere med tiden), etter hvor mange måneder har du råd?

📝Oppgave 6
Fibonaccitallene: Tallrekken 1,1,2,3,5,8,13,21,1, 1, 2, 3, 5, 8, 13, 21, \ldots kalles Fibonacci-tallene. Hvert tall er summen av de to forrige: Fn=Fn1+Fn2F_n = F_{n-1} + F_{n-2}.

Skriv et Python-program som:
a) Skriver ut de 30 første Fibonacci-tallene
b) Beregner forholdet FnFn1\displaystyle \frac{F_n}{F_{n-1}} for hvert Fibonacci-tall og viser at forholdet nærmer seg det gylne snitt φ1,6180\varphi \approx 1{,}6180

📝Oppgave 7
Smittespredning: I starten av en epidemi er 10 personer smittet. Hver dag smitter hver syk person i gjennomsnitt 0,3 nye personer, men 10 % av de syke blir friske. Skriv et Python-program som simulerer de første 30 dagene av epidemien.

Formler per dag:
- Nye smittede: syke0,3\text{syke} \cdot 0{,}3
- Friskmeldte: syke0,10\text{syke} \cdot 0{,}10
- Oppdatering: syke=syke+nyefriske\text{syke} = \text{syke} + \text{nye} - \text{friske}

Etter hvor mange dager er det flest syke samtidig?

📝Oppgave 8
Collatz-formodningen: Ta et positivt heltall nn.
- Hvis nn er partall: del på 2
- Hvis nn er oddetall: gang med 3 og legg til 1

Gjenta. Formodningen sier at du alltid ender opp på 1, uansett startverdi.

Skriv et Python-program som:
a) Viser sekvensen for n=27n = 27 (denne er overraskende lang!)
b) Finner hvilken startverdi mellom 1 og 1000 som gir den lengste sekvensen

📝Oppgave F1
Finn feilen! Lina vil modellere eksponentiell vekst. En bakteriekoloni starter med 500 bakterier og vokser med 20%20\% per time. Hun skriver dette programmet:

antall = 500
vekst = 20

for time in range(1, 11):
    antall = antall + vekst
    print(f"Time {time}: {antall} bakterier")

Programmet viser at det er 700700 bakterier etter 1010 timer. Det riktige svaret er ca. 30963096. Finn feilen og forklar hva som gikk galt.

📝Oppgave S1
Sant eller usant?

Eksponentiell vekst betyr at en størrelse vokser med et fast beløp i hver periode.

📝Oppgave D1
Drøftingsoppgave: Matematiske modeller brukes til å forutsi alt fra befolkningsvekst til klimaendringer. Men alle modeller er forenklinger av virkeligheten. Drøft hva som kan gå galt når vi bruker en enkel eksponentiell modell til å forutsi vekst langt inn i fremtiden. Gi minst to konkrete eksempler på begrensninger.

Oppsummering

I dette kapittelet har du lært:

- Lineær vekst med kode: Å modellere jevn økning (y=ax+by = ax + b) ved å legge til et fast beløp i hvert steg i en løkke
- Eksponentiell vekst med kode: Å modellere prosentvis økning (y=abxy = a \cdot b^x) ved å gange med en vekstfaktor i hvert steg
- Lage tabeller: Å bruke løkker til å beregne og skrive ut verdier for mange tidspunkter
- Numerisk løsning: Å finne tilnærmede løsninger av likninger ved å prøve mange verdier systematisk med en datamaskin

Nøkkelbegreper


BegrepForklaring
Lineær vekstStørrelsen øker med et fast beløp for hvert tidssteg: y=ax+by = ax + b
Eksponentiell vekstStørrelsen øker med en fast prosentandel for hvert tidssteg: y=abxy = a \cdot b^x
VekstfaktorTallet vi ganger med for hvert steg; b=1+p100\displaystyle b = 1 + \frac{p}{100} for p%p\% vekst
Numerisk løsningÅ finne en tilnærmet løsning ved systematisk prøving av mange verdier
ModelleringÅ bruke matematikk og kode til å beskrive og forutsi virkelige fenomener
DoblingstidTiden det tar for en størrelse å doble seg ved eksponentiell vekst
Repetisjonsoppgaver
Din fremgang
0deloppgaver0 / 6 oppgaver

Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.