11.3 Matematisk programmering
Løse likninger, plotte funksjoner og simulere sannsynlighet med Python.
Nar Python moter matematikk
Na som du kan grunnleggende Python, er det pa tide a bruke det til noe virkelig spennende: a utforske matematikk! Med et program kan du gjore tusenvis av beregninger pa sekunder -- noe som ville tatt timer for hand.
Tenk deg at du vil finne losningen av en vanskelig likning, tegne grafen til en funksjon, simulere 10 000 terningkast eller finne alle primtall opp til 100. Alt dette er et lite Python-program unna. La oss dykke inn!
Lose likninger numerisk -- prove og feile med stil
Noen likninger er vanskelige a lose analytisk med formler, men vi kan bruke programmering til a finne losninger numerisk. Det betyr at vi prover oss frem systematisk.
En numerisk losning finner en tilnarmet verdi av svaret ved a teste mange verdier. Vi definerer som venstre side minus hoyre side av likningen, og leter etter -verdier der er veldig nar null -- eller skifter fortegn.
La oss prove med likningen . Vi soker mellom og :
def f(x):
return x**3 - 2*x - 5
x = 1.0
steg = 0.001
while x <= 3.0:
if abs(f(x)) < 0.01:
print(f"Mulig losning: x = {x:.3f}, f(x) = {f(x):.4f}")
x += stegProgrammet finner at losningen er omtrent . Vi kan sjekke: . Stemmer!
Denne metoden fungerer fordi datamaskinen kan teste tusenvis av verdier pa et oyeblikk. For likningen finner vi losningene og , som stemmer med abc-formelen: .
Plotte funksjoner -- se matematikken
En av de kraftigste tingene vi kan gjore med programmering er a tegne grafer. Vi kan lage en enkel tekstgraf rett i terminalen:
for x in range(-5, 6):
y = x**2
stolper = "*" * y
print(f"x = {x:3d} | {stolper} ({y})")Dette tegner med stjerner. Du kan tydelig se parabelformen: grafen er symmetrisk om og stiger raskt for store .
For finere grafer kan du bruke biblioteket 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^2")
plt.grid(True)
plt.show()Med matplotlib kan du ogsa plotte flere funksjoner i samme graf, legge til rutenett og aksetitler, og eksportere grafen som bilde. Det er et uvurderlig verktoy for a visualisere matematikk!
Monte Carlo-simulering -- terningkast pa datamaskinen
En av de mest spennende bruksomradene for programmering i matematikk er a simulere tilfeldige forsok. I stedet for a beregne sannsynlighet med formler, kan vi la datamaskinen gjenta forsoket tusenvis av ganger og telle utfallene. Denne metoden kalles Monte Carlo-simulering, oppkalt etter det berommte kasinoet i Monte Carlo.
Prinsippet er enkelt:
Jo flere forsok vi gjor, desto narmere kommer vi den eksakte sannsynligheten. Med 10 000 forsok far vi vanligvis et godt estimat.
I Python bruker vi random-modulen:
import random
terning = random.randint(1, 6) # Tilfeldig heltall fra 1 til 6
mynt = random.choice(["kron", "mynt"]) # Tilfeldig valgLa oss simulere 10 000 kast med to terninger og finne sannsynligheten for a fa 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"Estimert sannsynlighet: {sannsynlighet:.4f}")Typisk utskrift: ca. . Den eksakte sannsynligheten er (det er 6 gunstige utfall: av totalt mulige). Simuleringen stemmer!
Du kan ogsa bruke Monte Carlo til a estimere ! Generer tilfeldige punkter i et enhetskvadrat og tell hvor mange som havner innenfor kvartsirkelen . Da er , fordi arealet av kvartsirkelen er .
Primtallsjakt med Python
Et primtall er et tall storre enn 1 som bare er delelig med 1 og seg selv. De forste primtallene er A finne store primtall er viktig i kryptografi -- det er primtall som gor at nettbank og passord er trygge!
Her er et smart triks: for a sjekke om er et primtall, trenger vi bare a teste divisorer opp til . Hvorfor? Fordi hvis og begge er storre enn , ville .
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")For : , sa vi sjekker bare 2, 3, 4, 5, 6, 7, 8, 9. Ingen deler 97, sa 97 er et primtall! Det er 25 primtall mellom 2 og 100.
Statistikk med Python
Nar vi har store datamengder, er programmering uvurderlig for a beregne statistiske mal. De viktigste er:
- Gjennomsnitt:
- Median: Den midterste verdien i sortert rekkefolgje (for oddetall : element nr. ; for partall : gjennomsnittet av de to midterste)
- Typetall: Verdien som forekommer oftest
- Variasjonsbredde: Storste verdi minus minste verdi
karakterer = [4, 5, 3, 6, 5, 4, 5, 3, 4, 6]
sortert = sorted(karakterer)
n = len(sortert)
gjennomsnitt = sum(karakterer) / n
if n % 2 == 1:
median = sortert[n // 2]
else:
median = (sortert[n // 2 - 1] + sortert[n // 2]) / 2
typetall = max(set(karakterer), key=karakterer.count)
variasjonsbredde = max(karakterer) - min(karakterer)
print(f"Gjennomsnitt: {gjennomsnitt:.1f}")
print(f"Median: {median}")
print(f"Typetall: {typetall}")
print(f"Variasjonsbredde: {variasjonsbredde}")Resultatet: Gjennomsnitt , median , typetall (og 5, begge forekommer 3 ganger), variasjonsbredde .
Oppsummering
I dette kapittelet har du sett hvor kraftig kombinasjonen av Python og matematikk er:
- Numerisk likningslosning: Vi kan teste mange -verdier systematisk for a finne der , selv for likninger som er vanskelige a lose med formler.
- Plotte funksjoner: Vi kan lage tekstgrafer med stjerner eller bruke matplotlib for profesjonelle grafer som visualiserer matematiske sammenhenger.
- Monte Carlo-simulering: Ved a bruke tilfeldige tall kan vi estimere sannsynligheter gjennom mange forsok. Jo flere forsok, desto bedre estimat. Formelen er .
- Primtall: Vi kan sjekke om tall er primtall ved a teste divisorer opp til . Det er 25 primtall mellom 2 og 100.
- Statistikk: Python gjor det enkelt a beregne gjennomsnitt, median, typetall og variasjonsbredde for store datamengder med funksjoner som sum(), len(), sorted(), min() og max().
Programmering er ikke bare et hjelpemiddel -- det er en mate a tenke pa. Nar du larer a programmere, larer du a bryte ned problemer i sma steg, tenke logisk og automatisere losninger. Det er ferdigheter du far bruk for langt utover matematikktimene!
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.