Fandom

Scratchpad

Numerik1:Explizites Einschrittverfahren in der Praxis

215,809pages on
this wiki
Add New Page
Discuss this page0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Explizite Einschrittverfahren in der Praxis

Wiederholung:

Wir suchen mittels des Einschrittverfahrens einen Näherungswert

y_h(L) \approx y(L)

für die Funktion

y : [0,L] \subset \mathbb{R} \rightarrow \mathbb{R}^d \,,

die folgendes System gewöhnlicher Differentialgleichungen und die Anfangsbedingung erfüllt:


(1) \quad y'(x) = f(x,y(x)) \,, \quad y(0) = y_0 \,.

Explizites Eulerverfahren

y_h(x+h) = y_h(x) + h f(x,y_h(x))

Taylor-Entwicklung

y(x+h) = y(x) + h f(x,y(x)) + \frac{1}{2} h^2 y''(x) + \mathcal{O}(h^3)

Sei

C = C(x) := 0.5 y''(x) \,.

Lokaler Fehler

y(x+h) - y_h(x+h) = C h^2 + \mathcal{O}(h^3)

Lokaler Diskretisierungsfehler

\frac{y(x+h) - y(x)}{h} - f(x,y(x)) = C h + \mathcal{O}(h^2)

Globaler Fehler

Aufpassen - wird der lokale Fehler mit der Schrittweite

h = \frac{L}{N}

N-mal gemacht, so erhält man einen globalen Fehler der Ordnung h:

|y(L) - y_h(L)| = |C_1 h^2 + C_2 h^2 + \ldots + C_N h^2 + N \mathcal{O}(h^3)| \le C_{\max} L h + \mathcal{O}(h^2)

Implementierung

double euler(double L, int N, double y0, double *function) {

  double h, x, y;

  h = L/N;
  x = 0.0;
  y = y0;

  while (x < L) {
    
    y = y + h*function(x,y);
    x = x + h;
  }
  return(y);
}

Verwendung

Rufe das Program mit N und 2N Schritten auf und vergleiche die Ergebnisse.

Es folgt

y(L) - y_h(L) = C h

und

y(L) - y_{h/2}(L) = C_1 \frac{h}{2} \,.

Sei

C_1 \approx C

dann kann man die Richardson-Extrapolation verwenden:

y(L) \approx 2 y_{h/2}(L) - y_h(L)

Praxis

Richardson-Extrapolation

1 Schritt mit der Schrittweite h

y_{h}(x+h) = y_{h}(x) + h f(x,y_{h}(x))

Es folgt

y(x+h) = y_{h}(x+h) + C h^2 + \mathcal{O}(h^3)

2 Schritte mit der Schrittweite h/2

y_{h/2}(x+0.5 h) = y_{h/2}(x) + 0.5 h f(x,y_{h/2}(x))

(2)\quad y_{h/2}(x+h) = y_{h/2}(x+h) + 0.5 h f(x+0.5 h,y_{h/2}(x+0.5 h))

Wenn man vermutet, dass

y(x+h) = y_{h/2}(x+h) + 2 C \left(\frac{h}{2}\right)^2 + \mathcal{O}(h^3)

dann folgt:

y(x+h) = 2 y_{h/2}(x+h) - y_h(x+h) + \mathcal{O}(h^3) \,.

Verbesserte Polygonzug-Methode

y^{\hbox{VPM}}_{h}(x+h) = 2 y_{h/2}(x+h) - y_h(x+h) = y(x) + 0.5 h \left(f(x,y(x)) + f(x+0.5 h,y_(x) + 0.5 h f(x,y(x))\right)

Schrittweitensteuerung

Abschätzung des lokalen Fehler

Es gilt

y(x+h) - y_{h}(x+h) = C h^2 + \mathcal{O}(h^3)

und

y(x+h) - (2 y_{h/2}(x+h) - y_h(x+h)) = \mathcal{O}(h^3) \,.

Dann folgt:

2 (y_{h/2}(x+h) - y_h(x+h)) = C h^2 + \mathcal{O}(h^3) \,.

und damit kann man den lokalen Fehler wie folgt abschätzen:

\Delta_h := 2 |y_{h/2}(x+h) - y_h(x+h)| \,.

Wenn man jetzt vermutet, dass mit einer Schrittweite

h_{\epsilon}

der lokale Fehler

\Delta_{h_{\epsilon}} = C h^2_{\epsilon}\,

ist, dann kann man diese Schrittweite wie folgt abschätzen:

h_{\epsilon} = h \sqrt{\frac{\Delta_{h_{\epsilon}}}{\Delta_h}} \,.

Also on Fandom

Random wikia