3.6

3.6 Numerisk derivasjon med digitale verktøy

Fremover-, bakover- og sentraldifferanse, og bruk av regneark og CAS.

45 min
10 oppgaver
Numerisk derivasjonFremoverdifferanseSentraldifferanseRegnearkCAS
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 10 oppgaver
Kapitlets plass i kurset
Bygger på

Numerisk derivasjon

Ikke alle funksjoner kan deriveres analytisk på en enkel måte. I praksis har vi ofte bare måledata (tabellverdier) uten et eksplisitt funksjonsuttrykk. Da må vi tilnærme den deriverte numerisk.

Ideen er enkel: vi bruker differansekvotienten f(a+h)−f(a)h\displaystyle \frac{f(a+h) - f(a)}{h} med en liten, men endelig hh i stedet for å ta grenseverdien h→0h \to 0. Spørsmålet er: hvilken differanseformel gir best tilnærming?

Tre differanseformler
For en funksjon ff i x=ax = a med steglengde h>0h > 0:

Framoverdifferanse:
f′(a)≈f(a+h)−f(a)hf'(a) \approx \frac{f(a+h) - f(a)}{h}

Bakoverdifferanse:
f′(a)≈f(a)−f(a−h)hf'(a) \approx \frac{f(a) - f(a-h)}{h}

Sentraldifferanse:
f′(a)≈f(a+h)−f(a−h)2hf'(a) \approx \frac{f(a+h) - f(a-h)}{2h}

Sentraldifferansen er som regel den mest nøyaktige av de tre.

✏️Eksempel 1: Sammenlikning av differanseformler

La f(x)=x3f(x) = x^3. Tilnærm f′(2)=12f'(2) = 12 med h=0,1h = 0{,}1 ved hjelp av de tre differanseformlene.

Løsning:

f(2)=8f(2) = 8, f(2,1)=9,261f(2{,}1) = 9{,}261, f(1,9)=6,859f(1{,}9) = 6{,}859.

Framoverdifferanse:
9,261−80,1=12,61(feil: 0,61)\frac{9{,}261 - 8}{0{,}1} = 12{,}61 \quad \text{(feil: } 0{,}61\text{)}

Bakoverdifferanse:
8−6,8590,1=11,41(feil: 0,59)\frac{8 - 6{,}859}{0{,}1} = 11{,}41 \quad \text{(feil: } 0{,}59\text{)}

Sentraldifferanse:
9,261−6,8590,2=12,01(feil: 0,01)\frac{9{,}261 - 6{,}859}{0{,}2} = 12{,}01 \quad \text{(feil: } 0{,}01\text{)}

Sentraldifferansen gir en mye bedre tilnærming.

Svar: Framover 12,6112{,}61, bakover 11,4111{,}41 og sentral 12,0112{,}01. Sentraldifferansen ligger nærmest f′(2)=12f'(2) = 12.

📜Hvor stor er feilen?

For små hh er feilen i tilnærmingene omtrent

- framover- og bakoverdifferanse: proporsjonal med hh
- sentraldifferanse: proporsjonal med h2h^2

Når vi halverer hh, blir feilen omtrent halvert med framover- og bakoverdifferansen, men omtrent en firedel med sentraldifferansen.

I eksempel 1 er feilene 0,610{,}61, 0,590{,}59 og 0,010{,}01 med h=0,1h = 0{,}1. For f(x)=x3f(x) = x^3 er feilen i sentraldifferansen nøyaktig h2h^2, for (a+h)3−(a−h)32h=3a2+h2\displaystyle \frac{(a+h)^3 - (a-h)^3}{2h} = 3a^2 + h^2.

📝Oppgave 1

La f(x)=exf(x) = e^x. Tilnærm f′(1)f'(1) med sentraldifferanse. Den eksakte verdien er f′(1)=ef'(1) = e, fordi (ex)′=ex(e^x)' = e^x (kapittel 4.2).

a

Bruk h=0,1h = 0{,}1.

b

Bruk h=0,01h = 0{,}01.

c

Sammenlikn feilene. Stemmer det at feilen er omtrent proporsjonal med h2h^2?

Numerisk derivasjon med regneark

I et regneark kan vi sette opp numerisk derivasjon systematisk:

ABC
xxf(x)f(x)f′(x)≈f'(x) \approx
a−ha - h=f(A2)=f(A2)
aa=f(A3)=f(A3)=(B4−B2)/(A4−A2)=(B4-B2)/(A4-A2)
a+ha + h=f(A4)=f(A4)

Kolonne C bruker sentraldifferanse: f(a+h)−f(a−h)2h\displaystyle \frac{f(a+h) - f(a-h)}{2h}.
Eksempel i regneark-syntaks:
- Celle A2: =A3-0.001
- Celle B2: =A2^3 (for f(x)=x3f(x) = x^3)
- Celle C3: =(B4-B2)/(A4-A2)
📝Oppgave 2

Sett opp et regneark for å tilnærme den deriverte.

a

