Nullstellen Berechnen



  • Hi Leute,

    ich hab ein rießen problem. Unzwar soll ich in der Schule ein Programm in c++ schreiben das die Kurvendisskusion kann.

    Mein Problem ist nun folgendes: es gibt ja nicht nur x²+x+n Funktionen wo man die Mitternachtsformel nehmen kann sonder auch unendlich verschiedene. Normalerweise würde man für die anderen x Funktionen die Polynomdivision nehmen, aber man kann dem pc ja schwer das raten der zahl bei bringen, weil man ja dann unendlich viele zahlen nehmen müsst.

    Und meine Frage ist nun ob ihr einen weg wüsstet wie ich das machen könnte das es von jeder dieser Funktionen die Nullstelle ausrechnet. Vielleicht weis auch jemand wie ich das mit Polynomdivision machen kann.

    Schon mal vielen Dank für eure antworten.



  • Das Newtonverfahren ist dafür geeignet. Als Ableitung sollte es auch der Differenzquotient mit kleinem Δx tun.



  • Die Konvergenz des Newtonverfahrens ist nur gesichert, wenn

    1. die Nullstelle keine Ableitung 0 besitzt (wenn nicht vorhanden, kann man dies durch veränderte Newtoniteration lösen, sofern die Anzahl an Ableitungen, die gleich 0 bei der Nullstelle sind, bekannt ist)

    2. die Konvergenz ist nur in einem beliebig kleinen Intervall gesichert. Auch hier gibt es eine Lösung, die ich dir jedoch nur aufschreibe, wenn es wirklich sein muss (müsste meinen alten Numerik-Hefter rauskramen)

    3. die Nullstelle muss reell sein. Falls sie dies nicht ist, dürfte der Satz von Newton-Kantorovich weiterhelfen (man sehe eine komplexe Funktion einfach als Funktion von R2->R2).

    4. das Newton-Verfahren liefert nur irgendeine Nullstelle. Damit du garantiert alle - mit hinreichender Genauigkeit - findest, ist im Allgemeinen einiges an Hirnschmalz und Numerikkenntnissen erforderlich



  • Es müsste sein 😕 Das ist sozusagen ne Prüfung die ich da schreiben muss gibt Punkte und note und ich komme kein stück weiter. Bin also für jede Hilfe sehr aufgeschlossen.

    Wie Programmiere ich das am besten?

    Ich hab die Funktion die eingegeben wird erstmal mit strings auseinander genommen damit jede x zahl und hoch zahl einzelnd steht.
    Beispiel:

    4x^6+3x²+7x+2

    das wird auseinander genommen und steht so dran
    zahl: 4 Hochzahl 6
    zahl: 3 Hochzahl 2
    zahl: 7 Hochzahl 0

    Hab ihr da vielleicht ne bessere lösung? wenn ihr wollt kann ich euch mal den Quallcode zeigen.



  • Wenn du mir deine E-Mail-Adresse gibst, kann ich dir vielleicht ein wenig alten Code von mir zukommen lassen.

    Ist zwar nicht exakt das, was du zum Einlesen brauchst, aber vielleicht wird es dir die Arbeit erleichtern:

    -Einlesen von Termen in geklammerter Praefix-Notation in C++ (und Durchführen von ein paar simplen Vereinfachungen davon) -> meiner Beobachtung nach ziemlich solide Codebasis aber leider an gewissen Stellen viel Spaghetticode. Enthält außerdem Code zum Berechnen von Ableitungen (jedoch nur Operationen +, *, - (Negation, also -a, nicht a-b), dies sollte es jedoch für dich tun, wenn ich dich richtig verstanden habe.

    geklammerte Praefixnotation heißt:

    statt: (a+b)*c tippst du etwas vom Typ *(+(a,b),c)

    Den Code stelle ich unter GPL-Lizenz zur Verfügung. Heißt also unter anderem, wenn du ihn als Basis verwenden willst, musst du alles, was auf dieser Codebasis arbeitet, wieder unter GPL-Lizenz der Allgemeinheit mit Quelltext zur Verfügung stellen (insbesondere ich selbst wäre an deinen Verbesserungen interessiert).

    ----

    -Einlesen von Termen mit +,-,*,/,(,) und so in klassischer Infix-Notation in Java und Ausgabe in binärer Praefix-Notation.

    Lizenz: noch keine, da eigentlich nicht zur Veröffentlichung gedacht (nur Übungsaufgabe für Uni). GPL würde ich sofort mitmachen, wenn du eine liberale Lizenz brauchst, können wir darüber reden, wenn du mir einen guten Grund geben kannst.



  • Kann ich dir keine PN oder so etwas schicken? Ich seh das hier nicht.


Anmelden zum Antworten