Files
freeCodeCamp/curriculum/challenges/german/22-rosetta-code/rosetta-code-challenges/euler-method.md
2024-01-24 19:52:36 +01:00

4.2 KiB

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
59880443fb36441083c6c20e Euler-Methode 1 302258 euler-method

--description--

Euler's method numerically approximates solutions of first-order ordinary differential equations (ODEs) with a given initial value. It is an explicit method for solving initial value problems (IVPs), as described in this article.

Die ODE muss in der folgenden Form angegeben werden:

  • $\frac{dy(t)}{dt} = f(t,y(t))$

mit einem Anfangswert

  • $y(t_0) = y_0$

Um eine numerische Lösung zu erhalten, ersetzen wir die Ableitung auf der linken Seite durch eine Finite-Differenzen-Approximation:

  • $\frac{dy(t)}{dt} \approx \frac{y(t+h)-y(t)}{h}$

löse dann für y(t+h):

  • $y(t+h) \approx y(t) + h \, \frac{dy(t)}{dt}$

was das Gleiche ist wie

  • $y(t+h) \approx y(t) + h \, f(t,y(t))$

Die Regel der iterativen Lösung lautet also:

  • $y_{n+1} = y_n + h \, f(t_n, y_n)$

wobei h die Schrittweite, der wichtigste Parameter für die Genauigkeit der Lösung ist. Eine kleinere Schrittweite erhöht zwar die Genauigkeit, aber auch die Berechnungskosten, sodass sie immer von Hand nach dem jeweiligen Problem ausgewählt werden muss.

Beispiel: Newtonsches Kühlungsgesetz

Das Newtonsche Abkühlungsgesetz beschreibt, wie ein Objekt mit der Anfangstemperatur T(t_0) = T_0 in einer Umgebung mit der Temperatur T_R abkühlt:

  • $\frac{dT(t)}{dt} = -k \, \Delta T$

oder

  • $\frac{dT(t)}{dt} = -k \, (T(t) - T_R)$

Sie besagt, dass die Abkühlungsgeschwindigkeit \\frac{dT(t)}{dt} des Objekts proportional zur aktuellen Temperaturdifferenz \\Delta T = (T(t) - T_R) zur Umgebung ist.

Die analytische Lösung, die wir mit der numerischen Näherung vergleichen werden, lautet

  • $T(t) = T_R + (T_0 - T_R) \; e^{-k t}$

--instructions--

Implementiere eine Routine der Euler'schen Methode und löse damit das gegebene Beispiel des Newton'schen Abkühlungsgesetzes für drei verschiedene Schrittweiten von:

  • 2 s
  • 5 s und
  • 10 s

und vergleiche mit der analytischen Lösung.

Anfangswerte:

  • initial temperature $T_0$ shall be 100 °C
  • Zimmertemperatur $T_R$ soll 20 °C sein
  • Kühlkonstante $k$ soll 0.07 sein
  • das zu berechnende Zeitintervall muss von 0 s bis 100 s betragen

Der erste Parameter der Funktion ist die Anfangszeit, der zweite Parameter die Anfangstemperatur, der dritte Parameter die verstrichene Zeit und der vierte Parameter die Schrittweite.

--hints--

eulersMethod sollte eine Funktion sein.

assert(typeof eulersMethod === 'function');

eulersMethod(0, 100, 100, 2) sollte eine Zahl zurückgeben.

assert(typeof eulersMethod(0, 100, 100, 2) === 'number');

eulersMethod(0, 100, 100, 2) sollte 20.0424631833732 zurückgeben.

assert.equal(eulersMethod(0, 100, 100, 2), 20.0424631833732);

eulersMethod(0, 100, 100, 5) sollte 20.01449963666907 zurückgeben.

assert.equal(eulersMethod(0, 100, 100, 5), 20.01449963666907);

eulersMethod(0, 100, 100, 10) sollte 20.000472392 zurückgeben.

assert.equal(eulersMethod(0, 100, 100, 10), 20.000472392);

--seed--

--seed-contents--

function eulersMethod(x1, y1, x2, h) {

}

--solutions--

function eulersMethod(x1, y1, x2, h) {
  let x = x1;
  let y = y1;

  while ((x < x2 && x1 < x2) || (x > x2 && x1 > x2)) {
    y += h * (-0.07 * (y - 20));
    x += h;
  }

  return y;
}