Aufgaben
Lösung zu Aufgabe 4.1
Wir vergleichen die Ausgabe der beiden Programme, wenn wir 6 Dezimalstellen ausgeben lassen. Dabei erkennt man, dass sich das Ergebnis für die Standardabweichung unterscheidet.
Ergebnis mit der for
-Schleife:
Mittelwert: <T> = 2.006000 s
Standardabweichung: sigma = 0.034383 s
Mittlerer Fehler: Delta T = 0.010873 s
Ergebnis mit NumPy:
Mittelwert: <T> = 2.006000 s
Standardabweichung: sigma = 0.032619 s
Mittlerer Fehler: Delta T = 0.010315 s
Ein manuelles Nachrechnen mit der Gleichung
\[ \sigma = \sqrt{\frac{1}{n-1}\sum\limits_{i=1}^n
\big( x_i - \langle x \rangle \big)^2}
\]
zeigt, dass das Ergebnis der Rechnung mit der for
-Schleife
korrekt ist und das Ergebnis von NumPy um einen Faktor \[
\sqrt{\frac{n-1}{n}} = \sqrt{\frac{9}{10}} = 0.9486833 \] vom korrekten Wert
abweicht.
Groessen/Loesungen/standardabweichung_mod.py
"""Berechnung von Fehlergrößen.
Das Programm berechnet den Mittelwert, die Standardabweichung
und den Fehler des Mittelwertes, indem die entsprechenden
Definitionen mithilfe von for-Schleifen implementiert werden.
Das Programm wurde so modifiziert, dass eine größere Anzahl
von Dezimalstellen ausgegeben wird.
"""
import math
import numpy as np
# Gemessene Schwingungsdauern [s].
messwerte = np.array([2.05, 1.99, 2.06, 1.97, 2.01,
2.00, 2.03, 1.97, 2.02, 1.96])
# Anzahl der Messwerte.
n = messwerte.size
# Berechne den Mittelwert.
mittelwert = 0
for x in messwerte:
mittelwert += x
mittelwert /= n
# Berechne die Standardabweichung.
standardabw = 0
for x in messwerte:
standardabw += (x - mittelwert) ** 2
standardabw = math.sqrt(standardabw / (n - 1))
# Berechne den mittleren Fehler des Mittelwertes.
fehler = standardabw / math.sqrt(n)
print(f'Mittelwert: = {mittelwert:.6f} s')
print(f'Standardabweichung: sigma = {standardabw:.6f} s')
print(f'Mittlerer Fehler: Delta T = {fehler:.6f} s')
Groessen/Loesungen/standardabweichung_numpy_mod.py
"""Berechnung von Fehlergrößen mithilfe von NumPy.
Das Programm berechnet den Mittelwert, die Standardabweichung
und den Fehler des Mittelwertes mithilfe der entsprechenden
NumPy-Funktionen für eine vorgegebene Reihe von Messdaten.
Das Programm wurde so modifiziert, dass eine größere Anzahl
von Dezimalstellen ausgegeben wird.
"""
import math
import numpy as np
# Gemessene Schwingungsdauern [s].
messwerte = np.array([2.05, 1.99, 2.06, 1.97, 2.01,
2.00, 2.03, 1.97, 2.02, 1.96])
# Berechne die drei gesuchten Kenngrößen.
mittelwert = np.mean(messwerte)
standardabw = np.std(messwerte)
fehler = standardabw / math.sqrt(messwerte.size)
print(f'Mittelwert: = {mittelwert:.6f} s')
print(f'Standardabweichung: sigma = {standardabw:.6f} s')
print(f'Mittlerer Fehler: Delta T = {fehler:.6f} s')