Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Example lab report #409

Closed
wants to merge 50 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
06ddd5b
added complete solution directory
LuckyJosh Sep 16, 2024
16ea8a3
renamed python file
LuckyJosh Sep 16, 2024
a798f5d
moved measurement data to directory
LuckyJosh Sep 16, 2024
09991b1
add some realistic text for the first three sections
LuckyJosh Sep 18, 2024
ff94dbf
add data directory with data files
LuckyJosh Sep 18, 2024
eacc0bd
add evaluaton script
LuckyJosh Sep 18, 2024
c028a4c
add some 'library' files
LuckyJosh Sep 18, 2024
56ef974
add tikz for the setup-sketch & some fake data to the title page
LuckyJosh Sep 18, 2024
53ee2c7
update table package
LuckyJosh Sep 18, 2024
1d0b8d5
add one fitting source
LuckyJosh Sep 18, 2024
80fed6a
fix filenames
LuckyJosh Sep 18, 2024
081b7b7
cancle a factor
LuckyJosh Sep 18, 2024
f889761
simplyfiy the fit-functions
LuckyJosh Sep 18, 2024
2227017
add all targets to makefile
LuckyJosh Sep 18, 2024
07a102b
Merge branch 'main' into example-lab-report
LuckyJosh Sep 18, 2024
f56fc51
added some notes to discussion simulating 'todo notes'
LuckyJosh Sep 20, 2024
c17a194
update captions
LuckyJosh Sep 20, 2024
f7b357d
improve qty formatting function
LuckyJosh Sep 20, 2024
bc54db0
fix dates
LuckyJosh Sep 20, 2024
91cf74b
added authors
LuckyJosh Sep 20, 2024
7e7c22b
added a book bib-entry
LuckyJosh Sep 20, 2024
5f1dad9
add info to legends
LuckyJosh Sep 20, 2024
4fd4a89
change exported values: I unit & add g
LuckyJosh Sep 20, 2024
5dd331f
add some citations
LuckyJosh Sep 20, 2024
34b79c5
change listing of fit parameters
LuckyJosh Sep 20, 2024
0469613
fix spacing
LuckyJosh Sep 20, 2024
b452ea2
fix typo
LuckyJosh Sep 20, 2024
55f199f
reformat equation
LuckyJosh Sep 20, 2024
86f3d0b
moved complete version to the last exercises collection '8-all'
LuckyJosh Sep 20, 2024
981f468
add first step for the example report
LuckyJosh Sep 20, 2024
ed12c3e
removed the uncertianties from this first step
LuckyJosh Sep 20, 2024
45f96b9
fix calculation for cylinder MoI
LuckyJosh Sep 20, 2024
88e9561
add second step for the example lab report
LuckyJosh Sep 22, 2024
33ad874
fix camera measurments
LuckyJosh Sep 22, 2024
ba97036
readd missing footer for unit information
LuckyJosh Sep 22, 2024
5a1242a
add subtask of calculating the mean
LuckyJosh Sep 22, 2024
39ce28c
add third step for the example lab report
LuckyJosh Sep 22, 2024
89c2055
fix inconsitencies to prior steps
LuckyJosh Sep 22, 2024
b9608c9
changed additional-tasks to subtasks
LuckyJosh Sep 22, 2024
9398a60
add fourth step for the example lab report
LuckyJosh Sep 22, 2024
d7ec6ce
moved missplaced aufgabe.txt
LuckyJosh Sep 22, 2024
3431b10
fix missing square
LuckyJosh Sep 22, 2024
6257791
add fifth step for the example lab report
LuckyJosh Sep 22, 2024
d7f1010
fix wrong uncertainties
LuckyJosh Sep 22, 2024
c8206d7
add sixth step for the example protocoll
LuckyJosh Sep 22, 2024
e654a7e
fix symup -> operatorname
LuckyJosh Sep 22, 2024
67bf18b
changed directory name for example report
LuckyJosh Sep 22, 2024
07d1588
fixes from languagetool
LuckyJosh Sep 22, 2024
2b62abe
add Makefiles for the report-example
LuckyJosh Sep 22, 2024
c22b0ae
Merge branch 'main' into example-lab-report
LuckyJosh Sep 23, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion exercises-toolbox/1-python/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,13 @@ include ../../common/common.mk
include ../../common/loesung.py.mk
include ../../common/generate_vorlage.mk

