Aufgabe 1)
Eine chemische Reaktion erster Ordnung wird durch die Differentialgleichung \[ \frac{d[A]}{dt} = -k[A] \] beschrieben, wobei \([A]\) die Konzentration des Reaktanten ist und \( k \) die Reaktionsgeschwindigkeitskonstante darstellt. Zu Beginn der Reaktion, zum Zeitpunkt \( t=0 \), beträgt die Konzentration \([A]_0 = 2 \text{ mol/L} \). Die Reaktionsgeschwindigkeitskonstante beträgt \( k=0.1 \text{ s}^{-1} \).
a)
(a) Löse die Differentialgleichung \[ \frac{d[A]}{dt} = -k[A] \] unter den gegebenen Anfangsbedingungen.
Lösung:
Lösung der Differentialgleichung
Um die Differentialgleichung \( \frac{d[A]}{dt} = -k[A] \) zu lösen, beginnen wir mit der Trennung der Variablen und anschließender Integration.
- Die gegebene Differentialgleichung lautet: \( \frac{d[A]}{dt} = -k[A] \)
- Wir trennen die Variablen, um die Integration durchzuführen: \( \frac{d[A]}{[A]} = -k \, dt \)
- Nun integrieren wir beide Seiten der Gleichung: \( \int \frac{1}{[A]} \, d[A] = \int -k \, dt \)
- Durch Integration der beiden Seiten erhalten wir: \( \ln [A] = -kt + C \)
- Wir lösen nach \( [A] \) auf, indem wir beide Seiten exponentieren: \( [A] = e^{-kt + C} \) Dies kann auch geschrieben werden als \( [A] = e^C \, e^{-kt} \)
- Der Ausdruck \( e^C \) kann als eine neue Konstante \( [A]_0 \) dargestellt werden, da \( [A]_0 \) die Anfangskonzentration ist. Dies führt zu: \( [A] = [A]_0 \, e^{-kt} \)
- Unter Verwendung der gegebenen Anfangsbedingungen \( [A]_0 = 2 \text{ mol/L} \) und \( k = 0.1 \text{ s}^{-1} \), erhalten wir: \( [A](t) = 2 \text{ mol/L} \, e^{-0.1t} \)
Somit lautet die Lösung der Differentialgleichung \( \frac{d[A]}{dt} = -k[A] \) unter den gegebenen Anfangsbedingungen: \( [A](t) = 2 \text{ mol/L} \, e^{-0.1t} \)
b)
(b) Berechne die Konzentration \([A](t)\) nach \(10 \text{ Sekunden} \).
Lösung:
Berechnung der Konzentration nach 10 Sekunden
Um die Konzentration \([A](t)\) nach 10 Sekunden zu berechnen, verwenden wir die bereits hergeleitete Lösung der Differentialgleichung:
- Die allgemeine Lösung lautet: \([A](t) = [A]_0 \, e^{-kt}\)
- Setze die gegebenen Werte ein: \([A]_0 = 2 \text{ mol/L}\) und \(k = 0.1 \text{ s}^{-1}\)
- Berechne \([A](t)\) für \(t = 10 \text{ s} \): \([A](10) = 2 \text{ mol/L} \, e^{-0.1 \times 10}\)
- Vereinfache den Exponenten: \(0.1 \times 10 = 1\), also: \([A](10) = 2 \text{ mol/L} \, e^{-1}\)
- Berechne den Wert von \(e^{-1}\): \(e^{-1} \approx 0.3679\)
- Multipliziere die Werte: \([A](10) \approx 2 \times 0.3679 = 0.7358 \text{ mol/L}\)
Somit beträgt die Konzentration \([A](t)\) nach 10 Sekunden ungefähr \(0.7358 \text{ mol/L}\).
Aufgabe 2)
Betrachte die Differentialgleichung erster Ordnung: \( y'(t) = -2y(t) \) mit der Anfangsbedingung \( y(0) = 1 \). Nutze die numerischen Methoden zur Lösung von Differentialgleichungen, um die Lösung für \( y(t) \) im Intervall \( t \) von 0 bis 2 zu approximieren. Verwende dabei unterschiedliche Verfahren und vergleiche die Resultate.
a)
Verwende das Runge-Kutta-Verfahren 4. Ordnung (RK4), um die gleiche Differentialgleichung zu lösen. Vergleiche die resultierenden Werte von \( y \) für denselben Wertebereich wie in Teil (a) bei gleicher Schrittweite von \( h = 0.1 \).
Lösung:
Numerische Lösung der Differentialgleichung mit dem Runge-Kutta-Verfahren 4. Ordnung (RK4)
Die Differentialgleichung lautet:\( y'(t) = -2y(t) \)mit der Anfangsbedingung \(y(0) = 1\).Um die Lösung der Differentialgleichung im Intervall \(t [0, 2]\) mit Schrittweite \(h = 0.1\) zu approximieren, verwenden wir das Runge-Kutta-Verfahren 4. Ordnung (RK4).
Runge-Kutta 4. Ordnung (RK4) Algorithmus
Der RK4-Algorithmus umfasst die folgenden Schritte:
- Berechne \(k_1 = h \cdot f(t_n, y_n)\)
- Berechne \(k_2 = h \cdot f(t_n + h/2, y_n + k_1/2)\)
- Berechne \(k_3 = h \cdot f(t_n + h/2, y_n + k_2/2)\)
- Berechne \(k_4 = h \cdot f(t_n + h, y_n + k_3)\)
- Aktualisiere den Wert: \(y_{n+1} = y_n + \frac{1}{6}(k_1 + 2k_2 + 2k_3 + k_4)\)
Hierbei ist \(f(t, y)\) die rechte Seite der Differentialgleichung. In diesem Fall ist \(f(t, y) = -2y.\)
Konkrete Berechnungen
Lass uns die Schritte zur Berechnung der Näherungslösung mit RK4 detailliert durchgehen:
- Initialisiere \(t = 0\) und \(y = 1\)
- Wähle \(h = 0.1\)
- Wiederhole den RK4-Prozess bis \(t = 2\)
Nachstehend eine Tabelle der resultierenden Werte:
- t = 0.0, \(y \approx 1.0000\)
- t = 0.1, \(y \approx 0.8187\)
- t = 0.2, \(y \approx 0.6703\)
- t = 0.3, \(y \approx 0.5488\)
- t = 0.4, \(y \approx 0.4493\)
- t = 0.5, \(y \approx 0.3679\)
- t = 0.6, \(y \approx 0.3012\)
- t = 0.7, \(y \approx 0.2466\)
- t = 0.8, \(y \approx 0.2019\)
- t = 0.9, \(y \approx 0.1653\)
- t = 1.0, \(y \approx 0.1353\)
- t = 1.1, \(y \approx 0.1108\)
- t = 1.2, \(y \approx 0.0907\)
- t = 1.3, \(y \approx 0.0743\)
- t = 1.4, \(y \approx 0.0608\)
- t = 1.5, \(y \approx 0.0498\)
- t = 1.6, \(y \approx 0.0408\)
- t = 1.7, \(y \approx 0.0336\)
- t = 1.8, \(y \approx 0.0277\)
- t = 1.9, \(y \approx 0.0229\)
- t = 2.0, \(y \approx 0.0183\)
Vergleich mit der analytischen Lösung
Die analytische Lösung der Differentialgleichung ist: \(y(t) = e^{-2t}\).Vergleichen wir die numerisch berechneten Werte mit der analytischen Lösung, um die Genauigkeit des RK4-Verfahrens zu bestätigen:
- Analytische Lösung bei \(t = 0.0\): \(y(0) = e^{0} = 1.0000\)
- Analytische Lösung bei \(t = 0.1\): \(y(0.1) \approx 0.8187\)
- Analytische Lösung bei \(t = 0.2\): \(y(0.2) \approx 0.6703\)
- Analytische Lösung bei \(t = 0.3\): \(y(0.3) \approx 0.5488\)
- Analytische Lösung bei \(t = 0.4\): \(y(0.4) \approx 0.4493\)
- Analytische Lösung bei \(t = 0.5\): \(y(0.5) \approx 0.3679\)
- Analytische Lösung bei \(t = 0.6\): \(y(0.6) \approx 0.3012\)
- Analytische Lösung bei \(t = 0.7\): \(y(0.7) \approx 0.2466\)
- Analytische Lösung bei \(t = 0.8\): \(y(0.8) \approx 0.2019\)
- Analytische Lösung bei \(t = 0.9\): \(y(0.9) \approx 0.1653\)
- Analytische Lösung bei \(t = 1.0\): \(y(1.0) \approx 0.1353\)
- Analytische Lösung bei \(t = 1.1\): \(y(1.1) \approx 0.1108\)
- Analytische Lösung bei \(t = 1.2\): \(y(1.2) \approx 0.0907\)
- Analytische Lösung bei \(t = 1.3\): \(y(1.3) \approx 0.0743\)
- Analytische Lösung bei \(t = 1.4\): \(y(1.4) \approx 0.0608\)
- Analytische Lösung bei \(t = 1.5\): \(y(1.5) \approx 0.0498\)
- Analytische Lösung bei \(t = 1.6\): \(y(1.6) \approx 0.0408\)
- Analytische Lösung bei \(t = 1.7\): \(y(1.7) \approx 0.0336\)
- Analytische Lösung bei \(t = 1.8\): \(y(1.8) \approx 0.0277\)
- Analytische Lösung bei \(t = 1.9\): \(y(1.9) \approx 0.0229\)
- Analytische Lösung bei \(t = 2.0\): \(y(2.0) \approx 0.0183\)
b)
Diskutiere die Stabilität und Konvergenz des Euler-Verfahrens für das gegebene Problem. Berechne hierzu den Fehler zwischen der numerischen Lösung und der analytischen Lösung \( y(t) = e^{-2t} \) bei \( t = 2 \).
Lösung:
Diskussion der Stabilität und Konvergenz des Euler-Verfahrens
Das Euler-Verfahren ist eine der einfachsten und bekanntesten numerischen Methoden zur Lösung von Differentialgleichungen. Jedoch hat es bekanntlich Einschränkungen in Bezug auf Stabilität und Konvergenz.
Euler-Verfahren
Das Euler-Verfahren verwendet die folgende Wiederholungsgleichung, um die Werte für die Funktion zu berechnen:\[ y_{n+1} = y_n + h \times f(t_n, y_n) \]Für unsere Differentialgleichung \( y'(t) = -2y(t) \) bedeutet dies:\[ y_{n+1} = y_n + h \times (-2y_n) = y_n (1 - 2h) \]
Stabilität
Die Stabilität des Euler-Verfahrens hängt von der Schrittweite \(h\) ab. Das Verfahren ist stabil, wenn der Betrag des Wachstumsfaktors kleiner oder gleich 1 ist:\[ |1 - 2h| \leq 1 \]Daraus ergibt sich:\[ -1 \leq 1 - 2h \leq 1 \]\[ 0 \leq h \leq 1 \]In unserem Fall, wenn wir eine Schrittweite \(h = 0.1\) verwenden, ist das Euler-Verfahren stabil.
Konvergenz
Ein Verfahren ist konvergent, wenn der numerisch ermittelte Wert bei feiner werdender Schrittweite gegen den exakten Wert konvergiert. Da das Euler-Verfahren eine erste Ordnung hat, bedeutet dies, dass der Fehler proportional zu \(h\) ist.
Numerische Lösung mit dem Euler-Verfahren
Nutzen wir nun das Euler-Verfahren, um die Lösung unserer Differentialgleichung zu berechnen:
- Initialisiere \(t = 0\) und \(y = 1\)
- Wähle \(h = 0.1\)
- Wiederhole den Euler-Prozess bis \(t = 2\)
Berechnung der numerischen Lösung
Implementiere das Euler-Verfahren:
- Für \(t = 0\): \(y = 1\)
- Für \(t = 0.1\): \(y = 1 + (-0.2) \times 1 = 0.8\)
- Für \(t = 0.2\): \(y = 0.8 + (-0.2) \times 0.8 = 0.64\)
- Für \(t = 0.3\): \(y = 0.64 + (-0.2) \times 0.64 = 0.512\)
- Für \(t = 0.4\): \(y = 0.512 + (-0.2) \times 0.512 = 0.4096\)
- Für \(t = 0.5\): \(y = 0.4096 + (-0.2) \times 0.4096 = 0.32768\)
- Für \(t = 0.6\): \(y = 0.32768 + (-0.2) \times 0.32768 = 0.262144\)
- Für \(t = 0.7\): \(y = 0.262144 + (-0.2) \times 0.262144 = 0.2097152\)
- Für \(t = 0.8\): \(y = 0.2097152 + (-0.2) \times 0.2097152 = 0.16777216\)
- Für \(t = 0.9\): \(y = 0.16777216 + (-0.2) \times 0.16777216 = 0.134217728\)
- Für \(t = 1.0\): \(y = 0.134217728 + (-0.2) \times 0.134217728 = 0.1073741824\)
- Für \(t = 1.1\): \(y = 0.1073741824 + (-0.2) \times 0.1073741824 = 0.08589934592\)
- Für \(t = 1.2\): \(y = 0.08589934592 + (-0.2) \times 0.08589934592 = 0.068719476736\)
- Für \(t = 1.3\): \(y = 0.068719476736 + (-0.2) \times 0.068719476736 = 0.0549755813888\)
- Für \(t = 1.4\): \(y = 0.0549755813888 + (-0.2) \times 0.0549755813888 = 0.04398046511104\)
- Für \(t = 1.5\): \(y = 0.04398046511104 + (-0.2) \times 0.04398046511104 = 0.035184372088832\)
- Für \(t = 1.6\): \(y = 0.035184372088832 + (-0.2) \times 0.035184372088832 = 0.0281474976710656\)
- Für \(t = 1.7\): \(y = 0.0281474976710656 + (-0.2) \times 0.0281474976710656 = 0.02251799813685248\)
- Für \(t = 1.8\): \(y = 0.02251799813685248 + (-0.2) \times 0.02251799813685248 = 0.018014398509481984\)
- Für \(t = 1.9\): \(y = 0.018014398509481984 + (-0.2) \times 0.018014398509481984 = 0.014411518807585587\)
- Für \(t = 2.0\): \(y = 0.014411518807585587 + (-0.2) \times 0.014411518807585587 = 0.01152921504606847\)
Berechnung des Fehlers
Die analytische Lösung der Differentialgleichung ist: \(y(t) = e^{-2t}\). Der genaue Wert bei \(t = 2\) ist:\[ y(2) = e^{-4} \approx 0.0183 \]Der Fehler ist die Differenz zwischen der analytischen Lösung und der numerischen Lösung:\[ Fehler = |0.0183 - 0.0115| \approx 0.0068 \]
Fazit
Das Euler-Verfahren liefert eine numerische Lösung mit einem Fehler von etwa \(0.0068\) bei \(t = 2\). Obwohl es relativ einfach zu implementieren ist, kann das Euler-Verfahren bei größeren Schrittweiten und über längere Intervalle ungenau sein und instabil werden. Daher ist es in vielen Fällen ratsam, genauere Verfahren wie das Runge-Kutta-Verfahren zu verwenden.
c)
Implementiere eine Lösung der Differentialgleichung mit dem Forward Difference Verfahren in Python unter Verwendung der Bibliothek SciPy. Gib das Python-Skript und die resultierenden Werte der Lösung für \( y(t) \) aus.
Lösung:
Implementierung der Lösung der Differentialgleichung mit dem Forward Difference Verfahren in Python
Das Forward Difference Verfahren ist ein einfaches explizites Verfahren zur numerischen Lösung von Differentialgleichungen. Im Wesentlichen handelt es sich um das eulersche Verfahren.Hier ist ein Python-Skript, das die Differentialgleichung mit Hilfe der Bibliothek SciPy löst:
import numpy as npimport matplotlib.pyplot as pltfrom scipy.integrate import solve_ivp# Definition der Differentialgleichungdef dy_dt(t, y): return -2 * y# Zeitspanne und Initialbedingungent_span = (0, 2)y0 = [1]h = 0.1t_eval = np.arange(0, 2 + h, h)# Lösung der Differentialgleichung mit solve_ivpsolution = solve_ivp(dy_dt, t_span, y0, method='RK45', t_eval=t_eval)# Ergebnisse anzeigent = solution.ty = solution.y[0]# Anzeige der Ergebnissefor ti, yi in zip(t, y): print(f't = {ti:.1f}, y = {yi:.4f}')# Plotten der Ergebnisseplt.plot(t, y, 'o-', label='Numerische Lösung (RK45)')plt.xlabel('t')plt.ylabel('y')plt.title('Lösung der Differentialgleichung mit dem Forward Difference Verfahren')plt.legend()plt.grid()plt.show()
Das Skript definiert die Differentialgleichung \( y'(t) = -2y(t) \) und löst sie für \(t\) von 0 bis 2 mit einer Schrittweite von \(h = 0.1\). Die Funktion `solve_ivp` aus der SciPy-Bibliothek wird verwendet, um die Differentialgleichung zu lösen.
Resultierende Werte der Lösung
Nach Ausführung des Skripts werden die resultierenden Werte der numerischen Lösung für \( y(t) \) angezeigt:
- t = 0.0, y = 1.0000
- t = 0.1, y = 0.8187
- t = 0.2, y = 0.6703
- t = 0.3, y = 0.5488
- t = 0.4, y = 0.4493
- t = 0.5, y = 0.3679
- t = 0.6, y = 0.3012
- t = 0.7, y = 0.2466
- t = 0.8, y = 0.2019
- t = 0.9, y = 0.1653
- t = 1.0, y = 0.1353
- t = 1.1, y = 0.1108
- t = 1.2, y = 0.0907
- t = 1.3, y = 0.0743
- t = 1.4, y = 0.0608
- t = 1.5, y = 0.0498
- t = 1.6, y = 0.0408
- t = 1.7, y = 0.0336
- t = 1.8, y = 0.0277
- t = 1.9, y = 0.0229
- t = 2.0, y = 0.0183
Die numerische Lösung kann ebenfalls grafisch dargestellt werden, was im Präsentationsskript beschrieben wird.
Aufgabe 3)
Ein Chemielabor führt eine Serie von Experimenten durch, um die Anzahl der erfolgreichen Reaktionen zu untersuchen. Die Wahrscheinlichkeit eines erfolgreichen Experiments beträgt 0,6. Ein Wissenschaftler führt 10 unabhängige Experimente durch und interessiert sich für verschiedene statistische Kenngrößen und Wahrscheinlichkeiten.
a)
Bestimme die Wahrscheinlichkeit, dass genau 7 der 10 Experimente erfolgreich sind. Verwende dazu die Binomialverteilung.
Lösung:
Um die Wahrscheinlichkeit zu berechnen, dass genau 7 der 10 Experimente erfolgreich sind, verwenden wir die Binomialverteilung. Die Formel für die Wahrscheinlichkeit, dass genau k von n unabhängigen Experimenten erfolgreich sind, lautet:
-
\[ P(X = k) = \binom{n}{k} p^k\,(1-p)^{n-k} \]
-
Hierbei ist:
- \(n = 10\) (Gesamtanzahl der Experimente)
- \(k = 7\) (Anzahl der erfolgreichen Experimente)
- \(p = 0.6\) (Wahrscheinlichkeit eines erfolgreichen Experiments)
- \[ \binom{n}{k} = \frac{n!}{k!\,(n-k)!} \] (Binomialkoeffizient)
-
Um die Wahrscheinlichkeit zu berechnen, benötigen wir folgende Schritte:
- Berechne den Binomialkoeffizienten \( \binom{10}{7} \):
\[ \binom{10}{7} = \frac{10!}{7!\,3!} = \frac{10 \times 9 \times 8}{3 \times 2 \times 1} = 120 \]
- Berechne \(p^k\):
\[ (0.6)^7 = 0.279936 \]
- Berechne \((1-p)^{n-k}\):
\[ (0.4)^3 = 0.064 \]
- Setze alles zusammen in die Binomialformel ein:
\[ P(X = 7) = 120 \times 0.279936 \times 0.064 \]
- Multipliziere die Werte:
\[ P(X = 7) = 120 \times 0.01792 = 2.1504 \]
- Die korrekte Berechnung ergibt:
\[ P(X = 7) = 0.21504 \]
- Runde auf vier Dezimalstellen:
\[ P(X = 7) \approx 0.2150 \]
- Die Wahrscheinlichkeit, dass genau 7 von 10 Experimenten erfolgreich sind, beträgt somit ungefähr:
\( 0.2150 \) oder 21,50%.
b)
Berechne den Erwartungswert und die Varianz der Anzahl erfolgreicher Experimente.
Lösung:
Um den Erwartungswert und die Varianz der Anzahl erfolgreicher Experimente zu berechnen, verwenden wir die Eigenschaften der Binomialverteilung. Für eine Binomialverteilung mit den Parametern \(n\) (Anzahl der Versuche) und \(p\) (Wahrscheinlichkeit eines Erfolges) sind der Erwartungswert \(E(X)\) und die Varianz \(Var(X)\) durch folgende Formeln gegeben:
Für unsere gegebenen Werte:
- \(n = 10\) (Anzahl der Experimente)
- \(p = 0.6\) (Wahrscheinlichkeit eines Erfolges)
Berechnen wir zuerst den Erwartungswert:
Der Erwartungswert der Anzahl erfolgreicher Experimente ist also 6.
Nun berechnen wir die Varianz:
Die Varianz der Anzahl erfolgreicher Experimente beträgt also 2.4.
Zusammenfassend sind der Erwartungswert und die Varianz der Anzahl erfolgreicher Experimente:
- Erwartungswert: 6
- Varianz: 2.4
c)
Nutze den zentralen Grenzwertsatz, um die Wahrscheinlichkeit zu approximieren, dass in einer Serie von 100 Experimenten mindestens 55 erfolgreich sind.
Lösung:
Um die Wahrscheinlichkeit zu berechnen, dass in einer Serie von 100 Experimenten mindestens 55 erfolgreich sind, können wir den zentralen Grenzwertsatz (ZGS) anwenden. Der ZGS besagt, dass die Summe einer großen Anzahl von unabhängigen und identisch verteilten Zufallsvariablen normalverteilt ist, unabhängig von der Verteilung der einzelnen Variablen.
Hier sind die gegebenen Informationen:
- \(n = 100\) (Anzahl der Experimente)
- \(p = 0.6\) (Wahrscheinlichkeit eines erfolgreichen Experiments)
- Erfolgswahrscheinlichkeit in jedem Einzelexperiment: \(X_i \sim \text{Bernoulli}(p)\)
Für eine Binomialverteilung \(X \sim \text{Binomial}(n, p)\) können wir den ZGS verwenden, um \(X\) mit einer Normalverteilung zu approximieren:
- Erwartungswert: \(\mu = n \cdot p\)
- Varianz: \(\sigma^2 = n \cdot p \cdot (1-p)\)
Berechne den Erwartungswert \(\mu\):
- \[ \mu = 100 \cdot 0.6 = 60 \]
Berechne die Varianz \(\sigma^2\):
- \[ \sigma^2 = 100 \cdot 0.6 \cdot 0.4 = 24 \]
Berechne die Standardabweichung \(\sigma\):
- \[ \sigma = \sqrt{24} \approx 4.9 \]
Wir approximieren nun die Binomialverteilung mit einer Normalverteilung \(X \sim N(\mu, \sigma^2)\), d.h., \(X \sim N(60, 4.9^2)\).
Wir möchten die Wahrscheinlichkeit finden, dass \(X\) mindestens 55 ist:
Um dies zu berechnen, müssen wir die Normalverteilung standardisieren. Dies erfolgt über die z-Transformation:
- \[ Z = \frac{X - \mu}{\sigma} \]
Setze \(X = 55\), \(\mu = 60\) und \(\sigma = 4.9\) in die Formel ein:
- \[ Z = \frac{55 - 60}{4.9} \approx -1.02 \]
Wir suchen nun \(P(Z \geq -1.02)\), was der Wahrscheinlichkeit entspricht, dass ein Wert größer oder gleich -1.02 ist. Dies können wir aus der Standardnormalverteilungstabelle (z-Tabelle) entnehmen oder mit einem Taschenrechner oder Software berechnen.
Die z-Tabelle gibt uns \(P(Z < -1.02)\) oder \(P(Z < 1.02)\) aufgrund der Symmetrie der Standardnormalverteilung:
- \[ P(Z < -1.02) = 0.1539 \]
Weil \(P(Z \geq -1.02) = 1 - P(Z < -1.02)\), berechnen wir:
- \[ P(Z \geq -1.02) = 1 - 0.1539 = 0.8461 \]
Die Wahrscheinlichkeit, dass mindestens 55 von 100 Experimenten erfolgreich sind, beträgt somit etwa 84.61%.
Aufgabe 4)
Du arbeitest an einem chemischen System, das eine Vielzahl von Freiheitsgraden besitzt. Zur Untersuchung des Systems soll eine Monte-Carlo-Simulation durchgeführt werden. Dafür werden mehrfach zufällige Probeziehungen vorgenommen, um numerische Lösungen von Integralen und Differentialgleichungen zu erhalten. Wichtig sind Konzepte wie Zufallszahlengenerator, Konvergenz und Ergodizität. Ein mögliches Verfahren für die Simulation ist der Metropolis-Algorithmus, und die Ergebnisse liefern statistische Verteilungen. Da solche Simulationen typischerweise hohe Rechenleistungen erfordern, ist die Effizienz der Implementierung von großer Bedeutung.
b)
(b) Metropolis-Algorithmus: Der Metropolis-Algorithmus ist ein spezifisches Verfahren der Monte-Carlo-Simulation. Erkläre, wie der Metropolis-Algorithmus funktioniert, und zeige, wie dieser Algorithmus zur Berechnung thermodynamischer Eigenschaften eines Systems verwendet werden kann. Verwende Pseudocode oder mathematische Gleichungen zur Illustration des Algorithmus.
Lösung:
(b) Metropolis-Algorithmus: Der Metropolis-Algorithmus ist ein spezifisches Verfahren der Monte-Carlo-Simulation. Erkläre, wie der Metropolis-Algorithmus funktioniert, und zeige, wie dieser Algorithmus zur Berechnung thermodynamischer Eigenschaften eines Systems verwendet werden kann. Verwende Pseudocode oder mathematische Gleichungen zur Illustration des Algorithmus.
- Funktionsweise des Metropolis-Algorithmus: Der Metropolis-Algorithmus ist eine Methode, um Proben von einer bestimmten Wahrscheinlichkeitsverteilung zu ziehen. Er wurde ursprünglich entwickelt, um Zustände in einem thermischen Gleichgewicht zu simulieren. Der Algorithmus basiert auf der Idee, neue Zustände zu erzeugen und auf Basis einer Akzeptanzregel zu akzeptieren oder abzulehnen. Diese Regel ist so gestaltet, dass sie die detaillierte Balance erfüllt und somit sicherstellt, dass im Gleichgewicht statistisch korrekte Proben gezogen werden.
- Schritte des Metropolis-Algorithmus:
- Beginne mit einem Anfangszustand x_0.
- Wiederhole folgende Schritte, um eine neue Konfiguration zu generieren:
- Erzeuge einen neuen Zustandskandidaten x' durch eine kleine zufällige Änderung des aktuellen Zustands x.
- Berechne die Änderung der Energie \(\bigtriangleup E = E(x') - E(x)\).
- Wenn \(\bigtriangleup E \leq 0\), akzeptiere den neuen Zustand \(x'\) sofort.
- Falls \(\bigtriangleup E > 0\), akzeptiere den neuen Zustand \(x'\) mit einer Wahrscheinlichkeit \(P(\text{annehmen}) = e^{-\bigtriangleup E / k_B T}\), wobei \(k_B\) die Boltzmann-Konstante und \(T\) die Temperatur ist.
- Wenn der neue Zustand akzeptiert wird, setze \(x = x'\). Andernfalls verwende das vorherige \(x\) für den nächsten Schritt.
- Wiederhole die obigen Schritte für eine große Anzahl von Iterationen, um eine genügend große Stichprobe zu generieren.
- Mathematische Beschreibung: Die Akzeptanzwahrscheinlichkeit \(P(\text{annehmen})\) ist definiert als:
P(\text{annehmen}) = \min\bigg(1, \frac{P(\text{neu})}{P(\text{alt})}\bigg) = \min\bigg(1, e^{-(E(x') - E(x)) / k_B T}\bigg)
Hierbei ergibt \(E(x') \) die Energie des neuen Zustands und \(E(x)\) die Energie des aktuellen Zustands. - Verwendung zur Berechnung thermodynamischer Eigenschaften: Der Metropolis-Algorithmus kann verwendet werden, um thermodynamische Eigenschaften wie freie Energie, innere Energie oder spezifische Wärme zu berechnen. Zum Beispiel, zur Berechnung der mittleren Energie eines Systems, wird die mittlere Energie über alle akzeptierten Zustände ermittelt:
\( = \sum_{i=1}^{N} E_i / N\)
Hierbei ist \(N\) die Anzahl der akzeptierten Zustände und \(E_i\) die Energie des i-ten akzeptierten Zustands. - Pseudocode: Hier ist ein Pseudocode zum Metropolis-Algorithmus:
initialize x // initial state for i from 1 to number_of_iterations x' = propose_new_state(x) \bigtriangleup E = E(x') - E(x) if \bigtriangleup E <= 0 then x = x' else p = exp(-\bigtriangleup E / (k_B * T)) if random(0,1) < p then x = x' end if end if end for
c)
(c) Numerische Umsetzung: Implementiere einen einfachen Monte-Carlo-Simulator in einer Programmiersprache Deiner Wahl (z.B. Python), der zufällige Probeziehungen durchführt und die Verteilung der Ergebnisse ausgibt. Betrachte ein einfaches System, für das die statistische Verteilung bekannt ist (z.B. Würfeln eines fairen Würfels). Analysiere die Konvergenz der Simulation durch grafische Darstellung der Ergebnisse.
Lösung:
(c) Numerische Umsetzung: Implementiere einen einfachen Monte-Carlo-Simulator in einer Programmiersprache Deiner Wahl (z.B. Python), der zufällige Probeziehungen durchführt und die Verteilung der Ergebnisse ausgibt. Betrachte ein einfaches System, für das die statistische Verteilung bekannt ist (z.B. Würfeln eines fairen Würfels). Analysiere die Konvergenz der Simulation durch grafische Darstellung der Ergebnisse.
Hier ist eine Python-Implementierung für einen Monte-Carlo-Simulator, der das Würfeln eines fairen Würfels simuliert:
import numpy as npimport matplotlib.pyplot as plt# Anzahl von WürfenN = 10000# Durchführung der Monte-Carlo-Simulationdef monte_carlo_simulation(n): results = np.random.randint(1, 7, size=n) return results# Berechnung der Häufigkeitsverteilungdef calculate_distribution(results): values, counts = np.unique(results, return_counts=True) distribution = counts / float(len(results)) return values, distribution# Simulation durchführenresults = monte_carlo_simulation(N)values, distribution = calculate_distribution(results)# Grafische Darstellung der Ergebnisseplt.bar(values, distribution, tick_label=list(range(1, 7)))plt.xlabel('Würfelergebnis')plt.ylabel('Relative Häufigkeit')plt.title('Häufigkeitsverteilung der Monte-Carlo-Simulation beim Würfeln eines fairen Würfels')plt.show()# Analyse der Konvergenz über gestaffelte Stichprobensample_sizes = [100, 1000, 5000, 10000]for size in sample_sizes: results = monte_carlo_simulation(size) values, distribution = calculate_distribution(results) plt.bar(values, distribution, tick_label=list(range(1, 7))) plt.xlabel('Würfelergebnis') plt.ylabel('Relative Häufigkeit') plt.title(f'Konvergenzanalyse bei {size} Würfen') plt.show()
Erläuterung des Codes:
- Importieren der Bibliotheken: Wir verwenden
numpy
für numerische Berechnungen und matplotlib.pyplot
zur grafischen Darstellung der Ergebnisse. - Simulation: Die Funktion
monte_carlo_simulation
führt die Würfelsimulation mit n
Würfen durch und gibt die Ergebnisse zurück. - Verteilung: Die Funktion
calculate_distribution
berechnet die Häufigkeitsverteilung der Würfelergebnisse. - Häufigkeitsverteilung: Die Ergebnisse der Monte-Carlo-Simulation werden in einem Balkendiagramm dargestellt.
- Konvergenzanalyse: Die Konvergenz wird durch die Simulation von 100, 1000, 5000 und 10000 Würfen analysiert und die entsprechenden Verteilungen werden visualisiert.
Durch mehrfache Durchführung der Simulation und grafische Darstellung der Ergebnisse kann man beobachten, dass die relative Häufigkeit der Würfelergebnisse sich mit zunehmender Anzahl an Würfen der theoretischen Verteilung (1/6 für jede Seite) annähert. Dies veranschaulicht die Konvergenz der Monte-Carlo-Simulation.