Du känner säkert till derivatans definition. För en given funktion
I Python finns ingen inbyggd funktionalitet att derivera funktioner, det får man skriva själv. Till den här övningen tillhandahåller jag en sådan funktion i filen derivata.py, och exempel på hur den används finns i filen newton-raphson.py. För att det ska fungera att använda deriveringsfunktionen måste dessa två filer ligga i samma katalog på lagringsmediet.
OBS! Filen derivata.py
ska du inte förändra alls i nedanstående övningar.
-
Pröva att ändra deriveringspunkten på den givna funktionen i filen newton-raphson.py. Kontrollera att resultatet stämmer med hjälp av deriveringsregler. Pröva också att ändra värdet på h (det är ju den som ska gå mot noll enligt definitionen).
-
Pröva att ändra funktionen till andra funktioner (en i taget, naturligtvis). Pröva en exponentialfunktion, en potensfunktion (t ex en kubikrot) och en logaritmisk funktion.
Derivata är användbart i många sammanhang. Ett sådant sammanhang du kanske inte kommit kontakt med ännu är att lösa ekvationer numeriskt. Det finns en metod som heter Newton-Raphsons metod. Den går till så att man
-
Gissar ett värde på en funktions nollställe
-
Detta värde sätts in i en metodens formel, varpå man får ut ett bättre värde
-
Detta bättre värde sätts in i formeln igen, vilket ger ett ännu bättre värde på lösningen. Så fortsätter man tills värdet inte förändras särskilt mycket.
Om en ekvation är skriven på formen
Här är
Ett exempel på beräkning finns på denna Wikipedia-sida. Newton-Raphsons metod fungerar med de flesta funktioner, men inte med alla gissningar. Numerisk lösning är inte något vi ska fördjupa oss i, men som vi kommer att se i programmeringsövningen nedan att vissa gissningar inte alls kommer att fungera.
- Utgå från filen newton-raphson.py och implementera
formeln för Newton-Raphsons metod för en funktion
$f$ . Skriv in formeln i enfor
-loop som gör att den kan itereras ett godtyckligt antal gånger. Lös ekvationerna nedan och få fram respektive lösning(ar) med fem korrekta decimaler (du måste pröva hur många iterationer som ska göras).
a.
Som du ser i filen så är modulen math
importerad som m
, och då erhålls den
naturliga logaritmen m.log(x)
.
b.
m.log10(x)
c.
d.
e.
f.
1-1j
. Kan du även hitta den tredje lösningen?