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 lagar vi ofte modellar — forenkla skildringar av verkelegheita. Ein modell kan til dømes skildre korleis ein folkesetnad veks, korleis temperaturen endrar seg, eller kor mykje pengar du sparer over tid.

Med programmering kan vi gjere modellane levande: vi kan rekne ut verdiar for mange tidspunkt, finne når noko skjer, og skrive ut tabellar som viser utviklinga.

I dette kapittelet skal du:

- Modellere lineær vekst (jamn auke) med kode
- Modellere eksponentiell vekst (prosentvis auke) med kode
- Lage tabellar som viser utviklinga over tid
- Bruke programmering til å løyse likningar ved systematisk prøving
- Utforske matematiske samanhengar med kode

Lineær vekst
Ved lineær vekst aukar (eller minkar) ein storleik med eit fast beløp for kvart tidssteg. Den matematiske modellen er:

y=ax+by = ax + b

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

I Python kan vi modellere dette med ei 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 aukar verdien med 50 kr for kvar månad — ei jamn auke.

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

Ola set inn 500 kr i sparebøssa kvar månad. Han har 2000 kr frå før. Skriv eit Python-program som viser kor mykje Ola har etter kvar månad i eitt år. Kor lang tid tek det før han har 10 000 kr?

Løysing:

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øyser 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 aukar (eller minkar) ein storleik med ein fast prosentdel for kvart tidssteg. Den matematiske modellen er:

y=abxy = a \cdot b^x

der aa er startverdien og bb er vekstfaktoren.

- Viss veksten er p%p\%, er vekstfaktoren b=1+p100\displaystyle b = 1 + \frac{p}{100}
- Vekst: b>1b > 1 (t.d. b=1,05b = 1{,}05 for 5 % auke)
- Reduksjon: b<1b < 1 (t.d. 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 gangar vi med vekstfaktoren i kvart steg — verdien veks raskare og raskare.

✏️Eksempel: Bankinnskot med rentes rente

Kari set 5000 kr i banken med 3 % årleg rente (rentes rente). Skriv eit program som viser saldoen kvart år i 20 år. Kor lang tid tek det før pengane er dobla?

Løysing:

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.

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

Løyse likningar med systematisk prøving

Nokre likningar er vanskelege å løyse for hand, men med programmering kan vi finne tilnærma løysingar ved å prøve mange verdiar systematisk.

Metoden vert kalla numerisk løysing eller brute force:

1. Vel eit intervall der løysinga sannsynlegvis finst
2. Prøv mange verdiar i dette intervallet
3. Finn verdien som gjev den minste skilnaden mellom venstre og høgre side

Python er perfekt for dette fordi han kan prøve tusenvis av verdiar på brøkdelen av eit sekund.

Numerisk løysing av likningar

For å løyse ei likning f(x)=0f(x) = 0 numerisk, prøver vi mange verdiar av xx og finn den som gjev f(x)f(x) nærast 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 verdiar mellom 0 og 4, og finn den som gjev x2x^2 nærast 5. Jo fleire verdiar vi prøver, desto meir nøyaktig vert svaret.

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

Ola sparer 200 kr i månaden i ein konto med 0,3 % månadleg rente (rentes rente). Han startar med 0 kr. Skriv eit Python-program som finn ut:
a) Kor mykje har han etter 2 år?
b) Når har han spart 50 000 kr?

Løysing:

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: Kvar månad legg vi først til renter på eksisterande saldo (gange med 1,0031{,}003), og deretter legg vi til det nye innskotet på 200 kr. Med rentes rente veks saldoen raskare og raskare.

📝Oppgave 1

Ein bil køyrer med konstant fart 80 km/t. Skriv eit Python-program som lagar ein tabell som viser kor langt bilen har køyrt etter 1, 2, 3, ..., 10 timar. Bruk formelen s=vts = v \cdot t der ss er strekning, vv er fart og tt er tid.

📝Oppgave 2

Ein by har 25 000 innbyggjarar og veks med 2 % per år. Skriv eit Python-program som lagar ein tabell over folkesetnaden for kvart av dei neste 10 åra.

📝Oppgave 3

Skriv eit Python-program som samanliknar lineær og eksponentiell vekst:
- Lineær: Startar på 100, aukar med 50 per år
- Eksponentiell: Startar på 100, aukar med 10 % per år

Lag ein tabell for 20 år som viser begge verdiane. Når vert den eksponentielle veksten større enn den lineære?

📝Oppgave 4