Lag en tabell med xx-verdier fra 00 til 55 med steglengde 0,50{,}5 for f(x)=x3−3x+1f(x) = x^3 - 3x + 1. Beregn sentraldifferansen i hvert indre punkt.

b

Gjenta med steglengde 0,10{,}1. Hvor mye bedre blir tilnærmingen?

Numerisk og symbolsk derivasjon med CAS

CAS-verktøy (Computer Algebra System) kan både:

1. Derivere symbolsk -- finne det eksakte uttrykket for f′(x)f'(x)
2. Beregne numerisk -- gi en tilnærmet verdi av f′(a)f'(a)

I GeoGebra CAS:
- Symbolsk: Derivative[x^3 + sin(x)] gir 3x^2 + cos(x)
- Numerisk: Skriv f(x) := x^3 + sin(x) og så f'(2), og trykk ≈. Det gir f′(2)=12+cos⁡2≈11,584f'(2) = 12 + \cos 2 \approx 11{,}584

I Python med SymPy:

from sympy import *

x = symbols('x')
f = x**3 + sin(x)
# Symbolsk: 3*x**2 + cos(x)
diff(f, x)
# Numerisk verdi i x=2
diff(f, x).subs(x, 2).evalf()
📝Oppgave 3

Bruk CAS eller regneark til å løse oppgavene.

a

Finn f′(x)f'(x) symbolsk for f(x)=x⋅e−x2f(x) = x \cdot e^{-x^2}.

b

Bruk numerisk derivasjon (sentraldifferanse med h=0,001h = 0{,}001) til å tilnærme f′(1)f'(1).

c

Sammenlign det numeriske og analytiske svaret.

Løs oppgaven
📝Oppgave 4

Undersøk hvordan steglengden påvirker nøyaktigheten.

a

La f(x)=exf(x) = e^x. Beregn sentraldifferansen for f′(1)=ef'(1) = e med h=10−1,10−2,…,10−8h = 10^{-1}, 10^{-2}, \ldots, 10^{-8}. Lag en tabell over hh og feil.

b

For hvilken hh får du den minste feilen?

📝Oppgave 5

Gitt tabellverdier, tilnærm den deriverte.

a

Tabellen viser f(x)f(x): f(1)=3,0f(1) = 3{,}0, f(1,5)=4,2f(1{,}5) = 4{,}2, f(2)=5,8f(2) = 5{,}8, f(2,5)=7,9f(2{,}5) = 7{,}9, f(3)=10,5f(3) = 10{,}5. Tilnærm f′(2)f'(2).

b

Tilnærm f′(1)f'(1) og f′(3)f'(3).

Løs oppgaven

Lese og skrive programmer

På eksamen får vi ofte et kort Python-program som bruker den numeriske deriverte

g(x)=f(x+h)−f(x)hg(x) = \frac{f(x+h) - f(x)}{h}

med en liten hh, for eksempel h=0,000001h = 0{,}000001. Da er g(x)≈f′(x)g(x) \approx f'(x).

En god forklaring av et program har to deler:

- Komponentene: hva hver funksjon, variabel, løkke og if-test betyr.
- Flyten: hva som skjer når programmet kjøres, runde for runde, og hva som skrives ut.

Tre mønstre går igjen:

- while g(x) > 0: x = x + dx går mot høyre så lenge funksjonen vokser, og stopper ved et toppunkt.
- while f(x + 1) > f(x): x = x + 1 gjør det samme ved å sammenlikne funksjonsverdier, uten derivert.
- while g(x) < c: x = x + dx stopper der den deriverte har nådd verdien cc, for eksempel der tangenten har et gitt stigningstall.

Programmet finner bare et punkt med samme nøyaktighet som skrittlengden dx, og det finner bare det første punktet til høyre for startverdien.

✏️Eksempel 2: Hva skriver programmet ut?

Forklar hva programmet gjør, og hva det skriver ut.

def f(x):
    return -2*x**2 + 24*x + 10

def g(x):
    h = 0.000001
    return (f(x + h) - f(x)) / h

x = 0
dx = 0.5
while g(x) > 0:
    x = x + dx

print(x)

f er f(x)=−2x2+24x+10f(x) = -2x^2 + 24x + 10, en parabel med toppunkt. g er den numeriske deriverte med h=0,000001h = 0{,}000001. Startverdien er x = 0, og skrittlengden er dx = 0.5.

Vilkåret g(x) > 0 er sant så lenge ff vokser. print(x) skriver ut xx-verdien der løkka stopper, ikke funksjonsverdien.

g(x)≈f′(x)=−4x+24g(x) \approx f'(x) = -4x + 24, som er positiv for x<6x < 6.

Løkka øker xx med 0,5 så lenge g(x)>0g(x) > 0: g(0)≈24g(0) \approx 24, g(0,5)≈22g(0{,}5) \approx 22, …, g(5,5)≈2g(5{,}5) \approx 2. Det blir 12 runder.

I x=6x = 6 er g(6)=−2h≈−2⋅10−6<0g(6) = -2h \approx -2 \cdot 10^{-6} < 0, og løkka stopper.

