9.3 Programmering med følger og rekker
Python-implementasjon av følger og rekker, iterasjon og visualisering.
Når datamaskinen tar over regnearbeidet
Du har lært å finne det femtiende leddet i en følge med formler — men hva om rekursjonen er så kronglete at ingen eksplisitt formel finnes? Eller om du vil se de tusen første delsummene av en rekke for å se om den konvergerer? Da setter du datamaskinen i arbeid.
Programmering er et kraftig supplement til analytisk matematikk. Med Python kan du generere hundrevis av ledd umiddelbart, selv for kompliserte rekursive formler, visualisere konvergens og divergens grafisk, eksperimentere med parametre og se effekten med én gang, og modellere praktiske situasjoner der analytiske formler blir for tunge.
Verktøyene er få og enkle. To løkketyper gjør jobben: en for-løkke når du vet nøyaktig hvor mange iterasjoner du trenger («beregn de første 50 leddene»), og en while-løkke når du itererer til en betingelse er oppfylt («kjør til feilen er under »). I tillegg bruker vi matplotlib til plotting og math til matematiske funksjoner. I denne fortellingen oversetter vi hele følge- og rekketeorien til kode — og lar maskinen avsløre ting formlene ikke uten videre ser.
Følger og delsummer i kode
En eksplisitt følge beregnes direkte i en for-løkke. Den geometriske :
a1 = 100
k = 0.85
for n in range(1, 21):
a_n = a1 * k**(n - 1)
print(f"a_{n:>2} = {a_n:.4f}")En rekursiv følge programmeres ved å oppdatere en variabel i hver runde. Rekursjonen med :
a = 200
for n in range(2, 21):
a = 0.7 * a + 15Linjen a = 0.7 * a + 15 er hele modellen — gammel verdi inn, ny verdi ut. (Likevekten kan du forutsi analytisk: gir — og koden bekrefter at leddene siger mot 50.)
Delsummer beregnes med en akkumulator — en sumvariabel som vokser for hvert ledd. Slik utforskes den berømte rekken :
S = 0
for n in range(1, 101):
S += 1 / n**2Plotter du delsummene mot med matplotlib (med plt.plot, aksetekster og plt.axhline for en referanselinje), ser du kurven flate ut mot — Eulers klassiske resultat, demonstrert på tre kodelinjer.
While-løkker: kjør til noe skjer
Ofte vet du ikke på forhånd hvor mange iterasjoner som trengs — du vet bare når du skal stoppe. Da er while-løkken verktøyet. Første eksempel: når faller den geometriske følgen under 1?
a = 500
n = 1
while a >= 1:
a = a * 0.9
n += 1Løkken kjører så lenge betingelsen holder, og når den brytes, holder svaret. Andre eksempel er en juvel: Newtons metode for kvadratrøtter er selv en rekursiv følge, . For :
a = 2.0
toleranse = 1e-10
while True:
a_ny = (a + 3 / a) / 2
if abs(a_ny - a) < toleranse:
break
a = a_nyHer itererer vi til endringen mellom to ledd er under toleransen — og det skjer fort: Newtons metode har kvadratisk konvergens, antall korrekte desimaler omtrent dobles per iterasjon. Fire-fem runder gir ti desimaler.
Kontrasten er lærerik: Leibniz-rekken konvergerer også — men grusomt sakte; tusenvis av ledd gir bare noen få desimaler av . Konvergenshastighet er altså en egenskap ved metoden, ikke bare ved svaret, og valg av algoritme betyr enormt i praksis. Numerikk handler ikke bare om å få riktig svar, men om å få det før batteriet dør.
Modeller: lån, p-rekker og populasjoner
Nå setter vi verktøyene i arbeid på tre ordentlige problemer.
Lånet. Du låner 500 000 kroner til 5 % årlig rente og betaler 35 000 kroner i året. Restgjelden følger rekursjonen med — renter på, betaling av. En while-løkke (while a > 0:) som oppdaterer gjelden og teller år, viser at lånet er nedbetalt etter cirka 24 år; lagrer du verdiene i lister og plotter dem, ser du gjeldskurven krumme seg nedover — flatt i starten (rentene spiser mesteparten av betalingen), bratt mot slutten.
p-rekkene. Hvilke rekker konvergerer? En for-løkke over -verdiene , , og med akkumulator opp til gir tallenes tale: for (divergerer åpenbart), for (den harmoniske rekken — divergerer, men i sneglefart), for og for (begge konvergerer). Numerikken antyder grensen ved — og teorien bekrefter: konvergens hvis og bare hvis .
Populasjonen. Den logistiske rekursjonen med , og simuleres med samme mønster — én oppdateringslinje i en løkke. Plottet viser at populasjonen svinger seg inn mot likevekten .
To advarsler fra skyttergravene til slutt: Python er 0-indeksert og range(1, n) stopper på — klassiske kilder til av-med-én-feil. Og listeforståelser som [a1 * k**(n-1) for n in range(1, 21)] gir kompakt kode når du vil lage hele følgen på én linje. GeoGebra kan brukes til tilsvarende utforskninger, men matplotlib er standardvalget i Python.
Oppsummering: teorien i tastene
Følge- og rekketeorien fikk en maskin som medspiller. For-løkker håndterer kjent antall iterasjoner, while-løkker kjører til en betingelse brytes — «første ledd under 1», «endring under toleransen». Rekursive følger ble til én oppdateringslinje (a = p*a + q), delsummer til en akkumulator (S += ledd), og matplotlib gjorde konvergens synlig som kurver som flater ut.
Modellene viste spennvidden: lånerekursjonen avslørte 24 års nedbetalingstid, p-rekkene tegnet grensen mellom konvergens () og divergens, og den logistiske populasjonen svingte seg inn mot . Newtons metode demonstrerte at konvergenshastighet er en egenskap ved metoden — kvadratisk konvergens dobler antall riktige desimaler per runde, mens Leibniz-rekken for kravler mot målet.
Husk håndverksdetaljene — 0-indeksering, eksklusive range-grenser, listeforståelser for kompakte følger — og husk arbeidsdelingen: analysen gir innsikt og bevis, numerikken gir utforskning og bekreftelse. Sammen er de sterkere enn hver for seg, og det er nettopp slik moderne matematikk drives — med penn i den ene hånden og tastatur i den andre.
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.