Bruk Python til å utforske renter og sparing, simulere tilfeldige forsøk, løse likninger og analysere statistikk.
Programmering som verktøy i matematikk
I dei to førre kapitla lærte vi kva algoritmar er, og korleis vi skriv program i Python. No skal vi bruke desse ferdigheitene til å løyse ekte matematiske problem.
Datamaskina er fantastisk til oppgåver som krev mange berekningar eller gjentagingar. Der vi menneske fort blir trætte av å gjenta den same utrekninga 50 gonger, kan ein datamaskin gjere det på eit brøkdels sekund.
I dette kapitlet skal vi sjå på:
- Berekne renter og sparing over tid
- Simulere tilfeldige forsøk (terningkast)
- Finne nullpunkt til funksjonar
- Berekne statistiske mål med program
Berekne renter med løkker
Når du set pengar i banken, får du renter. Med rentesrente tener du renter på rentene. Vi kan bruke vekstfaktor og ei løkke for å berekne korleis ein sparesum veks over tid.
Formelen for rentesrente er:
der er startbeløpet, er rentesatsen i prosent, og er antalet år.
Men med eit program kan vi berekne dette steg for steg, og sjå kva som skjer kvart å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 set 5 000 kr inn i ein sparekonto med 4 % årleg rente. Skriv eit program som viser beløpet etter kvart å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 starta med 5000 kr, så du har tjent", round(belop - 5000, 2), "kr i renter")Utvalde linjer frå kjøringa:
Å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 starta med 5000 kr, så du har tjent 5955.62 kr i renterLegg merke til at beløpet meir enn dobler seg. Rentesrente-effekten gjer at veksten akselererer over tid!
Skriv eit program som samanliknar to spareplaner over 15 år:
- Plan A: Du set inn 20 000 kr med 3 % rente.
- Plan B: Du set inn 15 000 kr med 5 % rente.
Kvilken plan gir mest pengar etter 15 år?
Teikne grafar med programmering
Eitt av dei kraftigaste verktøya i Python er moglegheita til å teikne grafar. Vi bruker eit tilleggsbibliotek som heiter matplotlib.
Her er eit program som teiknar grafen til funksjonen :
import matplotlib.pyplot as plt
# Lag ei liste med x-verdiar
x_verdier = []
y_verdier = []
x = -5
while x <= 5:
x_verdier.append(x)
y_verdier.append(x**2 - 4)
x = x + 0.1
# Teikn 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 reknar ut for mange x-verdiar og let Python teikne punkta som ei samanhengande kurve. Jo tettare x-verdiane ligg, desto jamnar blir kurven.
Simulering: Terningkast
Med programmering kan vi simulere tilfeldige forsøk tusenvis av gonger og sjå om resultata samsvarar med det teorien seier.
Sannsynligheten for å kaste ein seksar med ein vanleg terning er .
La oss sjekke dette med eit 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 sannsynlegheit:", round(1/6, 4))Døme på kjøring:
Antall kast: 10000
Antall seksere: 1672
Relativ frekvens: 0.1672
Teoretisk sannsynlegheit: 0.1667Jo fleire kast vi simulerer, desto næmare kjem den relative frekvensen den teoretiske sannsynlegheita. Dette kallast dei store tals lov.
random.randint(1, 6) gir eit tilfeldig heiltal mellom 1 og 6, akkurat som å kaste ein terning.
Relativ frekvens er andelen gonger ei hendelse skjer:
Skriv eit program som simulerer kast med to terningar 10 000 gonger og finn kor 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 sannsynlegheit:", round(6/36, 4))Forklaring:
Det finst 6 gunstige utfall som gir sum 7: (1,6), (2,5), (3,4), (4,3), (5,2), (6,1). Totalt er det moglegje utfall. Teoretisk sannsynlegheit: .
Simuleringen vil gi eit resultat nær 0,1667.
Brute-force: Løyse likningar ved å prøve mange verdiar
Nokon gonger kan vi løyse likningar ved å la datamaskina prøve mange verdiar og sjå kva som passar best. Denne metoden kallast brute-force (rå kraft).
La oss seia vi vil løyse likninga . Vi veit at svaret er , men datamaskina kan finne det ved å prøve:
for x in range(-100, 101):
if 3 * x + 7 == 22:
print("Løysing: x =", x)For likningar med desimaltal kan vi leite etter verdien der uttrykket er nærmast null:
# Løys 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ærma løysing: x =", round(best_x, 2))Denna metoden er ikkje den mest elegant, men ho fungerer for mange typar likningar!
Halveringsmetoden (biseksjonsmetoden)
Halveringsmetoden er ein smartare måte å finne nullpunkt på. I staden for å prøve alle verdiar, halverer vi søkeområdet i kvart steg.
Prinsippet: Viss og har ulikt forteikn, veit vi at det finst eit nullpunkt mellom og . Vi sjekkar midtpunktet . Viss har same forteikn som , ligg nullpunktet mellom og . Elles ligg det mellom og .
def f(x):
return x**2 - 7 # Vi leiter 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 halveringar gir ekstremt god nøyaktigheit
m = (a + b) / 2
if f(m) * f(a) > 0:
a = m # Nullpunktet ligg mellom m og b
else:
b = m # Nullpunktet ligg 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 sjekkar først forteikna: (negativ) og (positiv). Sidan forteikna er ulike, finst det eit 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 å berekne statistiske mål frå datasett. Her er eit program som bereknar 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 dei to midterste
def variasjonsbredde(data):
return max(data) - min(data)
# Testresultat frå ein prøve
resultat = [78, 85, 62, 91, 74, 88, 67, 95, 73, 80]
print("Gjennomsnitt:", gjennomsnitt(resultat))
print("Median:", median(resultat))
print("Variasjonsbredde:", variasjonsbredde(resultat))Resultat:
Gjennomsnitt: 79.3
Median: 79.0
Variasjonsbredde: 33Skriv eit program som bereknar den totale straumregningen for ein husstand. Programmet skal ta inn antall kilowattimar (kWh) brukt, pris per kWh (i kroner), nettleige per månad 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ånaden: "))
pris = float(input("Pris per kWh (kr): "))
nettleie = float(input("Nettleige per månad (kr): "))
strom, nett, mva, total = beregn_stromregning(kwh, pris, nettleie)
print()
print("=== Straumregning ===")
print("Straumforbruk:", kwh, "kWh x", pris, "kr =", round(strom, 2), "kr")
print("Nettleige:", round(nett, 2), "kr")
print("MVA (25 %):", round(mva, 2), "kr")
print("-------------------------")
print("TOTAL:", round(total, 2), "kr")Døme på kjøring:
Antall kWh brukt denne månaden: 850
Pris per kWh (kr): 1.20
Nettleige per månad (kr): 350
=== Straumregning ===
Straumforbruk: 850.0 kWh x 1.2 kr = 1020.0 kr
Nettleige: 350.0 kr
MVA (25 %): 342.5 kr
-------------------------
TOTAL: 1712.5 krSkriv eit program som simulerer 10 000 terningkast og tel upp kor mange gonger kvart øyetal (1 til 6) dukkar opp. Skriv ut den relative frekvensen for kvart øyetal.
Bruk halveringsmetoden til å finne (altså løysinga til ) med minst 6 desimalars nøyaktigheit. Start med intervallet .
Skriv eit program som bereknar gjennomsnitt og median av ei liste med tal som brukaren skriv inn. Brukaren skal kunne skrive inn så mange tal dei vil, og avslutta med å skrive "ferdig".
Du set inn 500 kr i månaden på ein sparekonto med 4 % årleg rente. Skriv eit program som bereknar kor mykje du har spart etter 10 år. (Hint: Rekn med månadleg rente, der månadleg rente er årsrente delt på 12.)
Programmering opnar opp ein heilt ny verden av moglegheiter i matematikk. Når du har lært grunnleggjande Python, kan du:
- Utforske talsmønstre: Finn primtal, Fibonacci-tal eller perfekte tal.
- Lage egne kalkulatorar: BMI-kalkulator, valutaomregnar, eller budsjettalkulator.
- Visualisere data: Teikn søylediagram og sektordiagram med matplotlib.
- Løyse optimeringsproblem: Finn den billegaste flyreisa eller den kortaste ruta.
Det viktigaste er å eksperimentere og ha det gøy med å utforske!
Oppsummering
I dette kapittelet har du lært:
- Rentas rente med løkker: Gang beløpet med vekstfaktoren i kvar runde — programmet gjer utrekninga år for år.
- Simulering: La datamaskinen gjenta eit tilfeldig forsøk tusenvis av gonger og samanlikn med teoretisk sannsyn.
- Halveringsmetoden: Finn nullpunkt ved å halvere intervallet der fortegnet skiftar, igjen og igjen.
- Statistikk: Gjennomsnitt, median og andre mål kan berast automatisk for store datasett.
Nøkkelbegrep
| Omgrep | Forklaring |
|---|---|
| Simulering | Datamaskinkjøring som etterliker verkeligheten |
| Halveringsmetoden | Numerisk metode for å finna nullpunkt |
| Brute force | Prøve mange verdiar systematisk |
Husk
- Jo fleire simuleringer, desto nærare kjem resultatet den teoretiske sannsyn
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.
