Bruk Python til å utforske renter og sparing, simulere tilfeldige forsøk, løse likninger og analysere statistikk.
Programmering som verktøy i matematikk
I de to forrige kapitlene lærte vi hva algoritmer er, og hvordan vi skriver programmer i Python. Nå skal vi bruke disse ferdighetene til å løse ekte matematiske problemer.
Datamaskinen er fantastisk til oppgaver som krever mange beregninger eller gjentakelser. Der vi mennesker fort blir slitne av å gjenta den samme utregningen 50 ganger, kan en datamaskin gjøre det på et brøkdels sekund.
I dette kapittelet skal vi se på:
- Beregne renter og sparing over tid
- Simulere tilfeldige forsøk (terningkast)
- Finne nullpunkter til funksjoner
- Beregne statistiske mål med programmer
Beregne renter med løkker
Når du setter penger i banken, får du renter. Med rentesrente tjener du renter på rentene. Vi kan bruke vekstfaktor og en løkke for å beregne hvordan en sparesum vokser over tid.
Formelen for rentesrente er:
der er startbeløpet, er rentesatsen i prosent, og er antall år.
Men med et program kan vi beregne dette steg for steg, og se hva som skjer hvert år:
startbelop = 10000
rente = 3.5 # 3,5 % rente per år
antall_ar = 10
belop = startbelop
for ar in range(1, antall_ar + 1):
rente_dette_ar = belop * rente / 100
belop = belop + rente_dette_ar
print("Etter", ar, "år:", round(belop, 2), "kr")
print("Totalvekst:", round(belop - startbelop, 2), "kr")Du setter 5 000 kr inn i en sparekonto med 4 % årlig rente. Skriv et program som viser beløpet etter hvert år i 20 år.
belop = 5000
rente = 4 # prosent
for ar in range(1, 21):
belop = belop * (1 + rente/100)
print("År", ar, ":", round(belop, 2), "kr")
print()
print("Etter 20 år har du", round(belop, 2), "kr")
print("Du startet med 5000 kr, så du har tjent", round(belop - 5000, 2), "kr i renter")Utvalgte linjer fra kjøringen:
År 1 : 5200.0 kr
År 5 : 6083.26 kr
År 10 : 7401.22 kr
År 15 : 9004.73 kr
År 20 : 10955.62 kr
Etter 20 år har du 10955.62 kr
Du startet med 5000 kr, så du har tjent 5955.62 kr i renterLegg merke til at beløpet mer enn dobles. Rentesrente-effekten gjør at veksten akselererer over tid!
Skriv et program som sammenligner to spareplaner over 15 år:
- Plan A: Du setter inn 20 000 kr med 3 % rente.
- Plan B: Du setter inn 15 000 kr med 5 % rente.
Hvilken plan gir mest penger etter 15 år?
Tegne grafer med programmering
Et av de kraftigste verktøyene i Python er muligheten til å tegne grafer. Vi bruker et tilleggsbibliotek som heter matplotlib.
Her er et program som tegner grafen til funksjonen :
import matplotlib.pyplot as plt
# Lag en liste med x-verdier
x_verdier = []
y_verdier = []
x = -5
while x <= 5:
x_verdier.append(x)
y_verdier.append(x**2 - 4)
x = x + 0.1
# Tegn grafen
plt.plot(x_verdier, y_verdier)
plt.axhline(y=0, color='black', linewidth=0.5)
plt.axvline(x=0, color='black', linewidth=0.5)
plt.grid(True)
plt.title("Grafen til f(x) = x^2 - 4")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.show()Prinsippet er enkelt: vi regner ut for mange x-verdier og lar Python tegne punktene som en sammenhengende kurve. Jo tettere x-verdiene ligger, desto jevnere blir kurven.
Simulering: Terningkast
Med programmering kan vi simulere tilfeldige forsøk tusenvis av ganger og se om resultatene samsvarer med det teorien sier.
Sannsynligheten for å kaste en sekser med en vanlig terning er .
La oss sjekke dette med et program:
import random
antall_kast = 10000
antall_seksere = 0
for i in range(antall_kast):
terning = random.randint(1, 6)
if terning == 6:
antall_seksere = antall_seksere + 1
relativ_frekvens = antall_seksere / antall_kast
print("Antall kast:", antall_kast)
print("Antall seksere:", antall_seksere)
print("Relativ frekvens:", round(relativ_frekvens, 4))
print("Teoretisk sannsynlighet:", round(1/6, 4))Eksempel på kjøring:
Antall kast: 10000
Antall seksere: 1672
Relativ frekvens: 0.1672
Teoretisk sannsynlighet: 0.1667Jo flere kast vi simulerer, desto nærmere kommer den relative frekvensen den teoretiske sannsynligheten. Dette kalles de store talls lov.
random.randint(1, 6) gir et tilfeldig heltall mellom 1 og 6, akkurat som å kaste en terning.
Relativ frekvens er andelen ganger en hendelse skjer:
Skriv et program som simulerer kast med to terninger 10 000 ganger og finner hvor ofte summen blir 7.
import random
antall_kast = 10000
antall_sju = 0
for i in range(antall_kast):
terning1 = random.randint(1, 6)
terning2 = random.randint(1, 6)
if terning1 + terning2 == 7:
antall_sju = antall_sju + 1
relativ_frekvens = antall_sju / antall_kast
print("Relativ frekvens for sum = 7:", round(relativ_frekvens, 4))
print("Teoretisk sannsynlighet:", round(6/36, 4))Forklaring:
Det finnes 6 gunstige utfall som gir sum 7: (1,6), (2,5), (3,4), (4,3), (5,2), (6,1). Totalt er det mulige utfall. Teoretisk sannsynlighet: .
Simuleringen vil gi et resultat nær 0,1667.
Brute-force: Løse likninger ved å prøve mange verdier
Noen ganger kan vi løse likninger ved å la datamaskinen prøve mange verdier og se hvilken som passer best. Denne metoden kalles brute-force (rå kraft).
La oss si vi vil løse likningen . Vi vet at svaret er , men datamaskinen kan finne det ved å prøve:
for x in range(-100, 101):
if 3 * x + 7 == 22:
print("Løsning: x =", x)For likninger med desimaltall kan vi lete etter verdien der uttrykket er nærmest null:
# Løs 2.5*x - 8.3 = 0
best_x = -100
minste_avvik = abs(2.5 * (-100) - 8.3)
x = -100
while x <= 100:
avvik = abs(2.5 * x - 8.3)
if avvik < minste_avvik:
minste_avvik = avvik
best_x = x
x = x + 0.01
print("Tilnærmet løsning: x =", round(best_x, 2))Denne metoden er ikke den mest elegante, men den fungerer for mange typer likninger!
Halveringsmetoden (biseksjonsmetoden)
Halveringsmetoden er en smartere måte å finne nullpunkter på. I stedet for å prøve alle verdier, halverer vi søkeområdet i hvert steg.
Prinsippet: Hvis og har ulikt fortegn, vet vi at det finnes et nullpunkt mellom og . Vi sjekker midtpunktet . Hvis har samme fortegn som , ligger nullpunktet mellom og . Ellers ligger det mellom og .
def f(x):
return x**2 - 7 # Vi leter etter x der x^2 = 7
a = 2 # f(2) = 4 - 7 = -3 (negativ)
b = 3 # f(3) = 9 - 7 = 2 (positiv)
for i in range(50): # 50 halveringer gir ekstremt god nøyaktighet
m = (a + b) / 2
if f(m) * f(a) > 0:
a = m # Nullpunktet er mellom m og b
else:
b = m # Nullpunktet er mellom a og m
print("Nullpunkt: x =", round(m, 10))
print("Sjekk: f(x) =", round(f(m), 15))Resultat: (som er !)
Bruk halveringsmetoden til å finne nullpunktet til i intervallet .
Vi sjekker først fortegnene: (negativ) og (positiv). Siden fortegnene er ulike, finnes det et nullpunkt i intervallet.
def f(x):
return x**3 - 2*x - 5
a = 1
b = 3
for i in range(40):
m = (a + b) / 2
if f(m) * f(a) > 0:
a = m
else:
b = m
print("Nullpunkt: x =", round(m, 6))
print("Sjekk: f(x) =", round(f(m), 10))Resultat:
Nullpunkt: x = 2.094552
Sjekk: f(x) = -0.0000000001Nullpunktet er . Vi kan verifisere: ✓
Statistikk med programmering
Python er perfekt for å beregne statistiske mål fra datasett. Her er et program som beregner gjennomsnitt, median og variasjonsbredde:
def gjennomsnitt(data):
return sum(data) / len(data)
def median(data):
sortert = sorted(data)
n = len(sortert)
if n % 2 == 1:
return sortert[n // 2] # Odde antall: midterste verdi
else:
midt1 = sortert[n // 2 - 1]
midt2 = sortert[n // 2]
return (midt1 + midt2) / 2 # Par antall: snitt av de to midterste
def variasjonsbredde(data):
return max(data) - min(data)
# Testresultater fra en prøve
resultater = [78, 85, 62, 91, 74, 88, 67, 95, 73, 80]
print("Gjennomsnitt:", gjennomsnitt(resultater))
print("Median:", median(resultater))
print("Variasjonsbredde:", variasjonsbredde(resultater))Resultat:
Gjennomsnitt: 79.3
Median: 79.0
Variasjonsbredde: 33Skriv et program som beregner den totale strømregningen for en husstand. Programmet skal ta inn antall kilowattimer (kWh) brukt, pris per kWh (i kroner), nettleie per måned og merverdiavgift (25 %).
def beregn_stromregning(kwh, pris_per_kwh, nettleie):
stromkostnad = kwh * pris_per_kwh
sum_uten_mva = stromkostnad + nettleie
mva = sum_uten_mva * 0.25
total = sum_uten_mva + mva
return stromkostnad, nettleie, mva, total
kwh = float(input("Antall kWh brukt denne måneden: "))
pris = float(input("Pris per kWh (kr): "))
nettleie = float(input("Nettleie per måned (kr): "))
strom, nett, mva, total = beregn_stromregning(kwh, pris, nettleie)
print()
print("=== Strømregning ===")
print("Strømforbruk:", kwh, "kWh x", pris, "kr =", round(strom, 2), "kr")
print("Nettleie:", round(nett, 2), "kr")
print("MVA (25 %):", round(mva, 2), "kr")
print("-------------------------")
print("TOTAL:", round(total, 2), "kr")Eksempel på kjøring:
Antall kWh brukt denne måneden: 850
Pris per kWh (kr): 1.20
Nettleie per måned (kr): 350
=== Strømregning ===
Strømforbruk: 850.0 kWh x 1.2 kr = 1020.0 kr
Nettleie: 350.0 kr
MVA (25 %): 342.5 kr
-------------------------
TOTAL: 1712.5 krSkriv et program som simulerer 10 000 terningkast og teller opp hvor mange ganger hvert øyetall (1 til 6) dukker opp. Skriv ut den relative frekvensen for hvert øyetall.
Bruk halveringsmetoden til å finne (altså løsningen til ) med minst 6 desimalers nøyaktighet. Start med intervallet .
Skriv et program som beregner gjennomsnitt og median av en liste med tall som brukeren skriver inn. Brukeren skal kunne skrive inn så mange tall de vil, og avslutte med å skrive "ferdig".
Du setter inn 500 kr i måneden på en sparekonto med 4 % årlig rente. Skriv et program som beregner hvor mye du har spart etter 10 år. (Hint: Regn med månedlig rente, der månedlig rente er årsrente delt på 12.)
Programmering åpner opp en helt ny verden av muligheter i matematikk. Når du har lært grunnleggende Python, kan du:
- Utforske tallmønstre: Finn primtall, Fibonacci-tall eller perfekte tall.
- Lage egne kalkulatorer: BMI-kalkulator, valutaomregner, eller budsjettkalkulator.
- Visualisere data: Tegn søylediagrammer og sektordiagrammer med matplotlib.
- Løse optimeringsproblemer: Finn den billigste flyreisen eller den korteste ruten.
Det viktigste er å eksperimentere og ha det gøy med å utforske!
Oppsummering
I dette kapittelet har du lært:
- Rentesrente med løkker: Gang beløpet med vekstfaktoren i hver runde — programmet gjør utregningen år for år.
- Simulering: La datamaskinen gjenta et tilfeldig forsøk tusenvis av ganger og sammenlign med teoretisk sannsynlighet.
- Halveringsmetoden: Finn nullpunkter ved å halvere intervallet der fortegnet skifter, igjen og igjen.
- Statistikk: Gjennomsnitt, median og andre mål kan beregnes automatisk for store datasett.
Nøkkelbegreper
| Begrep | Forklaring |
|---|---|
| Simulering | Datamaskin-eksperiment som etterligner virkeligheten |
| Halveringsmetoden | Numerisk metode for å finne nullpunkter |
| Brute force | Prøve mange verdier systematisk |
Husk
- Jo flere simuleringer, desto nærmere kommer resultatet den teoretiske sannsynligheten
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.
