::::{grid} :gutter: 3
:::{grid-item-card} Versuchsanleitungen
{image}
:height: 120
^^^ :::
:::{grid-item-card} Online Latex-Vorlage
{image}
:height: 120
^^^ Abgabe als PDF! :::
:::{grid-item-card} Word-Vorlage
{image}
:height: 120
^^^ Abgabe als PDF! ::: ::::
Vor Beginn deines ersten Praktikumsversuchs ist es wichtig, folgendes Grundwissen zu beachten:
Die Messtechnik dient dazu, physikalische Größen quantitativ zu beobachten und ist daher ein wesentlicher Bestandteil der Physik. Eine quantitative Beschreibung erfordert immer einen Zahlenwert, $x$, und eine Maßeinheit, $E$. Um einen möglichst genauen experimentellen Wert zu erzielen, wird ein erheblicher Teil der Experimentierzeit für die Vorbereitung und Planung des Experiments sowie für die Datenauswertung aufgewendet. Dabei werden auch Daten aufgenommen und visualisiert, um Ergebnisse zu überprüfen und gegebenenfalls Messungen zu wiederholen. Es ist wichtig zu beachten, dass Messungen immer zufälligen Schwankungen unterliegen, was bedeutet, dass das Messergebnis immer variieren wird. Eine Messung wird niemals den wahren Wert liefern können, daher ist eine sorgfältige Messung und Auswertung notwendig. In der Wissenschaft gibt es bewährte Methoden und Techniken, um Unsicherheiten und Schwankungen der Messgröße quantitativ zu beschreiben und somit die Qualität der Messung oder des Experiments zu bewerten. Die grundlegenden Normen für die Messtechnik sind in der DIN-Norm DIN 1319 und dem GUM (Guide to the Expression of Uncertainty in Measurement) festgehalten.
Während des Praktikums werdet ihr Daten aufnehmen, auswerten und grafisch darstellen müssen. Verwendet dafür eine geeignete Software, die die Datenanalyse und Fit-Analysen unterstützt. In diesem Kurs werden Beispiele in Python gezeigt, und wir verwenden Jupyter Notebooks. Alternativ könnt ihr auch Qti-Plot (kostenlos) oder Matlab (Lizenzen über die HSU verfügbar) nutzen.
{warning}
Alle Beispiele im *Metrology Lecture Book* sind Jupyter-Notebooks und verwenden Python. Unter **🐍 Jupyter Notebooks** findet ihr eine Sammlung von hilfreichen Jupyter-Notebooks für das Messtechnik-Praktikum.
Es gibt zahlreiche Tutorials und Online-Ressourcen, die euch das Erlernen der Python-Programmierung leicht und verständlich ermöglichen. Für die Tutorials sind folgende Grundkenntnisse erforderlich, die ihr innerhalb der Tutorials erlernen könnt:
Mittels Diagrammen (engl. Plots) werden Messwerte dargestellt. Die folgenden Regeln helfen dabei, dass die Diagramme anschaulich sind und der Betrachter direkt erkennt, worum es geht:
lw=0.4
, ms=0.1
:::{admonition} Aufgabe
:class: tip
Im Folgenden ist eine sehr ungünstige Darstellung gewählt, um die Messdaten zu zeigen. Klicke oben auf dieser Webseite auf die Rakete und starte Live Code
und optimier die Darstellung des Diagramms. Folgende Hinweise geben wir dir mit auf den Weg:
plt.rcParams['font.size'] = 4;
plt.xlim([1850,2040])
plt.ylim([-5,5])
plt.xlabel('x')
plt.ylabel('y')
label="Werte"
label="Irgendeine Kurve von irgendwem berechnet"
1880
an mehreren Stellen.:::
#Benötigte Libraries:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import plotly.offline as py
py.init_notebook_mode(connected=True)
import plotly.graph_objs as go
import plotly.tools as tls
import seaborn as sns
import time
# MatplotLib Settings:
plt.style.use('default') # Matplotlib Style wählen
fig = plt.figure(figsize=(9,5)) # Plot-Größe
plt.rcParams['font.size'] = 4; # Schriftgröße
link = 'data/graph.csv' # Beispieldatei mit Klimadaten
global_mean = pd.read_csv(link, header = 1) # Daten einlesen
global_mean["uncertainty"] = 0.25 #Messunsicherheiten abschätzen, hier 0.25K Temperaturgenauigkeit angenommen
# Lineare Regression berechnen:
x=global_mean.loc[global_mean["Year"] >= 1880,"Year"]
y=global_mean.loc[global_mean["Year"] >= 1880,"No_Smoothing"]
y_err = global_mean.loc[global_mean["Year"] >= 1880,"uncertainty"]
model = np.polyfit(x, y, deg=1, w=1/y_err, cov=True) # 1. Wert = Anstieg , 2. Wert = Schnittpunkt mit y-Achse
y_model = model[0][0]*x+model[0][1] # Modell einer linearen Regression
# print(global_mean) # Eingelesene Daten ausgeben
plt.errorbar(global_mean["Year"],global_mean["No_Smoothing"], yerr=global_mean["uncertainty"], ls="-", lw=0.4, marker="s", ms=0.1, color="tab:gray", alpha=0.5, label="Werte");
plt.plot(global_mean["Year"],global_mean["Lowess(5)"], lw=4, color="tab:blue", label="Irgendeine Kurve von irgendwem berechnet");
plt.plot(x,y_model, ls="-", lw=4, color="tab:red", label=f"fit");
plt.xlabel('x')
plt.ylabel('y')
plt.xlim([1850,2040])
plt.ylim([-5,5])
plt.legend();
plt.grid();
# Temperaturanstieg ausgeben:
print(f"Lineares Model Output: {model[0][0]:.3f}°C/Jahr")
Lineares Model Output: 0.008°C/Jahr
from myst_nb import glue
# MatplotLib Settings:
plt.style.use('default') # Matplotlib Style wählen
fig = plt.figure(figsize=(9,5)) # Plot-Größe
plt.rcParams['font.size'] = 10; # Schriftgröße
link = 'data/graph.csv' # Beispieldatei mit Klimadaten
global_mean = pd.read_csv(link, header = 1) # Daten einlesen
global_mean["uncertainty"] = 0.25 #Messunsicherheiten abschätzen, hier 0.25K Temperaturgenauigkeit angenommen
# Lineare Regression berechnen:
x=global_mean.loc[global_mean["Year"] >= 1980,"Year"]
y=global_mean.loc[global_mean["Year"] >= 1980,"No_Smoothing"]
y_err = global_mean.loc[global_mean["Year"] >= 1980,"uncertainty"]
model = np.polyfit(x, y, deg=1, w=1/y_err, cov=True) # 1. Wert = Anstieg , 2. Wert = Schnittpunkt mit y-Achse
y_model = model[0][0]*x+model[0][1] # Modell einer linearen Regression
# print(global_mean) # Eingelesene Daten ausgeben
plt.errorbar(global_mean["Year"],global_mean["No_Smoothing"], yerr=global_mean["uncertainty"], ls="-", lw=1, marker="s", ms=3, color="tab:gray", alpha=0.5, label="Werte");
plt.plot(global_mean["Year"],global_mean["Lowess(5)"], lw=3, color="tab:blue", label="Glättung (NASA)");
plt.plot(x,y_model, ls="-", lw=3, color="tab:red", label=f"lineare Regression y=({model[0][0]*1000:.3f}+-{np.sqrt(model[1][0][0]*1000):.3f})1e-3*x+({model[0][1]:.3f}+-{np.sqrt(model[1][1][1]):.3f})");
plt.xlabel('Jahr')
plt.ylabel("Jahresmitteltemperaturabweichung [°C]")
plt.legend();
plt.grid();
# Temperaturanstieg ausgeben:
print(f"Temperaturanstieg pro Jahr (von 1980 bis 2020): {model[0][0]:.3f}°C/Jahr")
glue("glued_klimadaten_fig", fig, display=False)
Temperaturanstieg pro Jahr (von 1980 bis 2020): 0.019°C/Jahr
{div}
````{admonition} Beispiel-Lösung
:class: dropdown
```python
# MatplotLib Settings:
plt.style.use('default') # Matplotlib Style wählen
fig = plt.figure(figsize=(9,5)) # Plot-Größe
plt.rcParams['font.size'] = 10; # Schriftgröße
link = 'data/graph.csv' # Beispieldatei mit Klimadaten
global_mean = pd.read_csv(link, header = 1) # Daten einlesen
global_mean["uncertainty"] = 0.25 #Messunsicherheiten abschätzen, hier 0.25K Temperaturgenauigkeit angenommen
# Lineare Regression berechnen:
x=global_mean.loc[global_mean["Year"] >= 1980,"Year"]
y=global_mean.loc[global_mean["Year"] >= 1980,"No_Smoothing"]
y_err = global_mean.loc[global_mean["Year"] >= 1980,"uncertainty"]
model = np.polyfit(x, y, deg=1, w=1/y_err, cov=True) # 1. Wert = Anstieg , 2. Wert = Schnittpunkt mit y-Achse
y_model = model[0][0]*x+model[0][1] # Modell einer linearen Regression
# print(global_mean) # Eingelesene Daten ausgeben
plt.errorbar(global_mean["Year"],global_mean["No_Smoothing"], yerr=global_mean["uncertainty"], ls="-", lw=1, marker="s", ms=3, color="tab:gray", alpha=0.5, label="Werte");
plt.plot(global_mean["Year"],global_mean["Lowess(5)"], lw=3, color="tab:blue", label="Glättung (NASA)");
plt.plot(x,y_model, ls="-", lw=3, color="tab:red", label=f"lineare Regression y=({model[0][0]*1000:.3f}+-{np.sqrt(model[1][0][0]*1000):.3f})1e-3*x+({model[0][1]:.3f}+-{np.sqrt(model[1][1][1]):.3f})");
plt.xlabel('Jahr')
plt.ylabel("Jahresmitteltemperaturabweichung [°C]")
plt.legend();
plt.grid();
# Temperaturanstieg ausgeben:
print(f"Temperaturanstieg pro Jahr (von 1980 bis 2020): {model[0][0]:.3f}°C/Jahr")
```
```{glue:} glued_klimadaten_fig
```
````