Euler (implizit)



  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum Datenbanken 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.



  • Schau mal in die Wiki. Du muss in jedem Schritt ein Gleichungssystem lösen.
    http://de.wikipedia.org/wiki/Implizites_Euler-Verfahren



  • Die Beschreibung bei wikipedia hilft mir nicht weiter. Ich kenne diese bereits!



  • Ich hoffe, ich habe das richtig verstanden. Du hast also eine DGL y(x)=f(x,y(x))y'(x) = f(x, y(x)). Dann lautet die Iterationsvorschrift beim impliziten Euler-Verfahren u_j=u_j1+hf(x_j,u_j)u\_j=u\_{j-1} + h f(x\_j, u\_j) (u sollen hier die approximierten Werte sein). D. h., du mußt bei jedem Schritt ein nichtlineares Gleichungssystem lösen: F(u_j):=u_j1u_j+hf(x_j,uj)=0F(u\_j) := u\_{j-1} - u\_j + h f(x\_j, u_j) = 0. Das kannst du dann z. B. mit dem Newton-Verfahren lösen mit uj1u_{j-1} als Startwert: J(u_ji)Δu_ji=f(u_ji),u_ji+1=u_ji+Δu_ji,i=0,1,...J(u\_j^i) \Delta u\_j^i = -f(u\_j^i), \, u\_j^{i+1} = u\_j^i + \Delta u\_j^i, \, i=0, 1, .... J sei hier die Jacobi-Matrix. So erhälst du dann deinen neuen Wert.



  • HI,

    Ja. Du hast mich richtig verstanden.

    Kannst Du Deinen Formalismus einmal explizit auf mein Beispiel anwenden - ich verstehe diesen momentan noch nicht. Da ich nur eine DGL löse, reduziert sich das GS auf eine Gleichung.

    thanks



  • Also: Das implizite Euler-Verfahren liefert
    u_j=u_j1+h(Au_jAexp(Bx_j)sin(Cxj))u\_j = u\_{j-1} + h(A u\_j - A\exp(B x\_j)\sin(C x_j))
    F(u_j):=u_j1u_j+h(Au_jAexp(Bx_j)sin(Cx_j))=0F(u\_j) := u\_{j-1} - u\_j + h(A u\_j - A\exp(B x\_j)\sin(C x\_j)) = 0
    Diese Gleichung mußt du nun lösen. Dazu kannst du - wie oben schon geschrieben - das Newton-Verfahren verwenden. Für diesen Sonderfall könntest du die Gleichung aber auch von Hand nach uju_j auflösen.



  • Hallo fubar,

    ich verstehe nun, was Du meinst. Könntest Du aber bitte noch einmal Stellung zu meiner anfänglich gestellten Frage nehmen. Ist mein Ansatz u_j mit dem expliziten Euler-Verfahren falsch, da das Verfahren dann nicht mehr implizit ist?



  • Ich verstehe deine Frage noch nicht so ganz, was genau willst du berechnen? So wie du es oben beschrieben hast, berechnest du explzit den neuen Wert und damit auch explizit die Ableitung. Wenn du das implizite Euler-Verfahren nutzen und die Ableitung bestimmen willst, könntest du, nachdem du implizit (durch das Lösen der i a. nichtlin. Gl.) u_j berechnet hast, die Ableitung über die Funktion f bestimmen.



  • Hallo,

    noch einmal, ich wollte Euler explizit und implizit miteinander mischen, indem ich zuerst u_j(*) explizit bestimme und mit diese Wert die Ableitung an der Stelle j bestimme.

    Der explizite Wert u_j* dient bei meinem Ansatz quasi als ein temporärer Wert.



  • Das ist dann aber nicht mehr das implizite Euler-Verfahren, sondern ein einfaches Prädiktor-Korrektor-Verfahren, das du aus dem expliziten/impliziten Euler-Verfahren konstruiert hast. Da haben wir dann vielleicht aneinander vorbei geredet?



  • Ganz im Gegenteil. Ich habe durch Dich gerade erst richtig verstanden, wie das Verfahren funktioniert.

    Könntest Du mir vielleicht noch erklären, warum der Ausdruck den durch formuliert hast, null werden muss?



  • Hallo,

    ich habe versucht Deinen Rat zu befolgen und das Gleichungssystem mit Newton zu lösen. Ich sehe allerdings noch nicht so recht wie ich dies machen muss.

    Das Newton-Verfahren sucht immer den Schnittpunkt der Tangente mit der x-Achse. An der neuen Position wird der nächste Funktionswert bestimmt. Der Vorgang erfolgt solange, bis eine gewünschte Genauigkeit erreicht wurde.

    Mein Problem ist aber, dass nur eine DGl gegeben ist - mit dieser kann ich nicht den Funktionswert an der Schnittstelle bestimmen. Wie soll ich also vorgehen?



  • Für dein Beispiel von oben sähe die zu lösende Gleichung so aus: u_j=u_j1+h(Au_jAexp(Bx_j)sin(Cxj))u\_j = u\_{j-1} + h(A u\_j - A\exp(B x\_j)\sin(C x_j))
    Bis auf u_j sind alle Werte bekannt, stellst du die Gleichung jetzt ein wening um, erhälst du uj1u_j+h(Au_jAexp(Bx_j)sin(Cx_j))=0u_{j-1} - u\_j + h(A u\_j - A\exp(B x\_j)\sin(C x\_j)) = 0. Jetzt definierst du eine Funktion in Abhängigkeit von u_j: F(u_j):=u_j1u_j+h(Au_jAexp(Bx_j)sin(Cx_j))F(u\_j) := u\_{j-1} - u\_j + h(A u\_j - A\exp(B x\_j)\sin(C x\_j)). Die Nullstelle dieser Funktion ist dein gesuchter Wert u_j.



  • Hallo,

    die Idee des Newton-Verfahrens ist mir schon klar.

    Mein Problem ist ein anderes:

    -Angenommen ich setze uj=uj1u_{j}=u_{j-1} als Startwert. Dann lässt sich ich eine Geradengleichung aufstellen. Mit dieser Funktion lässt sich der Schnittpunkt mit der X-Achse ermitteln (Das ist gerade die Idee des Newton-Verfahrens.) Mein Problem besteht darin, dass ich nun den Funktionswert an dem Schnittpunkt mit der X-Achse benötige, um den nächsten Newton-Schritt auszuführen. Aber diesen kenne ich nicht, bzw. ich sehe nicht wie ich ihn bekomme...



  • Hallo,

    die Idee des Newton-Verfahrens ist mir schon klar.

    Mein Problem ist ein anderes:

    Angenommen ich setze uj=uj1u_{j}=u_{j-1} als Startwert. Dann lässt sich ich eine Geradengleichung aufstellen. Mit dieser Funktion lässt sich der Schnittpunkt mit der X-Achse ermitteln (Das ist gerade die Idee des Newton-Verfahrens.) Mein Problem besteht darin, dass ich nun den Funktionswert an dem Schnittpunkt mit der X-Achse benötige, um den nächsten Newton-Schritt auszuführen. Aber diesen kenne ich nicht (,da mir nur die Ableitung über die DGL. bekannt ist), bzw. ich sehe nicht wie ich ihn bekomme...


Anmelden zum Antworten