3.6 Numerisk derivasjon med digitale verktøy
Framover-, bakover- og sentraldifferanse, og bruk av rekneark og CAS.
Numerisk derivasjon
Ikkje alle funksjonar kan deriverast analytisk på ein enkel måte. I praksis har vi ofte berre måledata (tabellverdiar) utan eit eksplisitt funksjonsuttrykk. Då må vi tilnærme den deriverte numerisk.
Ideen er enkel: vi bruker differansekvotienten med ein liten, men endeleg i staden for å ta grenseverdien . Spørsmålet er: kva differanseformel gir best tilnærming?
Framoverdifferanse:
Bakoverdifferanse:
Sentraldifferanse:
Sentraldifferansen er som regel den mest nøyaktige av dei tre.
La . Tilnærm med ved hjelp av dei tre differanseformlane.
, , .
Framoverdifferanse:
Bakoverdifferanse:
Sentraldifferanse:
Sentraldifferansen gir ei mykje betre tilnærming.
Svar: Framover , bakover og sentral . Sentraldifferansen ligg nærast .
For små er feilen i tilnærmingane omtrent
- framover- og bakoverdifferanse: proporsjonal med
- sentraldifferanse: proporsjonal med
Når vi halverer , blir feilen omtrent halvert med framover- og bakoverdifferansen, men omtrent ein firedel med sentraldifferansen.
I døme 1 er feila , og med . For er feilen i sentraldifferansen nøyaktig , for .
Lat . Tilnærm med sentraldifferanse. Den eksakte verdien er , fordi (kapittel 4.2).
Bruk .
Bruk .
Samanlikn feila. Stemmer det at feilen er omtrent proporsjonal med ?
Numerisk derivasjon med rekneark
I eit rekneark kan vi setje opp numerisk derivasjon systematisk:
| A | B | C |
|---|---|---|
Kolonne C bruker sentraldifferanse: .
Døme i rekneark-syntaks:
- Celle A2:
=A3-0.001- Celle B2:
=A2^3 (for )- Celle C3:
=(B4-B2)/(A4-A2)Set opp eit rekneark for å tilnærme den deriverte.
Lag ein tabell med -verdiar frå til med steglengde for . Rekn ut sentraldifferansen i kvart indre punkt.
Gjenta med steglengd . Kor mykje betre blir tilnærminga?
Numerisk og symbolsk derivasjon med CAS
CAS-verktøy (Computer Algebra System) kan både:
1. Derivere symbolsk -- finne det eksakte uttrykket for
2. Rekne ut numerisk -- gi ein tilnærma verdi av
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
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()Bruk CAS eller rekneark til å løyse oppgåvene.
Finn symbolsk for .
Bruk numerisk derivasjon (sentraldifferanse med ) til å tilnærme .
Samanlikn det numeriske og analytiske svaret.
Python reknar med omtrent 16 gjeldande siffer. Med i gir framoverdifferansen minst feil rundt , og sentraldifferansen rundt til . Med endå mindre blir feilen større igjen.
Undersøk korleis steglengda påverkar nøyaktigheita.
La . Rekn ut sentraldifferansen for med . Lag ein tabell over og feil.
For kva får du den minste feilen?
Gitt tabellverdiar, tilnærm den deriverte.
Tabellen viser : , , , , . Tilnærm .
Tilnærm og .
- Analytisk (for hand eller CAS): Når vi har eit funksjonsuttrykk og treng eit eksakt svar. Gir fullstendig informasjon om for alle .
- Numerisk: Når vi berre har tabelldata, når funksjonsuttrykket er for komplisert, eller når vi treng ei rask tilnærming i eitt punkt.
I praksis blir ofte ein kombinasjon brukt: CAS finn det analytiske uttrykket, som så blir evaluert numerisk i ønskte punkt.
Lese og skrive program
På eksamen får vi ofte eit kort Python-program som bruker den numeriske deriverte
med ein liten , til dømes . Då er .
Ein god forklaring av eit program har to delar:
- Komponentane: kva kvar funksjon, variabel, løkke og if-test betyr.
- Flyten: kva som skjer når programmet køyrer, runde for runde, og kva som blir skrive ut.
Tre mønster går igjen:
- while g(x) > 0: x = x + dx går mot høgre så lenge funksjonen veks, og stoppar ved eit toppunkt.
- while f(x + 1) > f(x): x = x + 1 gjer det same ved å samanlikne funksjonsverdiar, utan derivert.
- while g(x) < c: x = x + dx stoppar der den deriverte har nådd verdien , til dømes der tangenten har eit gitt stigningstall.
Programmet finn berre eit punkt med same nøyaktigheit som skrittlengda dx, og det finn berre det første punktet til høgre for startverdien.
Forklar kva programmet gjer, og kva det skriv 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 , ein parabel med toppunkt. g er den numeriske deriverte med . Startverdien er x = 0, og skrittlengda er dx = 0.5.Vilkåret g(x) > 0 er sant så lenge veks. print(x) skriv ut -verdien der løkka stoppar, ikkje funksjonsverdien.
, som er positiv for .
Løkka aukar med 0,5 så lenge : , , …, . Det blir 12 rundar.
I er , og løkka stoppar.
Kontroll: gir , og .
Svar: Programmet skriv ut 6.0, som er -verdien til toppunktet .
Grafen til har ein tangent med stigningstall 8 for ein .
a) Skriv eit program som finn -verdien.
b) Finn likninga for tangenten.
a) Vi startar i og går mot høgre i små steg 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 skriv ut 2.0.
Kontroll: gir , så når .
Svar: .
b) , så tangenten går gjennom og har stigningstall 8.
Svar: .
Sjå på programmet.
def f(x):
return x**2 - 4*x
x = 0
while x <= 3:
print(x, f(x))
x = x + 1Kva skriv programmet ut?
Kva må endrast for at programmet også skal skrive ut verdien for ?
Kva fortel utskrifta om grafen til ?
Ei rektangulær innhegning har areal , der er ei heiltalleg lengd 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))Forklar strategien i programmet, og finn kva det skriv ut.
Kontroller svaret ved derivasjon.
Vil strategien alltid finne den største verdien til ein funksjon? Grunngiv svaret.
Programmet nedanfor leitar etter bunnpunktet til .
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))Kva skriv programmet ut?
Finn bunnpunktet ved rekning. Kvifor gir ikkje programmet det eksakte svaret?
Foreslå ei endring i koden som gir eit riktigare svar.
Programmet nedanfor undersøkjer grafen til .
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.5Forklar kva if-testane undersøkjer.
Finn toppunktet og bunnpunktet til ved rekning.
Programmet skriv ut
toppunkt mellom -1.5 og -1.0
bunnpunkt mellom 0.5 og 1.0Forklar kvifor det ikkje skriv «toppunkt mellom -1.0 og -0.5», sjølv om .
La .
Skriv eit program som finn -verdien der tangenten til grafen har stigningstall 1, med tre desimalar. Start i .
Finn den eksakte verdien ved rekning, og samanlikn.
Finn likninga for tangenten.
Oppsummering
- Den deriverte kan tilnærmast numerisk med differansekvotentar
- Sentraldifferansen er mest nøyaktig (feilen er omtrent proporsjonal med )
- Rekneark og CAS er nyttige verktøy for numerisk derivasjon
- For liten gir avrundingsfeil -- det finst ein optimal steglengde
- Numerisk derivasjon blir brukt når analytisk derivasjon er upraktisk eller umogleg
- I eit program er med liten den numeriske deriverte. Ei løkke som while g(x) > 0 stoppar ved første toppunkt, med nøyaktigheit lik skrittlengda
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.