 // Main VL template
#import "../preamble.typ": *

// Fix theorems to be shown the right way in this document
#import "@preview/ctheorems:1.1.3": *
#show: thmrules

// Main settings call
#show: conf.with(
	// May add more flags here in the future
	num: 4,
	type: 0, // 0 normal, 1 exercise
	date: datetime.today().display(),
	//date: datetime(
	//	year: 2025,
	//	month: 5,
	//	day: 1,
	//).display(),
)

= Stabilitaet des Euleralgorithmus im harmonischen Oszillator

Aussagen ueber die Langazeitstabilitaet.

Beispiel fuer Stabilitaet ist die gedaempfte harmonische Schwingung.

$
	dot.double(y) + gamma dot(y) + omega_0^2 y =  0.
$

Auf dieses System kann wieder der Euler-Algorithmus angewendet werden.

Dabei propagiert der Fehler mit $arrow(e) (t + Delta t)$

$
	(dif T) / (dif e) = mat(
		1, Delta t;
		- omega_0 ^2 Delta t, 1- gamma Delta t;
	).
$
Wenn man die EW von dieser Matrix bestimmt, dann ist der Betrag von allen Eigenwerten kleiner als Eins,
wenn $omega_0 Delta t < gamma < 2 omega_0 $ fuer die unterdaempfte Schwingung.

= Fehlerkontrolle

$
	y (t + Delta t ) = y ^((0)) (t +  Delta t ) + c Delta t ^(m + 1) +  O (Delta t ^(m + 2) ),
$
wobei $m$  die Ordnung des Algoritmus, $m + 1$ der lokale Fehler und $m$ der globale Fehler ist.

== Zweischritt-Verfahren

Neben dem Fehler durch bestimmen von einem Schritt kann der Fehler bei zwei Schritten gebildet werden.
Dann kann davon die Differenz gebildet werden und es koennen so Aussagen ueber das Verhalten des Systems gewonnen werden.

$
	y (t) = y^(0) (t) \
	y (t + (Delta t ) / (2) ) = y^(0) (t + (Delta t ) / (2)  ) +  c (t + (Delta t ) / (2)  )^(m + 1)  +  ...\
	y_2  (t + Delta t) = y^(0) (t +  Delta t ) + 2 c ((Delta t ) / (2) )^(m + 1)  +  ...
$

Das Ziel ist hier $Delta t $ so zu waehlen, dass der Fehler kleiner als $s_0 $ wird.


// Random calculations need to understand this
$
	abs(c) Delta t ^(m + 1) (1 - (1) / (2^(m) )) =  abs(y_1 - y_2 ) \
	abs(c) tilde(Delta t )^(m + 1)  <= delta_0 \
	((tilde(Delta t )) / (Delta t ) )^(m + 1)  (1) / (1 - (1) / (2^(m) ) )  <= (delta_0 ) / (abs(y_1 - y_2 ))  \
	tilde(Delta t )^(m + 1)  <= (delta_0 ) / (abs(y_1 - y_2 )) Delta t ^(m + 1)  (2^(m) - 1) \
	< (delta_0 ) / (abs(y_1 - y_2 )) Delta t ^(m + 1) \
	tilde(Delta t )< Delta t ((delta_0 ) / (abs(y_1 - y_2 )))^((1) / (m + 1) ) 
$

== Der Algorithmus

- Zuerst wird ein $Delta t $ gewaehlt.
- Dann wird das Einschritt- und das Zweischritt-Verfahren durchgefuehrt
$
	tilde(Delta t )_("opt") =  Delta t ((delta_0 ) / (abs(y_1 - y_2 )) )^((1) / (m + 1) ) 
$

+ $tilde(Delta t ) < Delta t $: neue Integration von $t$ nach $t p_l Delta t $ mit dem verkleinerten Zeitschritt $tilde(Delta t )"opt"$
+ $tilde(Delta t ) > Delta t $: behalte Ergebnis $y_2 (t +  Delta t )$ und erhoehe um naechsten Zeitschritt $Delta t$ auf $tilde(Delta t )_("opt") $

Dies ist wichtig fuer Probleme wo es notwendig ist die Zeitschritte an die Konfiguration des Systems anzupassen.
Zum Beispiel ist dies gut im Keplerproblem, denn dort kann sich das Objekt entweder sehr schnell oder sehr langsam bewegen.
Dies ist ein Prozess der mitlaufgen gelassen werden kann.
Molekulardynamik Simulationen brauchen dies nicht so wie Astrophysik Simulationen.

Beispiel des Fussballtors mit verschiedenen Kraeften
- Wind
- Gravitation
- Reibung
- Magnus

Fuer die Modellbildung werden dann verschiedene Prameter des Systems und die Wirkung auf die Umwelt aufgeschrieben.
- Wechselwirkungen
- Erhaltungssaetze
- Gleichungen

Entdimensionalisierung fuer den Computer.

