Fandom

Scratchpad

Numerik1:Explizites Einschrittverfahren in der Praxis

224,662pages on
this wiki
Add New Page
Discuss this page0 Share

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}} \,.

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.