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
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
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
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}.")