11.3 Matematisk programmering
Løse likninger, plotte funksjoner og simulere sannsynlighet med Python.
Matematisk programmering
Nå som du kan grunnleggende Python, er det på tide å bruke programmering til å utforske matematikk! Med et program kan du gjøre tusenvis av beregninger på sekunder – noe som ville tatt timer for hånd.
I dette kapittelet skal du:
- Løse likninger med programmering
- Plotte funksjoner
- Simulere sannsynlighet med tilfeldige tall
- Finne primtall
- Beregne statistikk fra datamengder
Løse likninger med programmering
Noen likninger er vanskelige å løse analytisk (med formler), men vi kan bruke programmering til å finne løsninger numerisk – det vil si ved å prøve oss frem systematisk.
En enkel metode er systematisk prøving: Vi tester mange -verdier og ser når venstre side er omtrent lik høyre side. Vi kan gjøre dette fordi datamaskinen kan teste tusenvis av verdier på et øyeblikk.
En numerisk løsning finner en tilnærmet verdi av svaret ved å teste mange verdier. Vi sier at er en løsning av hvis er veldig liten (nær null).
Metode: Definer som venstre side minus høyre side av likningen. Søk etter -verdier der skifter fortegn (fra positiv til negativ eller omvendt). Mellom to slike verdier finnes en løsning.
Bruk Python til å finne en løsning av mellom og .
def f(x):
return x**3 - 2*x - 5
# Søk mellom 1 og 3 med liten steglengde
x = 1.0
steg = 0.001
while x <= 3.0:
if abs(f(x)) < 0.01:
print(f"Mulig løsning: x = {x:.3f}, f(x) = {f(x):.4f}")
x += stegUtskrift:
Mulig løsning: x = 2.094, f(x) = -0.0053
Mulig løsning: x = 2.095, f(x) = 0.0079Løsningen er omtrent .
Vi kan sjekke: \checkmark
Bruk Python til å finne løsningene av ved å teste -verdier fra til med steglengde .
Skriv programmet og finn de to løsningene.
Sjekk svaret med abc-formelen: .
Plotte funksjoner
En av de kraftigste tingene vi kan gjøre med programmering er å tegne grafer. Vi beregner mange funksjonsverdier og tegner dem som punkter.
I Python kan vi lage en enkel "tekst-graf" uten å installere ekstra biblioteker, eller vi kan bruke biblioteket matplotlib for fine grafer.
Her viser vi en enkel måte å lage en graf med tegn i terminalen:
Lag en tekstbasert graf av for fra til .
# Enkel tekstgraf av f(x) = x^2
for x in range(-5, 6):
y = x**2
stolper = "*" * y
print(f"x = {x:3d} | {stolper} ({y})")Utskrift:
x = -5 | ************************* (25)
x = -4 | **************** (16)
x = -3 | ********* (9)
x = -2 | **** (4)
x = -1 | * (1)
x = 0 | (0)
x = 1 | * (1)
x = 2 | **** (4)
x = 3 | ********* (9)
x = 4 | **************** (16)
x = 5 | ************************* (25)Vi kan tydelig se parabelformen: grafen er symmetrisk om og stiger raskt for store .
For en finere graf kan du bruke matplotlib:
import matplotlib.pyplot as plt
x_verdier = []
y_verdier = []
for i in range(-50, 51):
x = i / 10
x_verdier.append(x)
y_verdier.append(x**2)
plt.plot(x_verdier, y_verdier)
plt.xlabel("x")
plt.ylabel("f(x)")
plt.title("f(x) = x²")
plt.grid(True)
plt.show()Skriv et Python-program som lager en tekstgraf (med stjerner) av funksjonen for heltallsverdier av fra til . Beregn funksjonsverdien for hver og vis resultatet visuelt.
Simulere sannsynlighet
En av de mest spennende bruksområdene for programmering i matematikk er å simulere tilfeldige forsøk. I stedet for å beregne sannsynlighet med formler, kan vi la datamaskinen gjenta forsøket tusenvis av ganger og telle utfallene.
Denne metoden kalles Monte Carlo-simulering, oppkalt etter kasinoet i Monte Carlo.
I Python bruker vi random-modulen for tilfeldige tall:
import random
terning = random.randint(1, 6) # Tilfeldig heltall fra 1 til 6
mynt = random.choice(["kron", "mynt"]) # Tilfeldig valgJo flere forsøk vi gjør, desto nærmere kommer vi den eksakte sannsynligheten. Med 10 000 forsøk får vi vanligvis et godt estimat.
Bruk Python til å simulere 10 000 kast med to terninger og finn sannsynligheten for å få summen 7.
import random
antall_forsok = 10000
antall_syv = 0
for i in range(antall_forsok):
terning1 = random.randint(1, 6)
terning2 = random.randint(1, 6)
if terning1 + terning2 == 7:
antall_syv += 1
sannsynlighet = antall_syv / antall_forsok
print(f"Antall ganger sum = 7: {antall_syv}")
print(f"Estimert sannsynlighet: {sannsynlighet:.4f}")Typisk utskrift:
Antall ganger sum = 7: 1674
Estimert sannsynlighet: 0.1674Eksakt sannsynlighet: Det er 6 gunstige utfall for sum 7: . Totalt utfall.
Simuleringen gir et resultat nær den eksakte verdien! \checkmark
Skriv et Python-program som simulerer 10 000 myntkast og finner sannsynligheten for å få "kron".
Skriv programmet og kjør det.
Hva er den eksakte (teoretiske) sannsynligheten? Sammenlign med simuleringen.
Skriv et Python-program som simulerer 10 000 kast med to terninger og finner sannsynligheten for å få minst én sekser.
Finne primtall med programmering
Et primtall er et tall større enn 1 som bare er delelig med 1 og seg selv. De første primtallene er:
Å finne store primtall er viktig i kryptografi (sikker kommunikasjon på nett). Med programmering kan vi raskt sjekke om tall er primtall og finne alle primtall opp til en gitt grense.
Skriv et Python-program som sjekker om et gitt tall er et primtall.
import math
tall = int(input("Skriv inn et tall: "))
if tall < 2:
print(f"{tall} er ikke et primtall")
else:
er_primtall = True
for i in range(2, int(math.sqrt(tall)) + 1):
if tall % i == 0:
er_primtall = False
break
if er_primtall:
print(f"{tall} er et primtall")
else:
print(f"{tall} er ikke et primtall")Triks: Vi trenger bare å sjekke divisorer opp til , fordi hvis og begge er større enn , ville .
For : , så vi sjekker 2, 3, 4, 5, 6, 7, 8, 9. Ingen deler 97, altså er 97 et primtall.
Skriv et Python-program som finner og skriver ut alle primtall fra 2 til 100.
Skriv programmet.
Hvor mange primtall er det mellom 2 og 100?
Beregne statistikk med programmering
Når vi har store datamengder, er programmering uvurderlig for å beregne statistiske mål. Med Python kan vi enkelt finne gjennomsnitt, median, typetall og standardavvik.
Gjennomsnitt (middelverdien):
Median (den midterste verdien i sortert rekkefølge):
- Hvis er oddetall: medianen er det midterste elementet
- Hvis er partall: medianen er gjennomsnittet av de to midterste
Typetall (den verdien som forekommer oftest):
- Telles ved å gå gjennom listen og finne hyppigste verdi
Variasjonsbredde: Største verdi minus minste verdi
Skriv et Python-program som beregner gjennomsnitt, median og variasjonsbredde for karakterene .
karakterer = [4, 5, 3, 6, 5, 4, 5, 3, 4, 5]
# Gjennomsnitt
gjennomsnitt = sum(karakterer) / len(karakterer)
# Sorterer for median
sortert = sorted(karakterer)
n = len(sortert)
if n % 2 == 1:
median = sortert[n // 2]
else:
median = (sortert[n // 2 - 1] + sortert[n // 2]) / 2
# Variasjonsbredde
variasjonsbredde = max(karakterer) - min(karakterer)
# Typetall (enkel metode)
typetall = max(set(karakterer), key=karakterer.count)
print(f"Karakterer: {karakterer}")
print(f"Sortert: {sortert}")
print(f"Gjennomsnitt: {gjennomsnitt:.1f}")
print(f"Median: {median}")
print(f"Typetall: {typetall}")
print(f"Variasjonsbredde: {variasjonsbredde}")Utskrift:
Karakterer: [4, 5, 3, 6, 5, 4, 5, 3, 4, 5]
Sortert: [3, 3, 4, 4, 4, 5, 5, 5, 5, 6]
Gjennomsnitt: 4.4
Median: 4.5
Typetall: 5
Variasjonsbredde: 3Sjekk: Gjennomsnitt \checkmark
Median: De to midterste er 4 og 5, median \checkmark
Brukerne av en app har gitt disse vurderingene (1–5 stjerner): . Skriv et Python-program som beregner gjennomsnitt, median, typetall og variasjonsbredde.
Oppsummering
I dette kapittelet har du lært:
- Numerisk likningsløsning: Teste mange -verdier systematisk for å finne der
- Plotte funksjoner: Lage tekstgrafer med Python, eventuelt bruke matplotlib for fine grafer
- Monte Carlo-simulering: Bruke tilfeldige tall til å estimere sannsynligheter
- Primtall: Sjekke om tall er primtall ved å teste divisorer opp til
- Statistikk: Beregne gjennomsnitt, median, typetall og variasjonsbredde med Python
Nøkkelbegreper
| Begrep | Forklaring |
|---|---|
| Numerisk løsning | Tilnærmet løsning funnet ved systematisk prøving |
| Monte Carlo-simulering | Estimere resultater ved hjelp av tilfeldige forsøk |
| Primtall | Tall > 1 som bare er delelig med 1 og seg selv |
| Gjennomsnitt | Summen av alle verdier delt på antall verdier |
| Median | Den midterste verdien i en sortert datamengde |
| Typetall | Den verdien som forekommer oftest |
| Variasjonsbredde | Forskjellen mellom største og minste verdi |
Du kaster tre terninger. Bruk Python til å simulere 10 000 forsøk og estimer sannsynligheten for at summen er nøyaktig 10.
Skriv programmet og finn den estimerte sannsynligheten.
Den eksakte sannsynligheten er . Sammenlign med simuleringen din.
Skriv et Python-program som bruker Monte Carlo-simulering til å estimere verdien av . Metoden: Generer tilfeldige punkter der og . Tell hvor mange som havner innenfor kvartssirkelen . Da er .
Skriv programmet med 100 000 tilfeldige punkter.
Kjør programmet flere ganger. Hvor nær kommer du?
Forklar hvorfor denne metoden fungerer.
import random
antall_forsok = 10000
antall_gunstige = 0
for i in range(antall_forsok):
terning1 = random.randint(1, 6)
terning2 = random.randint(1, 6)
if terning1 + terning2 == 7:
antall_gunstige = antall_gunstige + 1
sannsynlighet = antall_gunstige / antall_forsok
print(f"Estimert sannsynlighet: {sannsynlighet}")
print(f"Eksakt svar: {1/6}")Maja er fornøyd — programmet kjører uten feil og gir ca. . Men vennen hennes Liam skriver nesten samme program, bare med denne forskjellen:
terning1 = random.randint(0, 6)
terning2 = random.randint(0, 6)Liam får et annet (feil) svar. Finn feilen og forklar hva som går galt.
En Monte Carlo-simulering gir alltid eksakt svar.
a) Gi et eksempel på en likning som er enkel å løse eksakt, og en som er vanskelig å løse eksakt.
b) Diskuter: Når er det greit å bruke et tilnærmet (numerisk) svar i stedet for et eksakt svar? Finnes det situasjoner der et tilnærmet svar ikke er godt nok?
c) Hvorfor tror du programmering og numeriske metoder har blitt så viktige i moderne matematikk og vitenskap?
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.