all: 5-readwrite/test.txt
all: 5-readwrite/test.txt example-report/v16516.pdf

5-readwrite/test.txt: 5-readwrite/loesung2.py.dummy
@echo "Dies ist ein Beispiel" > 5-readwrite/test.txt

example-report/v16516.pdf: | ../8-all/report-example/loesung/v16516/build/v16516.pdf
cp ../8-all/report-example/loesung/v16516/build/v16516.pdf example-report

../8-all/report-example/loesung/v16516/build/v16516.pdf:
$(MAKE) -C ../8-all/report-example/loesung/v16516/
Binary file added exercises-toolbox/1-python/example-report
Binary file not shown.
30 changes: 30 additions & 0 deletions exercises-toolbox/1-python/report-example/aufgabe.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Realistisches-Beispiel-Protokoll

Einleitung:

Wie der Name der Aufgabe schon verspricht, werdet ihr im Zuge dieser Aufgabe ein vollständiges
und realistisches Versuchsprotokoll erstellen. Diesem Ziel werdet ihr Tag für Tag etwas näher kommen
können, in dem die Themen des jeweiligen Tages integriert werden.

Um zu wissen, wo es hingeht, findet ihr auch in diesem Ordner schon das vollständige Protokoll zum Ansehen.

Aufgabe:

Heute fällt diese Aufgabe noch nicht zu umfangreich aus. Es geht zunächst nur um das Kopieren
des Ordners in dem ihr diese Aufgabe immer weiter ergänzt. Dieser Ordner heißt 'v16516' und befindet sich
im Ordner 'vorlage'. Kopiert den Ordner 'v16516' in einen Ordner, in dem ihr diesen im Lauf des
Workshops wieder findet, z.B. '~/Documents/Toolbox-Workshop'.

Das war es schon, morgen gehts weiter.

Erklärung:

Im Ordner 'v16516' befindet sich noch nicht viel, nur eine leere Pythondatei und ein Ordner 'data' in dem sich
die Textdateien mit den Messwerten befinden, die ihr für die Auswertung verwenden werdet. Das spaßige Abtippen
der Messwerte aus dem Laborbuch, haben wir euch schonmal abgenommen. ;)






Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# l
80
# Länge der Bahn
# cm (l / cm)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# h,Fi,Ff,
4.5,436,492
4.5,555,610
4.5,672,729
10,95,130
10,199,235
10,303,338
15,91,119
15,201,229
15,335,362
20,232,256
20,323,347
20,397,421
25,153,174
25,239,260
25,322,343
30,219,238
30,319,338
30,391,412
# Messreihe: Kugel
# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#h,Fi,Ff
4.5,1018,1083
4.5,1189,1248
4.5,1340,1404
10,596,636
10,762,801
10,882,921
15,574,605
15,766,798
15,863,896
20,679,707
20,810,838
20,930,959
25,650,674
25,892,917
25,804,827
30,642,664
30,739,760
30,900,922
# Messreihe: Zylinder
# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1)
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# fps
30
# Framerate der Videoaufnahmen
# Frames per second (fps / 1/s)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#m,U
216,30.5

# Messdaten der Kugel: Vollkugel
# Umfang (U/cm), Masse (m/g)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#m,U,d
186,24.3,3

# Messdaten des Zylinders: Hohlzylinder mit Boden aber ohne Deckel
# Umfang (U/cm), Masse (m/g), Wanddicke (Differenz zwischen Innen- und Außenradius) (d/mm)
21 changes: 21 additions & 0 deletions exercises-toolbox/2-numpy/report-example/aufgabe.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Realistisches Beispiel Protokoll

