Hopp til innhold
Oppgave

Hvordan bestemme den deriverte i et punkt numerisk

Her finner du oppgaver for å øve på å finne den deriverte numerisk.

2.3.40

Utvid programmet fra teorisida slik at en bruker kan legge inn et valgfritt punkt der man skal finne den deriverte.

Løsningsforslag
Python
1def f(x):
2    return x**3+4*x**2-x
3
4x = float(input("I hvilket punkt vil du finne den deriverte?"))                 
5                     # innhenter det punktet vi skal finne den deriverte i
6avstand = 1          #hvor langt vi skal gå til hver side
7h = 0.0001           #hvor nøyaktig vi krever at tilnærmingen skal være
8
9
10tangent = 20         #startverdi for den deriverte
11
12forskjell = h+1      #startverdi for while-løkka
13
14
15while abs(forskjell) > h:                  #vilkåret for løkka er at forskjellen mellom  
16                                           #denne og forrige tilnærming er større enn h
17    sek_v = (f(x)-f(x-avstand))/avstand    #stigningstallet til venstre sekant
18    sek_h = (f(x+avstand)-f(x))/avstand    #stigningstallet til høyre sekant
19    tangent_2 = (sek_v + sek_h)/2          #gjennomsnittet til de to stigningstallene
20    forskjell = tangent_2 - tangent        #forskjellen mellom denne og forrige tilnærming
21    tangent = tangent_2                    #legger den siste tilnærmingen inn i 
22                                           #plassholderen "tangent"
23    avstand = avstand/2                    #halverer avstanden til punktet x = 1
24
25print(f"Den deriverte i {x} er tilnærmet lik {tangent:.4f}.")
26

2.3.41

Ta utgangspunkt i funksjonen f(x)=2x3+x2-2x. Du skal nå finne tilnærmingsverdier til den deriverte i et valgfritt punkt ved hjelp av en sekant som går gjennom to punkter på hver side av dette punktet.

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

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

  2. Vi må innhente x-verdien fra brukeren.

  3. Vi må ha en variabel for hvor langt fra 1 punkt B og C skal ligge, vi starter med 1.

  4. Vi må ha ei grense for hvor nøyaktig tilnærmingen skal være.

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

  6. Vi må ha en variabel for forskjellen mellom to påfølgende tilnærminger.

  7. Vi må lage ei løkke som halverer avstanden fra punkt B og C til A så lenge forskjellen på to påfølgende tilnærminger er større enn den grensa vi valgte i punkt 4.

  8. Vi må skrive ut tilnærmingen når vi har kommet langt nok.

b) Lag programmet.

Løsningsforslag
python
1def f(x):
2    return 2*x**3+x**2-2*x
3
4#definerer funksjonen
5
6x = float(input("I hvilket punkt vil du finne den deriverte?")) 
7#innhenter det punktet vi skal finne den deriverte i
8avstand = 1 #lager en variabel som gir avstanden fra (1,f(1))
9h = 0.0001 #lager ei grense for hvor nøyaktig tilnærmingen skal være
10
11
12
13tangent = abs((f(x+avstand)-f(x-avstand))/(2*avstand)) + 2
14#lager en variabel for første tilnærming og legger til 2 for å være sikker 
15#på at vilkåret i løkka ikke oppfylles i første ledd 
16
17forskjell = h+1
18#lager en variabel for forskjellen mellom to påfølgende tilnærminger
19
20while abs(forskjell) > h:
21    
22    sek = (f(x+avstand)-f(x-avstand))/(2*avstand)
23    forskjell = sek - tangent
24    #finner forskjellen mellom de to tilnærmingene
25    tangent = sek 
26    #tilordner tangentverdien til den foreløpig siste tilnærmingen
27    avstand = avstand/2 #halverer forskjellen for å gå nærmere
28
29print(f"Den deriverte i {x} er tilnærmet lik {tangent:.4f}.")

c) Utvid programmet så du kan legge inn en valgfri tredjegradsfunksjon.

Løsningsforslag
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("Hva er a i din funksjon?"))
7b = float(input("Hva er b i din funksjon?"))
8c = float(input("Hva er c i din funksjon?"))
9d = float(input("Hva er d i din funksjon?"))
10#henter inn koeffisientene i tredjegradsfunksjonen
11
12x = float(input("I hvilket punkt vil du finne den deriverte?")) 
13#innhenter det punktet vi skal finne den deriverte i
14avstand = 1 #lager en variabel som gir avstanden fra (1,f(1))
15h = 0.0001 #lager ei grense for hvor nøyaktig tilnærmingen skal være
16
17
18tangent = abs((f(a,b,c,d,x+avstand)-f(a,b,c,d,x-avstand))/(2*avstand)) + 2
19#lager en variabel for første tilnærming og legger til 2 for å være sikker 
20#på at vilkåret i løkka ikke oppfylles i første ledd 
21
22forskjell = h+1
23#lager en variabel for forskjellen mellom to påfølgende tilnærminger
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    #finner forskjellen mellom de to tilnærmingene
30    tangent = sek 
31    #tilordner tangentverdien til den foreløpig siste tilnærmingen
32    avstand = avstand/2 #halverer forskjellen for å gå nærmere
33
34print(f"Den deriverte i {x} er tilnærmet lik {tangent:.4f}.")