Lösung der Gleichung: x³ - 3x - 200 = 0



  • geloescht schrieb:

    habe einfach mal auf der wikipedia nach "kubische gleichung" gesucht und da sind doch Lösungsformeln. Wo ist also noch das Problem? Mithilfe von <cmath> ist das doch ganz easy...
    geloescht

    PS: *Schreiben* wird dir das programm hier niemand, weil wir allesamt fies und faul sind 😃

    Wir haben heut damit angefangen. "Näherungsweise bestimmen von Gleichungen" oder so... dann haben wir das halt als HA aufbekommen - ich soll halt n Script finden/schreiben, egal in welcher Sprache...



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Mathematik verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • masterofx32 schrieb:

    Nick- schrieb:

    Heute hat mein Mathelehrer gemeint, wenn ich ein Programm schreiben würde, welches die Gleichung x³ - 3x - 200 = 0 löst.

    ,dann...? 😕

    Soll das näherungstechnisch berechnet werden? Soll es einen Gleichungsparser beinhalten oder nur die Eingabe von Exponenten und Koeffizienten dieser vorgegebenen Gleichung?

    Sry, ich meinte, dass er mich gefragt hat.
    Ja, näherungstechnisch



  • ach, ein programm soll's werden. da hilft
    volkards vereinfachter prolynomlöser.

    a) nimm die gleichung und isoliere die höchste potenz
    x³ - 3x - 200 = 0
    x³ = 3x + 200

    b) radiziere sie weg
    x = (3x + 200) hoch (1/3)

    c) schreib ne schleife drum

    double x=2;
    for(;;){
       x=pos(3*x+200,1.0/3);
       cout<<x<<endl;
    }
    

    d) lies die lösung ab.



  • Naja, ob das einer für dich macht, ist schwer zu sagen, obwohl es ja eigentlich kein großer Aufwand ist. Es würde sich aber auch empfehlen, bei Google mal nach dem Newton-Verfahren und C++ zu suchen, da wirst du sicherlich fündig werden.



  • Im Sinne von Volkards universeller Lösung könnte man auch

    std::cout << "Die Lösung der Gleichung (x^3)-(3*x)-200 ist 6.01899";
    

    schreiben. 😉



  • volkard schrieb:

    ach, ein programm soll's werden. da hilft
    volkards vereinfachter prolynomlöser.

    a) nimm die gleichung und isoliere die höchste potenz
    x³ - 3x - 200 = 0
    x³ = 3x + 200

    b) radiziere sie weg
    x = (3x + 200) hoch (1/3)

    c) schreib ne schleife drum

    double x=2;
    for(;;){
       x=pos(3*x+200,1.0/3);
       cout<<x<<endl;
    }
    

    d) lies die lösung ab.

    Danke! Ich glaub(!), das dürft reichen. Kannst du mir die Schleife nur mal bisschen genauer erklären, falls ich morgen gefragt werde, was da passiert...



  • volkard schrieb:

    for(;;){
    x=pos(3*x+200,1.0/3);
    cout<<x<<endl;
    }

    pos?



  • net schrieb:

    pos?

    pow



  • die schleife näher erklären? ich denk du hast viel programmiert? sonnst einfach mal laufen lassen, dass ist doch sogar für einen blinden zu erkennen, was die schleife bewirkt (also ganz ehrlich ma...)



  • Ollülein schrieb:

    ich denk du hast viel programmiert?

    da zweifle ich langsam daran.. sonst wüsste er wo er die infos kriegen würde.



  • Ollülein schrieb:

    die schleife näher erklären? ich denk du hast viel programmiert? sonnst einfach mal laufen lassen, dass ist doch sogar für einen blinden zu erkennen, was die schleife bewirkt (also ganz ehrlich ma...)

    Echt? Dann erzähl mal. Aber bitte nicht sowas wie "Der Variablen x wird blabla zugewiesen", sondern warum da ne korrekte Lösung rauskommt.

    Bin gespannt auf Deine Erklärung!



  • *popcorn-hol*



  • Walli schrieb:

    *popcorn-hol*

    Krieg ich was ab?

    Biiiitte 🙂



  • Du darfst die Sprache aussuchen? Nimm Maple!

    solve(x^3 - 3*x - 200 = 0, x);
    

    Oder fang einfach an, nachzudenken...



  • Jester schrieb:

    Ollülein schrieb:

    die schleife näher erklären? ich denk du hast viel programmiert? sonnst einfach mal laufen lassen, dass ist doch sogar für einen blinden zu erkennen, was die schleife bewirkt (also ganz ehrlich ma...)

    Echt? Dann erzähl mal. Aber bitte nicht sowas wie "Der Variablen x wird blabla zugewiesen", sondern warum da ne korrekte Lösung rauskommt.

    Bin gespannt auf Deine Erklärung!

    Hm überseh ich da was, oder ist es wirklich so schwer?
    Nach den ersten 2-3 Durchgängen kommt immer das gleiche heraus weil die Parabel durch den Punkt (6.01899|6.01899) geht, also muss für den eingesetzten x-wert immer der gleiche y-wert herauskommen.



  • Das funktioniert aber nur, wenn die Funktion gutartig ist, bzw. Du den Startwert eben so hinlegst, daß die Funktion da grad gutartig ist. Wenn Du den Startwert "falsch" wählst, dann kann das ganze auch irgendwohin ins unendliche abhaun und Du kriegst keinen Wert. Die Konvergenz ist garnicht so einfach nachzuweisen.

    Stichwort für Interessierte: Banachscher Fixpunktsatz

    Also so wirklich "klar", daß das funktioniert isses nicht direkt.

    Es ist klar: sobald Du mal die richtige Stelle erwisch hast, dann kommt nach dem Einsetzen wieder der alte Wert raus. Die Nullstelle ist nämlich ein Fixpunkt der von Volkard neu gebastelten Funktion mit der 3. Wurzel. Die Frage die sozusagen bleibt ist: warum können wir einfach iterieren und laufen an die richtige Stelle. Die Antwort (und auch die nötigen Voraussetzungen) stehen im Fixpunktsatz.

    Es geht jedenfalls nicht mit allen Funktionen bzw. allen Startwerten.

    MfG Jester



  • Jester schrieb:

    Das funktioniert aber nur, wenn die Funktion gutartig ist, bzw. Du den Startwert eben so hinlegst, daß die Funktion da grad gutartig ist. Wenn Du den Startwert "falsch" wählst, dann kann das ganze auch irgendwohin ins unendliche abhaun und Du kriegst keinen Wert. Die Konvergenz ist garnicht so einfach nachzuweisen.

    Stichwort für Interessierte: Banachscher Fixpunktsatz

    Also so wirklich "klar", daß das funktioniert isses nicht direkt.

    Es ist klar: sobald Du mal die richtige Stelle erwisch hast, dann kommt nach dem Einsetzen wieder der alte Wert raus. Die Nullstelle ist nämlich ein Fixpunkt der von Volkard neu gebastelten Funktion mit der 3. Wurzel. Die Frage die sozusagen bleibt ist: warum können wir einfach iterieren und laufen an die richtige Stelle. Die Antwort (und auch die nötigen Voraussetzungen) stehen im Fixpunktsatz.

    Es geht jedenfalls nicht mit allen Funktionen bzw. allen Startwerten.

    MfG Jester

    Hm ich dachte das wäre nur Zufall, dass Volkard die 2 benutzt hat und das so ging, aber hätte nicht gedacht, dass man das sogar ausrechnen kann.



  • Jester schrieb:

    Ollülein schrieb:

    die schleife näher erklären? ich denk du hast viel programmiert? sonnst einfach mal laufen lassen, dass ist doch sogar für einen blinden zu erkennen, was die schleife bewirkt (also ganz ehrlich ma...)

    Echt? Dann erzähl mal. Aber bitte nicht sowas wie "Der Variablen x wird blabla zugewiesen", sondern warum da ne korrekte Lösung rauskommt.

    Bin gespannt auf Deine Erklärung!

    ups 🙂
    muss mich entschulidigen, muss gestehen, dass ich mich verlesen hatte, tut mir leid...

    ich hatte (singemäß) gelesen:

    double x = 2;
    for(;;) {
        x = pow(..., 1/3.0 );
        cout << x << endl:;
    }
    

    naja, darum sah das für mich wie ein scherz von volkard aus, zusammen mit dem spruch "die lösung ablesen"...
    wie ne endlosschleife die immer das selbe ausgibt sah es für mich aus...
    nächstes ma schau ich genau hin... 😃


Anmelden zum Antworten