Einleitung:
Um dieser Aufgabe sinnvoll folgen zu können sollte diese von Anfang an bearbeitet werden. Folgt den
Anweisungen in den 'aufgabe.txt' Dateien im Ordner 'Realistisches-Beispiel-Protokoll', beginnend
im Aufgabenordner '1-python'.

Aufgabe:
Mit den Informationen zu numpy habt ihr nun die Möglichkeit die Messwerte aus dem Ordner 'data'
einzulesen und zu verarbeiten.

1. Importiert numpy in der Datei 'auswertung.py', lest die Messwerte in den Dateien im Ordner 'data' ein
(achtet auf die Angabe der Einheiten zu den Messwerten)
2. Gebt diese auf das Terminal aus um zu sehen ob, die Werte richtig geladen wurden
3. Berechnet mit den Daten folgende Werte (die Gleichungen stehen im fertigen Beispiel-Protokoll)
- Radius r von Ball und Zylinder
- Trägheitsmoment I von Ball und Zylinder
- Zeitdauern t für das Herabrollen beider Objekte
4. Gebt auch diese berechneten Werte auf das Terminal aus, um diese zu überprüfen
5. Die Messung wurde für jede Höhe dreifach durchgeführt. Berechnet für jede Höhe
jeweils den zugehörigen Mittelwert der Zeitdauern
161 changes: 161 additions & 0 deletions exercises-toolbox/2-numpy/report-example/loesung/v16516/auswertung.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
# Kommentar:
# Importiere numpy unter dem Namen np

import numpy as np

# Kommentar:
# Die Daten liegen im Ordner 'data'. Um die Dateien einlesen
# zu können, reicht es deswegen nicht den Dateinamen anzugeben,
# es muss der gesamte Pfad ('Orderabfolge') angegeben werden:
#
# Für die Datei: Messwerte_Bahn.txt also data/Messwerte_Bahn.txt
#
# Der Name der Variable in der die eingelesenen Werte gespeichert werden
# ist frei wählbar, es bietet sich bei 'langen' Skripten an (im Gegensatz zur Mathematik)
# nicht nur einbuchstabige Abkürzungen zu verwenden, um nicht die Übersicht zu verlieren.
# Also beispielsweise track_length statt L. Ein Kommentar zur erklären sollte aber drin sein.
#
# Es bietet sich an die Daten direkt beim Einlesen in eine sinnvolle Einheit umzuwandeln
# (falls nötig) und diese mit einem Kommentar zu vermerken

# Länge der schiefen Ebene
L = np.genfromtxt("data/Messwerte_Bahn.txt", delimiter=",")/100 # m

# Framerate der Kamera
fps = np.genfromtxt("data/Messwerte_Kamera.txt", delimiter=",") # 1/s
# Kommentar:
# Die Daten aus Dateien mit mehreren spalten muss man in einer extra Zeile skalieren

# Masse und Umfang der Kugel
m_b, u_b = np.genfromtxt("data/Messwerte_Kugel.txt", delimiter=",", unpack=True)
m_b = m_b/1000 # kg
u_b = u_b/100 # m

# Messreihe: Starthöhe und Startframe und Endframe (Kugel)
h_b, Fi_b, Ff_b = np.genfromtxt("data/Messwerte_Frames_Kugel.txt", delimiter=",", unpack=True)
h_b = h_b/100 # m

# Masse und Umfang des Zylinders
m_c, u_c, d_c = np.genfromtxt("data/Messwerte_Zylinder.txt", delimiter=",", unpack=True)
m_c = m_c/1000 # kg
u_c = u_c/100 # m
d_c = d_c/100 # m

