3.6 Numerisk derivasjon med digitale verktøy
Fremover-, bakover- og sentraldifferanse, og bruk av regneark og CAS.
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 med en liten, men endelig i stedet for å ta grenseverdien . Spørsmålet er: hvilken differanseformel gir best tilnærming?
Framoverdifferanse:
Bakoverdifferanse:
Sentraldifferanse:
Sentraldifferansen er som regel den mest nøyaktige av de tre.
La . Tilnærm med ved hjelp av de tre differanseformlene.
, , .
Framoverdifferanse:
Bakoverdifferanse:
Sentraldifferanse:
Sentraldifferansen gir en mye bedre tilnærming.
Svar: Framover , bakover og sentral . Sentraldifferansen ligger nærmest .
For små er feilen i tilnærmingene omtrent
- framover- og bakoverdifferanse: proporsjonal med
- sentraldifferanse: proporsjonal med
Når vi halverer , blir feilen omtrent halvert med framover- og bakoverdifferansen, men omtrent en firedel med sentraldifferansen.
I eksempel 1 er feilene , og med . For er feilen i sentraldifferansen nøyaktig , for .
La . Tilnærm med sentraldifferanse. Den eksakte verdien er , fordi (kapittel 4.2).
Bruk .
Bruk .
Sammenlikn feilene. Stemmer det at feilen er omtrent proporsjonal med ?
Numerisk derivasjon med regneark
I et regneark kan vi sette opp numerisk derivasjon systematisk:
| A | B | C |
|---|---|---|
Kolonne C bruker sentraldifferanse: .
Eksempel i regneark-syntaks:
- Celle A2:
=A3-0.001- Celle B2:
=A2^3 (for )- Celle C3:
=(B4-B2)/(A4-A2)Sett opp et regneark for å tilnærme den deriverte.
Lag en tabell med -verdier fra til med steglengde for . Beregn sentraldifferansen i hvert indre punkt.
Gjenta med steglengde . 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
2. Beregne numerisk -- gi en tilnærmet 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 regneark til å løse oppgavene.
Finn symbolsk for .
Bruk numerisk derivasjon (sentraldifferanse med ) til å tilnærme .
Sammenlign det numeriske og analytiske svaret.
Python regner med omtrent 16 gjeldende siffer. Med i gir framoverdifferansen minst feil rundt , og sentraldifferansen rundt til . Med enda mindre blir feilen større igjen.
Undersøk hvordan steglengden påvirker nøyaktigheten.
La . Beregn sentraldifferansen for med . Lag en tabell over og feil.
For hvilken får du den minste feilen?
Gitt tabellverdier, tilnærm den deriverte.
Tabellen viser : , , , , . Tilnærm .
Tilnærm og .
- Analytisk (for hånd eller CAS): Når vi har et funksjonsuttrykk og trenger et eksakt svar. Gir fullstendig informasjon om for alle .
- Numerisk: Når vi bare har tabelldata, når funksjonsuttrykket er for komplisert, eller når vi trenger en rask tilnærming i ett punkt.
I praksis brukes ofte en kombinasjon: CAS finner det analytiske uttrykket, som så evalueres numerisk i ønskede punkter.
Lese og skrive programmer
På eksamen får vi ofte et kort Python-program som bruker den numeriske deriverte
med en liten , for eksempel . Da er .
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 , 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.
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 , en parabel med toppunkt. g er den numeriske deriverte med . Startverdien er x = 0, og skrittlengden er dx = 0.5.Vilkåret g(x) > 0 er sant så lenge vokser. print(x) skriver ut -verdien der løkka stopper, ikke funksjonsverdien.
, som er positiv for .
Løkka øker med 0,5 så lenge : , , …, . Det blir 12 runder.
I er , og løkka stopper.
Kontroll: gir , og .
Svar: Programmet skriver ut 6.0, som er -verdien til toppunktet .
Grafen til har en tangent med stigningstall 8 for en .
a) Skriv et program som finner -verdien.
b) Finn likningen for tangenten.
a) Vi starter i 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: gir , så når .
Svar: .
b) , så tangenten går gjennom og har stigningstall 8.
Svar: .
Se på programmet.
def f(x):
return x**2 - 4*x
x = 0
while x <= 3:
print(x, f(x))
x = x + 1Hva skriver programmet ut?
Hva må endres for at programmet også skal skrive ut verdien for ?
Hva forteller utskriften om grafen til ?
En rektangulær innhegning har areal , der 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))Forklar strategien i programmet, og finn hva det skriver ut.
Kontroller svaret ved derivasjon.
Vil strategien alltid finne den største verdien til en funksjon? Begrunn svaret.
Programmet nedenfor leter 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))Hva skriver programmet ut?
Finn bunnpunktet ved regning. Hvorfor gir ikke programmet det eksakte svaret?
Foreslå en endring i koden som gir et riktigere svar.
Programmet nedenfor undersøker 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 hva if-testene undersøker.
Finn toppunktet og bunnpunktet til ved regning.
Programmet skriver ut
toppunkt mellom -1.5 og -1.0
bunnpunkt mellom 0.5 og 1.0Forklar hvorfor det ikke skriver «toppunkt mellom -1.0 og -0.5», selv om .
La .
Skriv et program som finner -verdien der tangenten til grafen har stigningstall 1, med tre desimaler. Start i .
Finn den eksakte verdien ved regning, og sammenlikn.
Finn likningen for tangenten.
Oppsummering
- Den deriverte kan tilnærmes numerisk med differansekvotienter
- Sentraldifferansen er mest nøyaktig (feilen er omtrent proporsjonal med )
- Regneark og CAS er nyttige verktøy for numerisk derivasjon
- For liten gir avrundingsfeil -- det finnes en optimal steglengde
- Numerisk derivasjon brukes når analytisk derivasjon er upraktisk eller umulig
- I et program er med liten den numeriske deriverte. En løkke som while g(x) > 0 stopper ved første toppunkt, med nøyaktighet lik skrittlengden
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.