9.4

9.4 Numeriske metoder og simulering

Finne nullpunkter ved fortegnsskifte, tilnærme areal med rektangler, løse likninger ved prøving og simulere utvikling steg for steg.

60 min
11 oppgaver
FortegnsskifteHalveringsmetodenAreal med rektanglerSystematisk prøvingSimulering
Din fremgang i kapitlet
0 / 11 oppgaver
Kapitlets plass i kurset

Når regning for hånd ikke strekker til

Mange likninger kan ikke løses eksakt med metodene vi har, og mange størrelser er for tungvinte å regne ut for hånd. Med et program kan vi i stedet

- prøve oss fram systematisk til vi har et svar med ønsket nøyaktighet
- dele et problem opp i mange små biter og legge sammen
- simulere en utvikling steg for steg

Slike metoder kalles numeriske metoder. Svaret blir en tilnærming, og vi må alltid si hvor nøyaktig det er.

Fortegnsskifte

Hvis grafen til ff henger sammen på intervallet [a,b][a, b] og f(a)f(a) og f(b)f(b) har ulikt fortegn, har ff minst ett nullpunkt mellom aa og bb.

I et program sjekker vi ulikt fortegn med f(a) * f(b) < 0: produktet av et positivt og et negativt tall er negativt.

✏️Eksempel 1: Nullpunkt med steg på 0,01

Finn nullpunktet til f(x)=x3+x−3f(x) = x^3 + x - 3 med to desimalers nøyaktighet. Bruk at f(1)=−1f(1) = -1 og f(2)=7f(2) = 7.

f(1)<0<f(2)f(1) < 0 < f(2), så det finnes et nullpunkt mellom 1 og 2. Vi undersøker intervallene [1; 1,01][1;\ 1{,}01], [1,01; 1,02][1{,}01;\ 1{,}02], … .

def f(x):
    return x ** 3 + x - 3

for i in range(100, 200):
    x = i / 100
    if f(x) * f(x + 0.01) < 0:
        print("Nullpunkt mellom",
              x, "og", x + 0.01)

Nullpunkt mellom 1.21 og 1.22

Vi bruker x = i / 100 i stedet for å legge til 0,01 i hver runde, slik at avrundingsfeil ikke hoper seg opp.

Svar: Nullpunktet ligger mellom 1,21 og 1,22.

✏️Eksempel 2: Halveringsmetoden

I halveringsmetoden deler vi intervallet i to i hver runde og beholder den halvdelen der fortegnet skifter. Hva skriver programmet ut?

def f(x):
    return x ** 3 + x - 3

a = 1
b = 2
for runde in range(20):
    m = (a + b) / 2
    if f(a) * f(m) <= 0:
        # nullpunktet er i [a, m]
        b = m
    else:
        # nullpunktet er i [m, b]
        a = m
print(a, b)

Intervallet starter med lengde 1 og halveres 20 ganger.

1220≈0,000 001\dfrac{1}{2^{20}} \approx 0{,}000\,001

1.2134113311767578 1.2134122848510742

Svar: Nullpunktet ligger i et intervall med lengde omtrent 0,000 0010{,}000\,001 rundt x≈1,213 41x \approx 1{,}213\,41.

📝Oppgave 1

Hva skriver programmet ut? Hva kan du si om nullpunktet til f(x)=x2−7f(x) = x^2 - 7?

def f(x):
    return x ** 2 - 7

print(f(2), f(3))

📝Oppgave 2

Programmet skriver ut en verditabell for f(x)=x2−4x+1f(x) = x^2 - 4x + 1. Mellom hvilke heltall ligger nullpunktene?

def f(x):
    return x ** 2 - 4 * x + 1

for x in range(0, 6):
    print(x, f(x))

📝Oppgave 3

Lag et program som finner nullpunktet til f(x)=x2−7f(x) = x^2 - 7 mellom 2 og 3 med én desimals nøyaktighet.

📝Oppgave 4

Endre programmet i eksempel 2 slik at det finner 5\sqrt{5} som nullpunktet til f(x)=x2−5f(x) = x^2 - 5 mellom 2 og 3. Hvor mange desimaler kan du stole på etter 20 runder?

Areal under en graf med rektangler

Arealet mellom grafen til ff og xx-aksen fra x=ax = a til x=bx = b kan vi tilnærme med nn rektangler som er like brede:

- bredden er b−an\dfrac{b - a}{n}
- rektangel nummer ii (fra 0) starter i x=a+i⋅breddex = a + i \cdot \text{bredde}
- høyden er funksjonsverdien i venstre endepunkt

Jo flere rektangler, desto nærmere kommer summen det eksakte arealet.

✏️Eksempel 3: Areal med rektangler

Arealet under grafen til f(x)=−0,5x2+2x+6f(x) = -0{,}5x^2 + 2x + 6 fra x=0x = 0 til x=6x = 6 skal tilnærmes med rektangler.

a) Regn ut summen av arealene av 6 rektangler med bredde 1.

b) Lag et program, og finn arealet med 6, 60, 600 og 6000 rektangler.

a) f(0)=6f(0) = 6, f(1)=7,5f(1) = 7{,}5, f(2)=8f(2) = 8, f(3)=7,5f(3) = 7{,}5, f(4)=6f(4) = 6, f(5)=3,5f(5) = 3{,}5

1⋅(6+7,5+8+7,5+6+3,5)=38,51 \cdot (6 + 7{,}5 + 8 + 7{,}5 + 6 + 3{,}5) = 38{,}5

def f(x):
    return (-0.5 * x ** 2
            + 2 * x + 6)