# Messreihe: Starthöhe und Startframe und Endframe (Zylinder)
h_c, Fi_c, Ff_c = np.genfromtxt("data/Messwerte_Frames_Zylinder.txt", delimiter=",", unpack=True)
h_c = h_c/100 # m

# Kommentar:
# Ein gewisses Maß an Struktur in der Benennung von Variablen hilft bei der Orientierung,
# gerade in der Zusammenarbeit mit euren jeweiligen Partnern.
# Man muss es aber auch nicht übertreiben. Gerade ein Sprachenmix aus deutsch und englisch
# ist nicht besonders tragisch: z.B. steht m_b für mass_ball aber u_b für umfang_ball,
# aber das p_b für perimeter_ball würde mir persönlich nicht so klar werden.


# Kommentar:
# Auch die einzelnen "Arbeitsschritte" der Auswertung sollten in einem
# kurzen Kommentar erklärt werden.

# Berechnung der benötigten Größen: Radius und Trägheitsmoment

# Radius der Kugel
r_b = u_b/(2*np.pi)

# Äußerer Radius des Zylinders
ro_c = u_c/(2*np.pi)

# Innerer Radius des Zylinders
ri_c = ro_c - d_c


# Trägheitsmoment der Kugel
I_b = 2/5 * m_b * r_b**2

# Trägheitsmoment des Zylinders
I_c = 1/2 * m_c * (ro_c**2 + ri_c**2)

print("Trägheitsmoment (Kugel)")
print(I_b)

print("Trägheitsmoment (Zylinder)")
print(I_c)


# Berechnung der Rollzeiten aus den Messwerten der Frames und Framerate
t_b = (Ff_b - Fi_b)/fps
t_c = (Ff_c - Fi_c)/fps

# Berechnung des Mittelwerts für die Zeitdauer t für jede (dreifach gemessene) Höhe

# Kommentar:
# Es ist ein neuer Name (t_b_mean) notwendig, wenn die alten Werte in t_b
# noch verfügbar bleiben sollen
#
# Hieran sieht man (schon im Kleinen) die Nützlichkeit der numpy arrays
# und der möglichen Manipulationen:
# reshape(-1,3):
# Im array t_b liegen die zu mittelnden Werte immer genau hintereinander
# durch reshape(-1,3) wird aus t_b ein 2D array erzeugt, das in jeder
# Zeile 3 Spalten hat. Das bedeutet: Nach jeweils 3 Werten in t_b wird eine neue
# Zeile begonnen, damit sind in jeder Zeile genau die Werte die gemittelt werden sollen.
# Die -1 als Anzahl der Zeilen ist gibt numpy die Anweisung, diese Anzahl
# selbst zu berechnen.
#
# mean(axis=1):
# Bei einem 2D array bezeichnet axis=0 die Zeilen und axis=1 die Spalten.
# Berechnet den Mittelwert "entlang der axis 1", d.h. die axis 1 ist die "Dimension"
# des arrays, über die summiert wird (die danach nur noch einen Wert enthält).
# Da jede Zeile genau die drei Werte enthält, die zu mitteln sind, enthält jede
# Zeile danach genau den jeweiligen Mittelwert.

t_b_mean = t_b.reshape(-1,3).mean(axis=1)



# Kommentar:
# Das Array h_b enthält jede Höhe dreifach, auch die Auswahl
# der einzelnen Höhen kann durch array Manipulation geschehen.
#
# Die Benennung der Variable (h_b_mean) wurde so gewählt,
# dass diese zur zugehörigen Variable für die Zeitdauern passt
#
# reshape(-1, 3):
# analog zur Manipulation von t_b
# [:,0]
# Aus jeder Zeile (= erster Index ist ':') wird die 'nullte' Spalte (= zweiter Index ist '0')
# ausgewählt, d.h. in jeder Zeile bleibt genau eine Höhe erhalten.

h_b_mean = h_b.reshape(-1,3)[:,0]



# Kommentar:
# analog für die andere Messreihe

