Hopp til innhald
Nynorsk
Oppgåve

Korleis bestemme den deriverte i eit punkt numerisk

Her finn du oppgåver for å øve på å finne den deriverte numerisk. Nedst på sida kan du laste ned oppgåvene som Word- og pdf-dokument.

Oppgåve 1

a) Utvid programmet frå teorisida slik at ein brukar kan legge inn ein sjølvvald x-verdi.

Løysing
Python
1import numpy as np
2
3def f(x):
4    return np.exp(x)+np.log(x)          #definerer funksjonen
5def derivert(x,h):
6    return (f(x+h)-f(x))/h              #definerer tilnærming til den deriverte
7
8x = float(input("Kvar vil du finne den deriverte?"))
9                      #punktet der vi skal finne den deriverte
10                      
11h = 1                 #startverdi for h 
12na = 0.0001           #kor nøyaktig vi krev at tilnærminga skal vere 
13førre = h+1
14ny = 1
15
16while abs(førre - ny) > na:            #vilkåret for at lykkja skal køyre
17    førre = ny                         #flyttar verdien for siste tilnærming
18    ny = derivert(x,h)                 #legg nyaste tilnærming inn 
19    h = h/2                            #halverer h
20
21print(f'Den deriverte der x = {x} er omtrent {derivert(x,h):.2f}.')

b) Endre programmet slik at ein brukar kan legge inn ein vilkårleg andregradsfunksjon og ein sjølvvald x-verdi.

Løysing
Python
1import numpy as np
2
3def f(a,b,c,x):
4    return a*x**2+b*x+c                  #definerer funksjonen
5def derivert(a,b,c,x,h):
6    return (f(a,b,c,x+h)-f(a,b,c,x))/h   #definerer tilnærming til den deriverte
7
8a = float(input("Kva er a i andregradsfunksjonen din?"))
9b = float(input("Kva er b i andregradsfunksjonen din?"))
10c = float(input("Kva er c i andregradsfunksjonen din?"))
11x = float(input("Kvar vil du finne den deriverte?"))
12                      #punktet der vi skal finne den deriverte
13                      
14h = 1                 #startverdi for h 
15na = 0.0001           #kor nøyaktig vi krev at tilnærminga skal vere 
16førre = h+1
17ny = 1
18
19while abs(førre - ny) > na:            #vilkåret for at lykkja skal køyre
20    førre = ny                         #flyttar verdien for siste tilnærming
21    ny = derivert(a,b,c,x,h)           #legg nyaste tilnærming inn 
22    h = h/2                            #halverer h
23
24print(f'Den deriverte der x = {x} er omtrent {derivert(a,b,c,x,h):.2f}.')

c) Prøv å køyre programmet i løysinga til b) for a=1, b=0, c=0 og x=0. Du vil oppdage at programmet gir det svaret "Den deriverte der x = 0 er omtrent 0.50.". Forklar kva det er som gjer at programmet feilar her.

Løysing

Dersom vi reknar på kva som skjer første gongen lykkja køyrer, ser vi at både "førre" og "ny" får verdien 1. Variabelen h blir halvert. Dermed sluttar lykkja, og programmet returnerer f0+12-f012=f1212=12.

Her ser vi eit vanleg problem med numeriske metodar – startpunkta våre gjer at lykkja anten sluttar for tidleg slik som her, aldri kjem i gong eller kan gå evig eller i feil retning. Derfor må vi alltid teste programma nøye.

Oppgåve 2

Vi tek for oss funksjonen f(x)=x3+4x2-x. Vi skal finne ein tilnærmingsverdi til den deriverte der x=1. Det skal vi gjere ved å rekne på gjennomsnittet av stigningstala til sekantar på kvar si side av tangenten gjennom punktet 1, f1 (punkt A på figuren under).

Vi plasserer punkt med lik avstand til punktet 1,f1 på kvar side av x=1 (punkt B og C på figuren). Vi teiknar så sekantane BA og AC og finn stigningstala til desse. No kan vi lage eit program som flyttar punkta B og C nærare og nærare A for å finne ein tilnærmingsverdi til den deriverte. Biletet viser startpunktet for programmet med tangenten og dei to sekantane teikna inn med sine stigningstal:

a) Lag ein algoritme som kan ligge til grunn for koden.