Kontroll: f′(x)=0f'(x) = 0 gir x=6x = 6, og f(6)=−72+144+10=82f(6) = -72 + 144 + 10 = 82.

Svar: Programmet skriver ut 6.0, som er xx-verdien til toppunktet (6,82)(6, 82).

✏️Eksempel 3: Program som finner en tangent med gitt stigningstall

Grafen til f(x)=x3−4xf(x) = x^3 - 4x har en tangent med stigningstall 8 for en x>0x > 0.

a) Skriv et program som finner xx-verdien.

b) Finn likningen for tangenten.

a) Vi starter i x=0x = 0 og går mot høyre i små skritt så lenge den numeriske deriverte er mindre enn 8.

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

def g(x):
    h = 0.000001
    return (f(x + h) - f(x)) / h

x = 0
dx = 0.001
while g(x) < 8:
    x = x + dx

print(round(x, 3))

Programmet skriver ut 2.0.

Kontroll: f′(x)=3x2−4=8f'(x) = 3x^2 - 4 = 8 gir x2=4x^2 = 4, så x=2x = 2 når x>0x > 0.

Svar: x=2x = 2.

b) f(2)=8−8=0f(2) = 8 - 8 = 0, så tangenten går gjennom (2,0)(2, 0) og har stigningstall 8.

y−0=8(x−2)y - 0 = 8(x - 2)

Svar: y=8x−16y = 8x - 16.

📝Oppgave 6

Se på programmet.

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

x = 0
while x <= 3:
    print(x, f(x))
    x = x + 1

a

Hva skriver programmet ut?

b

Hva må endres for at programmet også skal skrive ut verdien for x=4x = 4?

c

Hva forteller utskriften om grafen til ff?

📝Oppgave 7

En rektangulær innhegning har areal O(x)=x(20−2x)O(x) = x(20 - 2x), der xx er en heltallig lengde i meter.

def O(x):
    return x*(20 - 2*x)

x = 0
while O(x + 1) > O(x):
    x = x + 1

print(x, O(x))

a

Forklar strategien i programmet, og finn hva det skriver ut.

b

Kontroller svaret ved derivasjon.

c

Vil strategien alltid finne den største verdien til en funksjon? Begrunn svaret.

📝Oppgave 8

Programmet nedenfor leter etter bunnpunktet til f(x)=x2−3xf(x) = x^2 - 3x.

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

def g(x):
    h = 0.000001
    return (f(x + h) - f(x)) / h

x = 0
while g(x) < 0:
    x = x + 0.4

print(round(x, 2))

a

Hva skriver programmet ut?

b

Finn bunnpunktet ved regning. Hvorfor gir ikke programmet det eksakte svaret?

c

Foreslå en endring i koden som gir et riktigere svar.

📝Oppgave 9

Programmet nedenfor undersøker grafen til f(x)=x3−3xf(x) = x^3 - 3x.

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

def g(x):
    h = 0.0001
    return (f(x + h) - f(x)) / h

x = -3
while x < 3:
    if (
        g(x) > 0
        and g(x + 0.5) < 0
    ):
        print(
            "toppunkt mellom",
            x,
            "og",
            x + 0.5,
        )
    if (
        g(x) < 0
        and g(x + 0.5) > 0
    ):
        print(
            "bunnpunkt mellom",
            x,
            "og",
            x + 0.5,
        )
    x = x + 0.5

a

Forklar hva if-testene undersøker.

b

Finn toppunktet og bunnpunktet til ff ved regning.

c

Programmet skriver ut

toppunkt mellom -1.5 og -1.0
bunnpunkt mellom 0.5 og 1.0

Forklar hvorfor det ikke skriver «toppunkt mellom -1.0 og -0.5», selv om f′(−1)=0f'(-1) = 0.

📝Oppgave 10

La f(x)=ex−2xf(x) = e^x - 2x.

a

Skriv et program som finner xx-verdien der tangenten til grafen har stigningstall 1, med tre desimaler. Start i x=0x = 0.

b

Finn den eksakte verdien ved regning, og sammenlikn.

c

Finn likningen for tangenten.

Oppsummering

- Den deriverte kan tilnærmes numerisk med differansekvotienter
- Sentraldifferansen f(a+h)−f(a−h)2h\displaystyle \frac{f(a+h) - f(a-h)}{2h} er mest nøyaktig (feilen er omtrent proporsjonal med h2h^2)
- Regneark og CAS er nyttige verktøy for numerisk derivasjon
- For liten hh gir avrundingsfeil -- det finnes en optimal steglengde
- Numerisk derivasjon brukes når analytisk derivasjon er upraktisk eller umulig
- I et program er g(x)=f(x+h)−f(x)h\displaystyle g(x) = \frac{f(x+h) - f(x)}{h} med liten hh den numeriske deriverte. En løkke som while g(x) > 0 stopper ved første toppunkt, med nøyaktighet lik skrittlengden

Repetisjonsoppgaver
Din fremgang
0deloppgaver0 / 5 oppgaver

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.