a = 0
b = 6
# antall rektangler
n = 6
bredde = (b - a) / n
areal = 0
for i in range(n):
    # venstre endepunkt
    x = a + i * bredde
    areal = areal + f(x) * bredde
print(n, areal)

6 38.5

Svar: Summen av de 6 rektanglene er 38,5.

b)

def f(x):
    return (-0.5 * x ** 2
            + 2 * x + 6)

def areal(n):
    bredde = 6 / n
    s = 0
    for i in range(n):
        h = f(i * bredde)
        s = s + h * bredde
    return s

for n in [6, 60, 600, 6000]:
    print(n, areal(n))

6 38.5
60 36.295
600 36.02995000000001
6000 36.002999500000016

Svar: Summene nærmer seg 36 når antallet rektangler øker. Arealet er omtrent 36.

📝Oppgave 5

Arealet under grafen til f(x)=x2f(x) = x^2 fra x=0x = 0 til x=2x = 2 skal tilnærmes med rektangler med høyde i venstre endepunkt.

a

Regn ut summen med 4 rektangler for hånd.

b

Lag et program som regner ut summen med 4 og med 1000 rektangler.

Løs oppgaven
📝Oppgave 6

Endre programmet i forrige oppgave slik at høyden i hvert rektangel er funksjonsverdien i høyre endepunkt. Sammenlikn med resultatene i forrige oppgave, og forklar forskjellen.

Systematisk prøving

Likninger som 1,05x=21{,}05^x = 2 kan vi løse grafisk, i CAS (NLøs(1.05^x = 2)) eller ved systematisk prøving: vi øker xx i små steg til venstre side blir minst like stor som høyre side.

✏️Eksempel 4: Doblingstid ved prøving

Et beløp vokser med 5 % per år. Finn med to desimaler hvor mange år det tar før beløpet er doblet, altså løs 1,05x=21{,}05^x = 2.

i = 0
while 1.05 ** (i / 100) < 2:
    i = i + 1
print(i / 100)

14.21

Kontroll: 1,0514,20≈1,9993<21{,}05^{14{,}20} \approx 1{,}9993 < 2 og 1,0514,21≈2,00031{,}05^{14{,}21} \approx 2{,}0003

Svar: x≈14,21x \approx 14{,}21. Beløpet er doblet etter omtrent 14,2 år.

📝Oppgave 7

Lag et program som løser likningen 1,03x=1,51{,}03^x = 1{,}5 ved systematisk prøving med to desimaler.

Simulering steg for steg

Når vi vet hvordan en størrelse endrer seg fra ett år (eller ett minutt) til det neste, kan programmet regne ut utviklingen steg for steg. Det kalles å simulere utviklingen. En while-løkke finner når størrelsen passerer en grense.

✏️Eksempel 5: Fiskebestand

Det er 2000 fisk i et vann. Hvert år øker bestanden med 8 %, og så fiskes 120 fisk. Hvor mange år tar det før det er mer enn 3000 fisk?

Bestanden neste år: bestand⋅1,08−120\text{bestand} \cdot 1{,}08 - 120

bestand = 2000
år = 0
while bestand <= 3000:
    bestand = bestand * 1.08 - 120
    år = år + 1
print(år, round(bestand))

15 3086

Svar: Etter 15 år er det mer enn 3000 fisk (omtrent 3086).

📝Oppgave 8

Endre programmet i eksempel 5 slik at bestanden starter på 1400 fisk. Finn hvor mange år det tar før det er færre enn 1000 fisk.

Oppgaver i eksamensform

📝Oppgave 9

Funksjonen ff er gitt ved f(x)=0,25x(8−x)f(x) = 0{,}25x(8 - x). Thea vil finne arealet av området mellom grafen til ff og xx-aksen fra x=0x = 0 til x=8x = 8.

a

Thea deler området i 8 rektangler med bredde 1 og høyde i venstre endepunkt. Regn ut summen av arealene.

b

Lag et program Thea kan bruke når hun skal øke antallet rektangler.

c

Bruk programmet til å finne arealet med 8000 rektangler.

Løs oppgaven
📝Oppgave 10

Funksjonen f(x)=x3−6x+2f(x) = x^3 - 6x + 2 har tre nullpunkter mellom −3-3 og 33.

def f(x):
    return x ** 3 - 6 * x + 2

for i in range(-300, 300):
    x = i / 100
    if f(x) * f(x + 0.01) < 0:
        print(round(x, 2),
              round(x + 0.01, 2))

a

Forklar hvordan programmet finner nullpunktene.

b

Hva skriver programmet ut?

c

Hvorfor bruker programmet round?

📝Oppgave 11

En kopp kaffe holder 90 °C i et rom der det er 20 °C. Hvert minutt synker temperaturen med 10 % av forskjellen mellom kaffen og rommet.

a

Forklar at temperaturen etter ett minutt er 83 °C.

b

Lag et program som finner hvor mange hele minutter det tar før kaffen er under 40 °C.

c

Lag en tabell over temperaturen hvert minutt de 12 første minuttene, og kontroller svaret i b).

Løs oppgaven

Oppsummering

- Ulikt fortegn: f(a) * f(b) < 0 betyr at et nullpunkt ligger mellom aa og bb.
- Små steg gir et intervall med nullpunktet; halveringsmetoden halverer intervallet i hver runde.
- Areal under en graf: summen av f(xi)⋅breddef(x_i) \cdot \text{bredde} over mange smale rektangler.
- Systematisk prøving løser likninger som 1,05x=21{,}05^x = 2 med så mange desimaler vi ønsker.
- Simulering: regn ut neste verdi fra den forrige i en løkke, og stopp ved en grense.

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.