Ohne den Code ausgeführt zu haben, ist meine erste Schätzung, dass Sie mit Gleitkommawerten für die Gleichheit vergleichen, um festzustellen, ob Ihre Lösung konvergiert ist.
%Vor%Vielleicht sollten Sie es als Verhältnis berechnen:
%Vor%Ich bin mir nicht sicher, warum genau, aber die Überprüfung, ob die Funktion schnell genug abnimmt, scheint in diesem Fall nicht zu funktionieren.
Es funktioniert, wenn ich es so mache:
%Vor%AKTUALISIEREN
Es sieht so aus, als gäbe es ein Problem in Ihrem Code:
%Vor%sollte
sein %Vor%Kurze Erklärung des Problems: Ich verwende den Newton-Raphson-Algorithmus für das Wurzelfinden in Polynomen und funktioniert in einigen Fällen nicht. Warum?
Ich habe aus "numerischen Rezepten in C ++" einen Newton-Raphson-Hybrid-Algorithmus genommen, der halbiert, falls New-Raph nicht richtig konvergiert (mit einem niedrigen Ableitungswert oder wenn die Konvergenzgeschwindigkeit nicht schnell ist).
Ich habe den Algorithmus mit mehreren Polynomen überprüft und es hat funktioniert. Jetzt teste ich innerhalb der Software, die ich habe, und ich habe immer einen Fehler mit einem bestimmten Polynom bekommen. Mein Problem ist, dass ich nicht weiß, warum dieses Polynom einfach nicht zum Ergebnis kommt, wenn es viele andere tun. Da ich den Algorithmus für jedes Polynom verbessern möchte, muss y wissen, welcher der Gründe für keine Konvergenz ist, damit ich ihn richtig behandeln kann.
Nachfolgend werde ich alle Informationen, die ich über den Algorithmus und das Polynom, in dem ich den Fehler habe, bereitstellen kann, veröffentlichen.
Das Polynom:
%Vor%Es ist die erste Ableitung:
%Vor%Plot:
Wurzeln (von Matlab):
%Vor%Algorithmus:
%Vor%Der Algorithmus wird mit den nächsten Variablen aufgerufen:
%Vor%Das Problem besteht darin, dass der Algorithmus die maximalen Iterationen überschreitet und es einen Fehler für die Wurzel von ungefähr %code% gibt.
Also meine direkte und abgeklärte Frage ist: Warum erreicht dieses Polynom keinen genauen Fehler, wenn viele (1000 mindestens) andere sehr ähnliche Polynome tun (wuth 1e-10 der Präzision und wenige Iterationen!)
Ich weiß, dass die Frage schwierig ist und vielleicht keine direkte Antwort hat, aber ich stecke seit einigen Tagen damit herum und weiß nicht, wie ich es lösen soll. Vielen Dank, dass Sie sich Zeit genommen haben, meine Frage zu lesen.