Løysing
  1. Først definerer vi funksjonen.

  2. Vi definerer x-verdien til punktet der vi skal finne den deriverte.

  3. Vi set startverdien for avstand frå B og C til A.

  4. Vi set nøyaktigheita for tilnærminga til h.

  5. Vi set startverdien for den deriverte til tangent.

  6. Vi set startverdien til forskjellen mellom to påfølgande tilnærmingar til  h+1.

  7. Vi startar ei lykkje som skal gå så lenge forskjellen mellom to påfølgande tilnærmingar er større enn h.

  8. Vi reknar ut stigningstala til dei to sekantane.

  9. Vi reknar ut gjennomsnittet av stigningstalet til dei to sekantane.

  10. Vi reknar ut forskjellen mellom dei to sekantane.

  11. Vi legg den siste tilnærminga inn i variabelen tangent.

  12. Vi halverer avstanden og startar lykkja på nytt.

  13. Vi må skrive ut tilnærminga når vi har komme langt nok.

b) Skriv koden.

Løysing
Python
1def f(x):
2    return x**3+4*x**2-x
3
4x = 1                #punktet vi skal finne den deriverte i
5avstand = 1          #kor langt vi skal gå til kvar side
6h = 0.0001           #kor nøyaktig vi krev at tilnærminga skal vere
7
8
9tangent = 20         #startverdi for den deriverte
10
11forskjell = h+1      #startverdi for while-lykkja
12
13
14while abs(forskjell) > h:                  #vilkåret for lykkja er at forskjellen mellom  
15                                           #denne og førre tilnærming er større enn h
16    sek_v = (f(x)-f(x-avstand))/avstand    #stigningstalet til venstre sekant
17    sek_h = (f(x+avstand)-f(x))/avstand    #stigningstalet til høgre sekant
18    tangent_2 = (sek_v + sek_h)/2          #gjennomsnittet til dei to stigningstala
19    forskjell = tangent_2 - tangent        #forskjellen mellom denne og førre tilnærming
20    tangent = tangent_2                    #legg den siste tilnærminga inn i 
21                                           #plasshaldaren "tangent"
22    avstand = avstand/2                    #halverer avstanden til punktet x = 1
23
24print(f"Den deriverte i {x} er tilnærma lik {tangent:.4f}.")
25

c) Utvid programmet frå oppgåve b) slik at ein brukar kan legge inn eit valfritt punkt der hen skal finne den deriverte.

Løysing
Python
1def f(x):
2    return x**3+4*x**2-x
3
4x = float(input("I kva for eit punkt vil du finne den deriverte?"))                 
5                     #innhentar det punktet vi skal finne den deriverte i
6avstand = 1          #kor langt vi skal gå til kvar side
7h = 0.0001           #kor nøyaktig vi krev at tilnærminga skal vere
8
9
10tangent = 20         #startverdi for den deriverte
11
12forskjell = h+1      #startverdi for while-lykkja
13
14
15while abs(forskjell) > h:                  #vilkåret for lykkja er at forskjellen mellom  
16                                           #denne og førre tilnærming er større enn h
17    sek_v = (f(x)-f(x-avstand))/avstand    #stigningstalet til venstre sekant
18    sek_h = (f(x+avstand)-f(x))/avstand    #stigningstalet til høgre sekant
19    tangent_2 = (sek_v + sek_h)/2          #gjennomsnittet til dei to stigningstala
20    forskjell = tangent_2 - tangent        #forskjellen mellom denne og førre tilnærming
21    tangent = tangent_2                    #legg den siste tilnærminga inn i 
22                                           #plasshaldaren "tangent"
23    avstand = avstand/2                    #halverer avstanden til punktet x = 1
24
25print(f"Den deriverte i {x} er tilnærma lik {tangent:.4f}.")
26

Oppgåve 3

Ta utgangspunkt i funksjonen f(x)=2x3+x2-2x. No skal du finne tilnærmingsverdiar til den deriverte i eit valfritt punkt ved hjelp av ein sekant som går gjennom to punkt på kvar side av dette punktet.

a) Skriv ein algoritme som du kan bruke som utgangspunkt for dette programmet.

