Newton's method, hitta noll punkten

Permalänk
Medlem

Newton's method, hitta noll punkten

Jag sitter och håller på och lära mig lite perl, dock har jag fastnat på ett litet delikat problem, jag ska impletera Newtons metod att hitta nollpunkten i programmet men jag är ganska osäker på hur jag ska göra, googlat en hel del men inte funnet något svar jag är nöjd med.

Någon som har löst detta problem förut och har lust att visa en liten bit kod av algorithmen och en god förklaring, helst perl, men andra språk är välkomna också givetvis!

Tack på förhand

Visa signatur

AMD Athlon 64 3000+, 1024 MB DDRAM PC3200, Powercolor ATI Radeon 9800 PRO, WD Raptor 36,7 GB SATA, 200 GB Seagate S-ATA, Hitachi 120 GB ATA

Permalänk
Hedersmedlem

Kan inte själv något om Perl, men kan detta vara något: http://www.ddj.com/web-development/184416187 ?

Visa signatur

Är du lycklig nu?

Frågor och funderingar angående modereringen tas med mail, inte genom forumet. dennizpop@sweclockers.com

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Denniz PoP
Kan inte själv något om Perl, men kan detta vara något: http://www.ddj.com/web-development/184416187 ?

Jag vill helst inte använda något CPAN ännu, men tack ändå!

Visa signatur

AMD Athlon 64 3000+, 1024 MB DDRAM PC3200, Powercolor ATI Radeon 9800 PRO, WD Raptor 36,7 GB SATA, 200 GB Seagate S-ATA, Hitachi 120 GB ATA

Permalänk
Medlem

Jag antar att det är http://en.wikipedia.org/wiki/Newton's_method du är ute efter att implementera? Isf är det inte alls speciellt svårt om du har en lätt-deriverad funktion.

def do_newtons(x0, a): xn = x0 - f(x0)/f_der(x0) if abs(xn - x0) < a: return xn else: return do_newtons(xn, a)

(i python då jag inte kan perl, men du kan säkert läsa ut vad den gör ändå)

I mitt exempel har jag antagit att funktionen f som du vill hitta nollvärde för finns definierad och att du även tagit fram en derivata av den och kallat derivatan för f_der. x0 som skickas in till do_newtons() är en första gissning som du eller ditt program kan göra (beroende på hur din funktion ser ut), och a är ett gräns för när metoden har fastnat i ett minimum och inte gör fler framsteg. Ju lägre desto fler iterationer och längre tid kommer det att ta, men slutresultatet blir exaktare.

Permalänk
Citat:

Ursprungligen inskrivet av vb
Jag antar att det är http://en.wikipedia.org/wiki/Newton's_method du är ute efter att implementera? Isf är det inte alls speciellt svårt om du har en lätt-deriverad funktion.

def do_newtons(x0, a): xn = x0 - f(x0)/f_der(x0) if abs(xn - x0) < a: return xn else: return do_newtons(xn, a)

(i python då jag inte kan perl, men du kan säkert läsa ut vad den gör ändå)

I mitt exempel har jag antagit att funktionen f som du vill hitta nollvärde för finns definierad och att du även tagit fram en derivata av den och kallat derivatan för f_der. x0 som skickas in till do_newtons() är en första gissning som du eller ditt program kan göra (beroende på hur din funktion ser ut), och a är ett gräns för när metoden har fastnat i ett minimum och inte gör fler framsteg. Ju lägre desto fler iterationer och längre tid kommer det att ta, men slutresultatet blir exaktare.

Det kan vara bra att ha en maxgräns för antalet iterationer. Speciellt då man har angivet ett litet a.

Ibland vill man leta upp ett nollställe som befinner sig inom ett visst intervall. Då kan det vara bra att kunna ange detta intervall också.

a:et brukar ofta markera hur många korrekta decimaler man vill ha. (a = 0,1 0,01 0,001 osv).

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av vb
Jag antar att det är http://en.wikipedia.org/wiki/Newton's_method du är ute efter att implementera? Isf är det inte alls speciellt svårt om du har en lätt-deriverad funktion.

def do_newtons(x0, a): xn = x0 - f(x0)/f_der(x0) if abs(xn - x0) < a: return xn else: return do_newtons(xn, a)

(i python då jag inte kan perl, men du kan säkert läsa ut vad den gör ändå)

I mitt exempel har jag antagit att funktionen f som du vill hitta nollvärde för finns definierad och att du även tagit fram en derivata av den och kallat derivatan för f_der. x0 som skickas in till do_newtons() är en första gissning som du eller ditt program kan göra (beroende på hur din funktion ser ut), och a är ett gräns för när metoden har fastnat i ett minimum och inte gör fler framsteg. Ju lägre desto fler iterationer och längre tid kommer det att ta, men slutresultatet blir exaktare.

Tackar tackar, inte hunnit fixa ett perl ännu, kom precis hem.

Visa signatur

AMD Athlon 64 3000+, 1024 MB DDRAM PC3200, Powercolor ATI Radeon 9800 PRO, WD Raptor 36,7 GB SATA, 200 GB Seagate S-ATA, Hitachi 120 GB ATA