Benutzer-Werkzeuge

Webseiten-Werkzeuge


einfuehrung_in_die_numerik

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
einfuehrung_in_die_numerik [2024/01/13 14:00] torsten.roehleinfuehrung_in_die_numerik [2024/01/13 15:13] (aktuell) torsten.roehl
Zeile 81: Zeile 81:
  
 ====Das Euler-Verfahren zur numerischen Lösung von Differentialgleichungen ==== ====Das Euler-Verfahren zur numerischen Lösung von Differentialgleichungen ====
 +
 +|<wrap lo>**Diskretisieren** die unendlich kleine
 +Größe, z.B. dt wird durch eine kleine
 +aber endliche Größe (hier Δt)  ersetzt.\\ \\ <color #00a2e8> **Anfangsbedinungen**:
 +Jede numerische
 +Lösung setzt voraus,
 +dass man die Anfangsbedingungen kennt. Im vorliegenden Fall bedeutet das, dass der Ort und die Geschwindigkeit am Anfang bekannt sein muss (x(0), v(0)).</color>
 +</wrap> |<wrap lo>Wir demonstrieren das Euler-Verfahren am Beispiel des Federpendels (Hook'sche Gesetz).  $$ \frac{dv}{dt} = - \frac{k}{m} x$$ $$\frac{dx}{dt} = v$$Das Differential dt stellt eine unendlich kleine Größe dar. So etwas können wir mithilfe des Computers nicht simulieren. Deshalb ist es notwendig, solche unendlich kleinen Größen durch zwar kleine aber endliche Größen zu ersetzen. Für dt schreiben wir dann  Δt und aus dx wird: dx ≈ x(t+Δt)-x(t),
 +sowie für dv ≈ v(t+Δt)-v(t), d.h. wir bilden jeweils Differenzen. Hiermit ergibt sich dann für das Hook'sche
 +Gesetz \\ //(bitte unbedingt nachrechnen)//: $$\frac{dv}{dt} = - \frac{k}{m}x \rightarrow dv = -\frac{k}{m} x dt \rightarrow v(t+\Delta t) = v(t) - \frac{k}{m}x \Delta t   $$ und $$ \frac{dx}{dt}=v \rightarrow dx = vdt \rightarrow x(t+ \Delta t) = x(t) + v(t)\Delta t$$ Wir sind hier nur daran interessiert, das Verfahren kennenzulernen, deshalb setzen wir im Weiteren k=m=1
 +Hieraus resultieren dann die von uns verwendeten Gleichungen zur numerischen Lösung: $$x(t+\Delta t) = x(t) + v(t) \Delta t$$ $$v(t+\Delta t)=v(t) -x(t) \Delta t$$ Mithilfe der ersten Gleichung kann man die Position (Ort) des Teilchen im nächsten Zeitschritt Δt bestimmen. Und mithilfe der zweiten Gleichung ist es möglich, die Geschwindigkeit im nächsten Zeitschritt zu bestimmen. Grundsätzlich
 +können wir also, wenn wir den Ort und die Geschwindigkeit kennen auch Ort und Geschwindigkeit im nächsten Schritt bestimmen. Trotzdem können wir diese Gleichung momentan noch nicht benutzen, denn erst wenn wir den Ort x(0) und die Geschwindigkeit v(0) am Anfang kennen, können wir diese Gleichung verwenden, um für jeden beliebigen Zeitpunkt Ort und Geschwindigkeit iterativ zu bestimmen. </wrap>
  
 {{:inf:sample.gif?|}} {{:inf:sample.gif?|}}
Zeile 120: Zeile 132:
 </Code> </Code>
 ====Das Euler-Cromer-Verfahren zur numerischen Lösung von Differentialgleichungen ==== ====Das Euler-Cromer-Verfahren zur numerischen Lösung von Differentialgleichungen ====
 +Die Gleichungen für das Euler-Cromer- Verfahren sind fast identisch mt denen des Euler-Verfahrens.
 +Lediglich bei der Berechnung des Ortes wird die gerade erst berechnete Geschwindigkeit eingesetzt, wohingegen das Euler-Verfahren dort mit dem "alten" Geschwindigkeitswert weiter rechnet. 
 + 
 +$$v(t+\Delta t) = v(t) - x(t) \Delta t)$$
  
 +$$x(t+\Delta t) = x(t) + v(t+\Delta t) \Delta t$$
 +
 +Dennoch im Ergebnis unterscheiden sich die Verfahren stark. Will man z.B. Planetenbahnen berechnen, ist das Euler-Verfahren im allgemeinen unbrauchbar.
 +
 +<WRAP center round info 100%>
 +Die hier vorgestellten einfachen Verfahren zur numerischen Lösung von Differentialgleichungen, werden in der Praxis i.a. durch raffiniertere numerische Verfahren ersetzt (z.B. Runge-Kutta Methoden).
 +</WRAP>
 +
 +
 +
 +<Code Java linenums:1>public class EulerCromer{
 +   private double x;
 +   private double v;  
 +   private double t; 
 + 
 + public EulerCromer() {}
 + 
 +  public void init(double x0, double v0, double timeStep){
 +      t = timeStep;
 +      v = v0 - x0 * t;
 +      x = x0 + v * t;
 +   
 +  public void nextEulerCromer(){ 
 +      v = v + x * t;
 +      x = x - v * t;
 +  } 
 +  public double getX(){
 +    return x;
 +  } 
 +  public double getV() {
 +     return v; }
 +}
 +</Code>
 ====Vergleich der beiden Verfahren ==== ====Vergleich der beiden Verfahren ====
 {{ :inf:euler-eulercromer.png? |}} {{ :inf:euler-eulercromer.png? |}}
einfuehrung_in_die_numerik.1705154435.txt.gz · Zuletzt geändert: 2024/01/13 14:00 von torsten.roehl