Løysing
  1. Først definerer vi funksjonen.

  2. Vi må innhente x-verdien frå brukaren.

  3. Vi må ha ein variabel for kor langt frå x punkt B og C skal ligge, vi startar med 1.

  4. Vi må ha ei grense for kor nøyaktig tilnærminga skal vere.

  5. Vi må ha startverdi for stigningstalet til sekanten gjennom B og C.

  6. Vi må ha ein variabel for forskjellen mellom to påfølgande tilnærmingar.

  7. Vi må lage ei lykkje som halverer avstanden frå punkt B og C til A så lenge forskjellen på to påfølgande tilnærmingar er større enn den grensa vi valde i punkt 4.

  8. Vi må skrive ut tilnærminga når vi har komme langt nok.

b) Lag programmet.

Løysing
Python
1def f(x):
2    return 2*x**3+x**2-2*x
3
4#definerer funksjonen
5
6x = float(input("I kva for eit punkt vil du finne den deriverte?")) 
7#innhentar det punktet vi skal finne den deriverte i
8avstand = 1 #lagar ein variabel som gir avstanden frå (x,f(x))
9h = 0.0001 #lager ei grense for kor nøyaktig tilnærminga skal vere
10
11
12
13tangent = abs((f(x+avstand)-f(x-avstand))/(2*avstand)) + 2
14#lagar ein variabel for første tilnærming og legg til 2 for å vere sikker 
15#på at vilkåret i lykkja ikkje blir oppfylt i første ledd 
16
17forskjell = h+1
18#lagar ein variabel for forskjellen mellom to påfølgande tilnærmingar
19
20while abs(forskjell) > h:
21    
22    sek = (f(x+avstand)-f(x-avstand))/(2*avstand)
23    forskjell = sek - tangent
24    #finn forskjellen mellom dei to tilnærmingane
25    tangent = sek 
26    #tilordnar tangentverdien til den foreløpig siste tilnærminga
27    avstand = avstand/2 #halverer forskjellen for å gå nærare
28
29print(f"Den deriverte i {x} er tilnærma lik {tangent:.4f}.")

c) Utvid programmet så du kan legge inn ein valfri tredjegradsfunksjon.

Løysing
Python
1def f(a,b,c,d,x):
2    return a*x**3+b*x**2-c*x+d
3
4#definerer funksjonen
5
6a = float(input("Kva er a i tredjegradsfunksjonen din?"))
7b = float(input("Kva er b i tredjegradsfunksjonen din?"))
8c = float(input("Kva er c i tredjegradsfunksjonen din?"))
9d = float(input("Kva er d i tredjegradsfunksjonen din?"))
10#hentar inn koeffisientane i tredjegradsfunksjonen
11
12x = float(input("I kva for eit punkt vil du finne den deriverte?")) 
13#innhentar det punktet vi skal finne den deriverte i
14avstand = 1 #lagar ein variabel som gir avstanden frå (1,f(1))
15h = 0.0001 #lagar ei grense for kor nøyaktig tilnærminga skal vere
16
17
18tangent = abs((f(a,b,c,d,x+avstand)-f(a,b,c,d,x-avstand))/(2*avstand)) + 2
19#lagar ein variabel for første tilnærming og legg til 2 for å vere sikker 
20#på at vilkåret i lykkja ikkje blir oppfylt i første ledd 
21
22forskjell = h+1
23#lagar ein variabel for forskjellen mellom to påfølgande tilnærmingar
24
25while abs(forskjell) > h:
26    
27    sek = (f(a,b,c,d,x+avstand)-f(a,b,c,d,x-avstand))/(2*avstand)
28    forskjell = sek - tangent
29    #finn forskjellen mellom dei to tilnærmingane
30    tangent = sek 
31    #tilordnar tangentverdien til den foreløpig siste tilnærminga
32    avstand = avstand/2 #halverer forskjellen for å gå nærare
33
34print(f"Den deriverte i {x} er tilnærma lik {tangent:.4f}.")

d) Vis ved rekning at tilnærmingane i oppgåve 2 og oppgåve 3 eigentleg blir den same.

Løysing

Dersom vi forenklar uttrykket for gjennomsnittet i oppgåve 2, får vi

12fx+h-fxh+fx-fx-hh =12fx+h-fx+fx-fx-hh= fx+h-fx-h)2h

Dette er det same uttrykket vi reknar ut direkte i oppgåve 3.

Nedlastbare filer

Her kan du laste ned oppgåvene som Word- og pdf-dokument.

Skrive av Tove Annette Holter.
Sist oppdatert 01.11.2021