Hvordan bestemme den deriverte i et punkt 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 . 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
Først definerer vi funksjonen.
Vi må innhente x-verdien fra brukeren.
Vi må ha en variabel for hvor langt fra 1 punkt B og C skal ligge, vi starter med 1.
Vi må ha ei grense for hvor nøyaktig tilnærmingen skal være.
Vi må ha startverdi for stigningstallet til sekanten gjennom B og C.
Vi må ha en variabel for forskjellen mellom to påfølgende tilnærminger.
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.
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}.")