Bruk Python til å finne ei tilnærma løysing av likninga x3=100x^3 = 100 ved å prøve verdiar av xx mellom 0 og 10. Finn xx med to desimalars nøyaktigheit.

📝Oppgave 5

Du har 10 000 kr og vil kjøpe ein mobiltelefon som kostar 12 000 kr. Du sparer 400 kr per månad. Skriv eit Python-program som finn ut:
a) Etter kor mange månader har du nok pengar?
b) Viss mobilens pris fell med 2 % per månad (han vert billigare med tida), etter kor mange månader har du råd?

📝Oppgave 6
Fibonaccitala: Talrekkja 1,1,2,3,5,8,13,21,1, 1, 2, 3, 5, 8, 13, 21, \ldots vert kalla Fibonacci-tala. Kvart tal er summen av dei to førre: Fn=Fn1+Fn2F_n = F_{n-1} + F_{n-2}.

Skriv eit Python-program som:
a) Skriv ut dei 30 første Fibonacci-tala
b) Reknar ut forholdet FnFn1\displaystyle \frac{F_n}{F_{n-1}} for kvart Fibonacci-tal og viser at forholdet nærmar seg det gylne snittet φ1,6180\varphi \approx 1{,}6180

📝Oppgave 7
Smittespreiing: I starten av ein epidemi er 10 personar smitta. Kvar dag smittar kvar sjuk person i gjennomsnitt 0,3 nye personar, men 10 % av dei sjuke vert friske. Skriv eit Python-program som simulerer dei første 30 dagane av epidemien.

Formlar per dag:
- Nye smitta: sjuke0,3\text{sjuke} \cdot 0{,}3
- Friskmelde: sjuke0,10\text{sjuke} \cdot 0{,}10
- Oppdatering: sjuke=sjuke+nyefriske\text{sjuke} = \text{sjuke} + \text{nye} - \text{friske}

Etter kor mange dagar er det flest sjuke samtidig?

📝Oppgave 8
Collatz-formodninga: Ta eit positivt heiltal nn.
- Viss nn er partal: del på 2
- Viss nn er oddetal: gang med 3 og legg til 1

Gjenta. Formodninga seier at du alltid endar opp på 1, uansett startverdi.

Skriv eit Python-program som:
a) Viser sekvensen for n=27n = 27 (denne er overraskande lang!)
b) Finn kva startverdi mellom 1 og 1000 som gjev den lengste sekvensen

📝Oppgave F1
Finn feilen! Lina vil modellere eksponentiell vekst. Ein bakteriekoloni startar med 500 bakteriar og veks med 20%20\% per time. Ho skriv 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 bakteriar etter 1010 timar. Det rette svaret er ca. 30963096. Finn feilen og forklar kva som gjekk gale.

📝Oppgave S1
Sant eller usant?

Eksponentiell vekst tyder at ein storleik veks med eit fast beløp i kvar periode.

📝Oppgave D1
Drøftingsoppgåve: Matematiske modellar vert brukte til å forutseie alt frå folkesetnadsvekst til klimaendringar. Men alle modellar er forenklingar av verkelegheita. Drøft kva som kan gå gale når vi bruker ein enkel eksponentiell modell til å forutseie vekst langt inn i framtida. Gje minst to konkrete døme på avgrensingar.

Oppsummering

I dette kapittelet har du lært:

- Lineær vekst med kode: Å modellere jamn auke (y=ax+by = ax + b) ved å leggje til eit fast beløp i kvart steg i ei løkke
- Eksponentiell vekst med kode: Å modellere prosentvis auke (y=abxy = a \cdot b^x) ved å gange med ein vekstfaktor i kvart steg
- Lage tabellar: Å bruke løkker til å rekne ut og skrive ut verdiar for mange tidspunkt
- Numerisk løysing: Å finne tilnærma løysingar av likningar ved å prøve mange verdiar systematisk med ein datamaskin

Nøkkelomgrep


OmgrepForklaring
Lineær vekstStorleiken aukar med eit fast beløp for kvart tidssteg: y=ax+by = ax + b
Eksponentiell vekstStorleiken aukar med ein fast prosentdel for kvart tidssteg: y=abxy = a \cdot b^x
VekstfaktorTalet vi gangar med for kvart steg; b=1+p100\displaystyle b = 1 + \frac{p}{100} for p%p\% vekst
Numerisk løysingÅ finne ei tilnærma løysing ved systematisk prøving av mange verdiar
ModelleringÅ bruke matematikk og kode til å skildre og forutseie verkelege fenomen
DoblingstidTida det tek for ein storleik å doble seg ved eksponentiell vekst
Repetisjonsoppgåver
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.