11.3 Matematisk programmering
Løse likninger, plotte funksjoner og simulere sannsynlighet med Python.
Matematisk programmering
No som du kan grunnleggjande Python, er det på tid å bruka programmering til å utforska matematikk! Med eit program kan du gjera tusenvis av berekningar på sekund – noko som ville tatt timar for hand.
I dette kapitlet skal du:
- Løysa likningar med programmering
- Plotta funksjonar
- Simulera sannsynlegheit med tilfeldig tal
- Finna primtal
- Berekna statistikk frå datamengder
Løysa likningar med programmering
Nokon likningar er vanskelege å løysa analytisk (med formlar), men vi kan bruka programmering til å finna løysingar numerisk – det vil seia ved å prøva oss fram systematisk.
Ein enkel metode er systematisk prøving: Vi testar mange -verdiar og ser når venstre side er omtrent lik høgre side. Vi kan gjera dette fordi datamaskina kan testa tusenvis av verdiar på eit augeblikk.
Ein numerisk løysing finn ein tilnærma verdi av svaret ved å testa mange verdiar. Vi seier at er ein løysing av viss er veldig liten (nær null).
Metode: Definer som venstre side minus høgre side av likninga. Søk etter -verdiar der skiftar forteikn (frå positiv til negativ eller omvendt). Mellom to slike verdiar finst ein løysing.
Bruk Python til å finna ein løysing av mellom og .
def f(x):
return x**3 - 2*x - 5
# Søk mellom 1 og 3 med liten steglengd
x = 1.0
steg = 0.001
while x <= 3.0:
if abs(f(x)) < 0.01:
print(f"Mogleg løysing: x = {x:.3f}, f(x) = {f(x):.4f}")
x += stegUtskrift:
Mogleg løysing: x = 2.094, f(x) = -0.0053
Mogleg løysing: x = 2.095, f(x) = 0.0079Løysinga er omtrent .
Vi kan sjekka: \checkmark
Bruk Python til å finna løysingane av ved å testa -verdiar frå til med steglengd .
Skriv programmet og finn dei to løysingane.
Sjekk svaret med abc-formelen: .
Plotta funksjonar
Ein av dei kraftigaste tinga vi kan gjera med programmering er å teikna grafar. Vi bereknar mange funksjonsverdiar og teiknar dei som punkt.
I Python kan vi laga ein enkel "tekst-graf" utan å installera ekstra bibliotek, eller vi kan bruka biblioteket matplotlib for fine grafar.
Her viser vi ein enkel måte å laga ein graf med teikn i terminalen:
Lag ein tekstbasert graf av for frå til .
# Enkel tekstgraf av f(x) = x^2
for x in range(-5, 6):
y = x**2
stolpar = "*" * y
print(f"x = {x:3d} | {stolpar} ({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 tydeleg sjå parabelforma: grafen er symmetrisk om og stig raskt for store .
For ein finare graf kan du bruka matplotlib:
import matplotlib.pyplot as plt
x_verdiar = []
y_verdiar = []
for i in range(-50, 51):
x = i / 10
x_verdiar.append(x)
y_verdiar.append(x**2)
plt.plot(x_verdiar, y_verdiar)
plt.xlabel("x")
plt.ylabel("f(x)")
plt.title("f(x) = x²")
plt.grid(True)
plt.show()Skriv eit Python-program som lagar ein tekstgraf (med stjerner) av funksjonen for heiltalsverdia av frå til . Berekn funksjonsverdien for kvar og vis resultatet visuelt.
Simulera sannsynlegheit
Ein av dei mest spennande bruksområda for programmering i matematikk er å simulera tilfeldige forsøk. I staden for å berekna sannsynlegheit med formlar, kan vi la datamaskina gjenta forsøket tusenvis av gongar og telja utfalla.
Denna metoden kallast Monte Carlo-simulering, opppkalla etter kasinoet i Monte Carlo.
I Python brukar vi random-modulen for tilfeldige tal:
import random
terning = random.randint(1, 6) # Tilfeldig heilt tal frå 1 til 6
mynt = random.choice(["kron", "mynt"]) # Tilfeldig valJo fleire forsøk vi gjer, desto næmre kjem vi den eksakte sannsynligheten. Med 10 000 forsøk får vi vanlegvis eit godt estimat.
Bruk Python til å simulera 10 000 kast med to terningar 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
sannsynlegheit = antall_syv / antall_forsok
print(f"Antall gongar sum = 7: {antall_syv}")
print(f"Estimert sannsynlegheit: {sannsynlegheit:.4f}")Typisk utskrift:
Antall gongar sum = 7: 1674
Estimert sannsynlegheit: 0.1674Eksakt sannsynlegheit: Det er 6 gunstige utfall for sum 7: . Totalt utfall.
Simuleringen gjev eit resultat nær den eksakte verdien! \checkmark
Skriv eit Python-program som simulerer 10 000 myntkast og finn sannsynligheten for å få "kron".
Skriv programmet og kjør det.
Kva er den eksakte (teoretiske) sannsynligheten? Samanlikn med simuleringen.
Skriv eit Python-program som simulerer 10 000 kast med to terningar og finn sannsynligheten for å få minst ein seksar.
Finne primtal med programmering
Eit primtal er eit tal større enn 1 som berre er deleleg med 1 og seg sjølv. Dei første primtala er:
Å finne store primtal er viktig i kryptografi (trygg kommunikasjon på nett). Med programmering kan vi raskt sjekke om tal er primtal og finne alle primtal opp til ei gitt grense.
Skriv eit Python-program som sjekkar om eit gitt tal er eit primtal.
import math
tal = int(input("Skriv inn eit tal: "))
if tal < 2:
print(f"{tal} er ikkje eit primtal")
else:
er_primtal = True
for i in range(2, int(math.sqrt(tal)) + 1):
if tal % i == 0:
er_primtal = False
break
if er_primtal:
print(f"{tal} er eit primtal")
else:
print(f"{tal} er ikkje eit primtal")Triks: Vi treng berre å sjekke divisorar opp til , fordi viss og begge er større enn , ville .
For : , så vi sjekkar 2, 3, 4, 5, 6, 7, 8, 9. Ingen deler 97, altså er 97 eit primtal.
Skriv eit Python-program som finn og skriv ut alle primtal frå 2 til 100.
Skriv programmet.
Kor mange primtal er det mellom 2 og 100?
Berekne statistikk med programmering
Når vi har store datamengder, er programmering uvurderleg for å berekne statistiske mål. Med Python kan vi enkelt finne gjennomsnitt, median, typetal og standardavvik.
Gjennomsnitt (middelverdien):
Median (den midtarste verdien i sortert rekkjefølgje):
- Viss er oddetal: medianen er det midtarste elementet
- Viss er partal: medianen er gjennomsnittet av dei to midtarste
Typetal (den verdien som førekjem oftest):
- Talast ved å gå gjennom lista og finne hyppigste verdi
Variasjonsbreidde: Største verdi minus minste verdi
Skriv eit Python-program som bereknar gjennomsnitt, median og variasjonsbreidde for karakterane .
karakterar = [4, 5, 3, 6, 5, 4, 5, 3, 4, 5]
# Gjennomsnitt
gjennomsnitt = sum(karakterar) / len(karakterar)
# Sorterer for median
sortert = sorted(karakterar)
n = len(sortert)
if n % 2 == 1:
median = sortert[n // 2]
else:
median = (sortert[n // 2 - 1] + sortert[n // 2]) / 2
# Variasjonsbreidde
variasjonsbreidde = max(karakterar) - min(karakterar)
# Typetal (enkel metode)
typetal = max(set(karakterar), key=karakterar.count)
print(f"Karakterar: {karakterar}")
print(f"Sortert: {sortert}")
print(f"Gjennomsnitt: {gjennomsnitt:.1f}")
print(f"Median: {median}")
print(f"Typetal: {typetal}")
print(f"Variasjonsbreidde: {variasjonsbreidde}")Utskrift:
Karakterar: [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
Typetal: 5
Variasjonsbreidde: 3Sjekk: Gjennomsnitt \checkmark
Median: Dei to midtarste er 4 og 5, median \checkmark
Brukarane av ei app har gitt desse vurderingane (1–5 stjerner): . Skriv eit Python-program som bereknar gjennomsnitt, median, typetal og variasjonsbreidde.
Oppsummering
I dette kapitlet har du lært:
- Numerisk likningsløysing: Teste mange -verdiar systematisk for å finne der
- Plotte funksjonar: Lage tekstgrafer med Python, eventuelt bruke matplotlib for fine grafer
- Monte Carlo-simulering: Bruke tilfeldige tal til å estimere sannsynsleiker
- Primtal: Sjekke om tal er primtal ved å teste divisorar opp til
- Statistikk: Berekne gjennomsnitt, median, typetal og variasjonsbreidde med Python
Nøkkelbegrep
| Begrep | Forklaring |
|---|---|
| Numerisk løysing | Tilnærma løysing funnen ved systematisk prøving |
| Monte Carlo-simulering | Estimere resultat ved hjelp av tilfeldige forsøk |
| Primtal | Tal > 1 som berre er deleleg med 1 og seg sjølv |
| Gjennomsnitt | Summen av alle verdiar delt på tal av verdiar |
| Median | Den midtarste verdien i ei sortert datamengde |
| Typetal | Den verdien som førekjem oftest |
| Variasjonsbreidde | Differansen mellom største og minste verdi |
Du kastar tre terningar. Bruk Python til å simulere 10 000 forsøk og estimer sannsynsleiken for at summen er nøyaktig 10.
Skriv programmet og finn den estimerte sannsynsleiken.
Den eksakte sannsynsleiken er . Samanlikn med simuleringen din.
Skriv eit Python-program som brukar Monte Carlo-simulering til å estimere verdien av . Metoden: Generer tilfeldige punkt der og . Tell kor mange som havnar innanfor kvartssirkelen . Da er .
Skriv programmet med 100 000 tilfeldige punkt.
Køyr programmet fleire gonger. Kor nær kjem du?
Forklar kvifor 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
sannsynsleiket = antall_gunstige / antall_forsok
print(f"Estimert sannsynsleiket: {sannsynsleiket}")
print(f"Eksakt svar: {1/6}")Maja er nøgd — programmet køyrer utan feil og gir ca. . Men vennen hennes Liam skriv nesten same program, berre med denne skilnaden:
terning1 = random.randint(0, 6)
terning2 = random.randint(0, 6)Liam får eit anna (feil) svar. Finn feilen og forklar kva som går gale.
Ein Monte Carlo-simulering gir alltid eksakt svar.
a) Gje eit døme på ei likning som er enkel å løsa eksakt, og ei som er vanskeleg å løsa eksakt.
b) Diskuter: Når er det greitt å bruka eit tilnærma (numerisk) svar i staden for eit eksakt svar? Finnast det situasjonar der eit tilnærma svar ikkje er godt nok?
c) Kvifor trur du programmering og numeriske metodar 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.