Newton-Raphson-Algorithmus: hier finden Sie alle Wurzeln umfassen negative
Wie kann ich Newton ' s Methode zu finden, alle Wurzeln des Polynoms, nicht nur einzigartig?
Link zum code: http://quantcorner.wordpress.com/2012/09/14/an-implementation-of-the-newton-raphson-algorithm-in-c-cpp-and-r/
Als Beispiel habe ich folgende Gleichung: x^2-12x+34=0
, wenn ich diese Formel bekomme ich nur eine root -4.5857
, wie kann ich ein zweiten root - 7.4142
?
Es hängt von der Ausgangspunkt. Legen Sie es auf etwas negatives/näher an der Wurzel und du wirst es bekommen.
also, wie kann ich einen code implementieren, gab ich zu finden, alle Wurzeln?
also, wie kann ich einen code implementieren, gab ich zu finden, alle Wurzeln?
InformationsquelleAutor user3215609 | 2014-01-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Starten Sie Ihren Newton-Raphson von einer unterschiedlichen Ausgangsposition.
Habe ich eingefügt, hier einige Codes die ich umgesetzt in der Entwicklung einer Bibliothek von financial instrument pricing. Siehe hier mein code für Newton-Raphson. Sie sehen, wie einer der Eingabe-Parameter start-position
double start
. Sie können starten aus verschiedenen Positionen auf einem Gitter, z.B. und vergleichen Sie die Lösungen mit dem, was Sie bereits gefunden haben als Lösung.T eine Klasse ist, wo Sie definiert haben, Funktionen zu bewerten, Ihre (quadratische) Gleichung (hier bezeichnet durch
double (T::*Value)(const double) const
in der Vorlage) und die Ableitung dieser Gleichung (hier bezeichnet durchdouble (T::*Derivative)(const double) const
in der Vorlage).Hinweis: ich habe auch einen exception-Klasse, die als Newton-Raphson einige Probleme hat.
Verwenden Sie den bisection-Algorithmus für ein stabiler Algorithmus.
In der Praxis können Sie zahlen, die kleiner als
1.E-6
.Wert sollte hier ein Zeiger auf eine Funktion, die wertet Ihre quadratische Funktion, das Ziel sollte auf 0 gesetzt werden und die Ableitung sollte ein Zeiger auf eine Funktion, wertet die Ableitung deiner Funktion.
In Ihrem Fall ist mein template-code kann vereinfacht werden:
Ersetzen Sie den code
diff = Target-(Object.*Value)(x);
mitdiff = (Object.*Value)(x);
Ersetzen
x = x - diff/(-derivative);
mitx = x - diff/(derivative);
Dieser code wird leicht erkennbar, wie die Newton-Raphson-Algorithmus.Wenn Sie möchten, erhöhen Sie die Geschwindigkeit der Konvergenz verwenden Halley ' s (ja, der Typ von der Kometen -) Algorithmus oder Householder-Algorithmus.
Siehe numerical recipes in c++ für die alternative Umsetzung. Numerische Rezepte in C++ ist das Buch zu gehen, um diese Art von Fragen.
InformationsquelleAutor user3116431