t_c_mean = t_c.reshape(-1,3).mean(axis=1)
h_c_mean = h_c.reshape(-1,3)[:,0]

# Ausgabe verarbeiteten der Messwerte

print("Messwerte (Kugel)")
print("alle Zeiten")
print(t_b)
print("alle Höhen")
print(h_b)
print("Höhe")
print(h_b_mean)
print("gemittlelte Zeit")
print(t_b_mean)
print("\n")


print("Messwerte (Zylinder)")
print("alle Höhen")
print(h_c)
print("alle Zeiten")
print(t_c)
print("Höhe")
print(h_c_mean)
print("gemittlelte Zeit")
print(t_c_mean)
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# l
80
# Länge der Bahn
# cm (l / cm)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# h,Fi,Ff,
4.5,436,492
4.5,555,610
4.5,672,729
10,95,130
10,199,235
10,303,338
15,91,119
15,201,229
15,335,362
20,232,256
20,323,347
20,397,421
25,153,174
25,239,260
25,322,343
30,219,238
30,319,338
30,391,412
# Messreihe: Kugel
# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1)
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#h,Fi,Ff
4.5,1018,1083
4.5,1189,1248
4.5,1340,1404
10,596,636
10,762,801
10,882,921
15,574,605
15,766,798
15,863,896
20,679,707
20,810,838
20,930,959
25,650,674
25,892,917
25,804,827
30,642,664
30,739,760
30,900,922
# Messreihe: Zylinder
# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1)
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# fps
30
# Framerate der Videoaufnahmen
# Frames per second (fps / 1/s)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#m,U
216,30.5

# Messdaten der Kugel: Vollkugel
# Umfang (U/cm), Masse (m/g)
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#m,U,d
186,24.3,3

# Messdaten des Zylinders: Hohlzylinder mit Boden aber ohne Deckel
# Umfang (U/cm), Masse (m/g), Wanddicke (Differenz zwischen Innen- und Außenradius) (d/mm)
28 changes: 28 additions & 0 deletions exercises-toolbox/3-matplotlib/report-example/aufgabe.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Realistisches Beispiel Protokoll

Einleitung:
Um dieser Aufgabe sinnvoll folgen zu können sollte diese von Anfang an bearbeitet werden. Folgt den
Anweisungen in den 'aufgabe.txt' Dateien im Ordner 'Realistisches-Beispiel-Protokoll', beginnend
im Aufgabenordner '1-python'.

Aufgabe:
Mit den Informationen über matplotlib könnt ihr nun die zwei Plots aus den Daten erstellen,
die ihr in der letzten Aufgabe verarbeitet habt.

Erstellt für jede Messreihe (Kugel, Zylinder) jeweils eine Abbildung:
1. Importiert matplotlib.pyplot in eure Datei auswertung.py
2. Erstellt jeweils eine Abbildung mit einem subplot, in dem die Messwerte (die berechneten Mittelwerte)
als schwarze '+' dargestellt werden.

Die Berechnung von Ausgleichskurven wird erst durch eine weitere Bibliothek (scipy) möglich.
Jedoch könnt ihr den Verlauf der theoretischen Funktionen bereits in die Plots einzeichnen.

3. Schreibt jeweils eine Python-Funktion für die Gleichungen t_B(h) und t_Z(h) (Gleichungen 4 und 5 im Protokoll).
Lls Wert für g könnt ihr 9.81 verwenden (auch dafür wird scipy noch eine bessere Lösung sein)
4. Erstellt mit np.linspace ein array mit vielen Werten die für den Plot der Theorie-Funktion verwendet werden können.
(da matplotlib im Prinzip einzelne Punkte zeichnet bzw. diese mit Geraden verbindet, braucht man für Theorie-Funktion
sehr viele Punkte und kann nicht einfach nur die Messwerte für h verwenden.)
5. Ergänzt die Theorie-Funktion im jeweiligen plot der Messwerte.



Loading
Loading