From 06ddd5beaf44b7d0bdd0ea7048726863a81cb088 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Mon, 16 Sep 2024 12:10:20 +0200 Subject: [PATCH 01/48] added complete solution directory --- .../example-lab-report/loesung/Makefile | 7 + .../example-lab-report/loesung/README.md | 12 ++ .../loesung/header-matplotlib.tex | 44 ++++++ .../example-lab-report/loesung/header.tex | 138 ++++++++++++++++++ .../example-lab-report/loesung/lit.bib | 5 + .../example-lab-report/loesung/matplotlibrc | 23 +++ .../example-lab-report/loesung/programme.bib | 72 +++++++++ .../loesung/v16516/Makefile | 33 +++++ .../loesung/v16516/Messwerte_Frames_Kugel.txt | 21 +++ .../v16516/Messwerte_Frames_Zylinder.txt | 21 +++ .../loesung/v16516/Messwerte_Kugel.txt | 5 + .../loesung/v16516/Messwerte_Zylinder.txt | 5 + .../loesung/v16516/Messwerte_framerate.txt | 4 + .../loesung/v16516/auswertung-1.py | 11 ++ .../loesung/v16516/content/auswertung.tex | 12 ++ .../loesung/v16516/content/diskussion.tex | 2 + .../loesung/v16516/content/durchfuehrung.tex | 2 + .../loesung/v16516/content/theorie.tex | 4 + .../example-lab-report/loesung/v16516/plot.py | 18 +++ .../loesung/v16516/v16516.tex | 25 ++++ 20 files changed, 464 insertions(+) create mode 100644 exercises-latex/example-lab-report/loesung/Makefile create mode 100644 exercises-latex/example-lab-report/loesung/README.md create mode 100644 exercises-latex/example-lab-report/loesung/header-matplotlib.tex create mode 100644 exercises-latex/example-lab-report/loesung/header.tex create mode 100644 exercises-latex/example-lab-report/loesung/lit.bib create mode 100644 exercises-latex/example-lab-report/loesung/matplotlibrc create mode 100644 exercises-latex/example-lab-report/loesung/programme.bib create mode 100644 exercises-latex/example-lab-report/loesung/v16516/Makefile create mode 100644 exercises-latex/example-lab-report/loesung/v16516/Messwerte_Frames_Kugel.txt create mode 100644 exercises-latex/example-lab-report/loesung/v16516/Messwerte_Frames_Zylinder.txt create mode 100644 exercises-latex/example-lab-report/loesung/v16516/Messwerte_Kugel.txt create mode 100644 exercises-latex/example-lab-report/loesung/v16516/Messwerte_Zylinder.txt create mode 100644 exercises-latex/example-lab-report/loesung/v16516/Messwerte_framerate.txt create mode 100644 exercises-latex/example-lab-report/loesung/v16516/auswertung-1.py create mode 100644 exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex create mode 100644 exercises-latex/example-lab-report/loesung/v16516/content/diskussion.tex create mode 100644 exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex create mode 100644 exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex create mode 100644 exercises-latex/example-lab-report/loesung/v16516/plot.py create mode 100644 exercises-latex/example-lab-report/loesung/v16516/v16516.tex diff --git a/exercises-latex/example-lab-report/loesung/Makefile b/exercises-latex/example-lab-report/loesung/Makefile new file mode 100644 index 00000000..554db107 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/Makefile @@ -0,0 +1,7 @@ +all: + $(MAKE) -C v16516 + +clean: + $(MAKE) -C v16516 clean + +.PHONY: all cleanX diff --git a/exercises-latex/example-lab-report/loesung/README.md b/exercises-latex/example-lab-report/loesung/README.md new file mode 100644 index 00000000..671fb24a --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/README.md @@ -0,0 +1,12 @@ +# Vorlage für Praktikumsprotokolle + + +Dieser Ordner enthält die Struktur für Praktikumsprotokolle mit +allem, was in diesem Kurs besprochen wurde. + +In Basisordner liegt der LaTeX-Header, Literaturdatenbank (`lit.bib`) sowie die der LaTeX-Header für matplotlib +und die matplotlibrc. +Außerdem haben wir in `programme.bib` die korrekten Quellen für die verwendete Software angegeben. + +In dem Unterordner `vXXX` liegt dann ein Template für einen einzelnen Versuch, +welches für die jeweiligen Versuche kopiert und „ausgefüllt“ werden kann. diff --git a/exercises-latex/example-lab-report/loesung/header-matplotlib.tex b/exercises-latex/example-lab-report/loesung/header-matplotlib.tex new file mode 100644 index 00000000..1d23aac1 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/header-matplotlib.tex @@ -0,0 +1,44 @@ +% unverzichtbare Mathe-Befehle +\usepackage{amsmath} +% viele Mathe-Symbole +\usepackage{amssymb} +% Erweiterungen für amsmath +\usepackage{mathtools} +% Fonteinstellungen +\usepackage{fontspec} +% Latin Modern Fonts werden automatisch geladen + +\usepackage[ + math-style=ISO, % ┐ + bold-style=ISO, % │ + sans-style=italic, % │ ISO-Standard folgen + nabla=upright, % │ + partial=upright, % ┘ + warnings-off={ % ┐ + mathtools-colon, % │ unnötige Warnungen ausschalten + mathtools-overbracket, % │ + }, % ┘ +]{unicode-math} + +% traditionelle Fonts für Mathematik +\setmathfont{Latin Modern Math} +\setmathfont{XITS Math}[range={scr, bfscr}] +\setmathfont{XITS Math}[range={cal, bfcal}, StylisticSet=1] + +% Zahlen und Einheiten +\usepackage[ + locale=DE, % deutsche Einstellungen + separate-uncertainty=true, % immer Unsicherheit mit \pm + per-mode=reciprocal, % ^-1 für inverse Einheiten + output-decimal-marker=., % . statt , für Dezimalzahlen +]{siunitx} + +% chemische Formeln +\usepackage[ + version=4, + math-greek=default, % ┐ mit unicode-math zusammenarbeiten + text-greek=default, % ┘ +]{mhchem} + +% schöne Brüche im Text +\usepackage{xfrac} diff --git a/exercises-latex/example-lab-report/loesung/header.tex b/exercises-latex/example-lab-report/loesung/header.tex new file mode 100644 index 00000000..7faa6efe --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/header.tex @@ -0,0 +1,138 @@ +\documentclass[ + bibliography=totoc, % Literatur im Inhaltsverzeichnis + captions=tableheading, % Tabellenüberschriften + titlepage=firstiscover, % Titelseite ist Deckblatt +]{scrartcl} + +% Paket float verbessern +\usepackage{scrhack} + +% Warnung, falls nochmal kompiliert werden muss +\usepackage[aux]{rerunfilecheck} + +% unverzichtbare Mathe-Befehle +\usepackage{amsmath} +% viele Mathe-Symbole +\usepackage{amssymb} +% Erweiterungen für amsmath +\usepackage{mathtools} + +% Fonteinstellungen +\usepackage{fontspec} +% Latin Modern Fonts werden automatisch geladen +% Alternativ zum Beispiel: +%\setromanfont{Libertinus Serif} +%\setsansfont{Libertinus Sans} +%\setmonofont{Libertinus Mono} + +% Wenn man andere Schriftarten gesetzt hat, +% sollte man das Seiten-Layout neu berechnen lassen +\recalctypearea{} + +% deutsche Spracheinstellungen +\usepackage[ngerman]{babel} + + +\usepackage[ + math-style=ISO, % ┐ + bold-style=ISO, % │ + sans-style=italic, % │ ISO-Standard folgen + nabla=upright, % │ + partial=upright, % │ + mathrm=sym, % ┘ + warnings-off={ % ┐ + mathtools-colon, % │ unnötige Warnungen ausschalten + mathtools-overbracket, % │ + }, % ┘ +]{unicode-math} + +% traditionelle Fonts für Mathematik +\setmathfont{Latin Modern Math} +% Alternativ zum Beispiel: +%\setmathfont{Libertinus Math} + +\setmathfont{XITS Math}[range={scr, bfscr}] +\setmathfont{XITS Math}[range={cal, bfcal}, StylisticSet=1] + +% Zahlen und Einheiten +\usepackage[ + locale=DE, % deutsche Einstellungen + separate-uncertainty=true, % immer Unsicherheit mit \pm + per-mode=symbol-or-fraction, % / in inline math, fraction in display math +]{siunitx} + +% chemische Formeln +\usepackage[ + version=4, + math-greek=default, % ┐ mit unicode-math zusammenarbeiten + text-greek=default, % ┘ +]{mhchem} + +% richtige Anführungszeichen +\usepackage[autostyle]{csquotes} + +% schöne Brüche im Text +\usepackage{xfrac} + +% Standardplatzierung für Floats einstellen +\usepackage{float} +\floatplacement{figure}{htbp} +\floatplacement{table}{htbp} + +% Floats innerhalb einer Section halten +\usepackage[ + section, % Floats innerhalb der Section halten + below, % unterhalb der Section aber auf der selben Seite ist ok +]{placeins} + +% Seite drehen für breite Tabellen: landscape Umgebung +\usepackage{pdflscape} + +% Captions schöner machen. +\usepackage[ + labelfont=bf, % Tabelle x: Abbildung y: ist jetzt fett + font=small, % Schrift etwas kleiner als Dokument + width=0.9\textwidth, % maximale Breite einer Caption schmaler +]{caption} +% subfigure, subtable, subref +\usepackage{subcaption} + +% Grafiken können eingebunden werden +\usepackage{graphicx} + +% schöne Tabellen +\usepackage{booktabs} + +% Verbesserungen am Schriftbild +\usepackage{microtype} + +% Literaturverzeichnis +\usepackage[ + backend=biber, +]{biblatex} +% Quellendatenbank +\addbibresource{lit.bib} +\addbibresource{programme.bib} + +% Hyperlinks im Dokument +\usepackage[ + german, + unicode, % Unicode in PDF-Attributen erlauben + pdfusetitle, % Titel, Autoren und Datum als PDF-Attribute + pdfcreator={}, % ┐ PDF-Attribute säubern + pdfproducer={}, % ┘ +]{hyperref} +% erweiterte Bookmarks im PDF +\usepackage{bookmark} + +% Trennung von Wörtern mit Strichen +\usepackage[shortcuts]{extdash} + +\author{% + AUTOR A\\% + \href{mailto:authorA@udo.edu}{authorA@udo.edu}% + \and% + AUTOR B\\% + \href{mailto:authorB@udo.edu}{authorB@udo.edu}% +} +\publishers{TU Dortmund – Fakultät Physik} diff --git a/exercises-latex/example-lab-report/loesung/lit.bib b/exercises-latex/example-lab-report/loesung/lit.bib new file mode 100644 index 00000000..d4e4807b --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/lit.bib @@ -0,0 +1,5 @@ +@manual{sample, + organization = {TU Dortmund, Fakultät Physik}, + title = {Versuch zum Literaturverzeichnis}, + year = 2023 +} diff --git a/exercises-latex/example-lab-report/loesung/matplotlibrc b/exercises-latex/example-lab-report/loesung/matplotlibrc new file mode 100644 index 00000000..1746ade8 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/matplotlibrc @@ -0,0 +1,23 @@ +# pgf-Backend benutzen +backend : pgf + +# Größe der Zeichenfläche in Zoll +figure.figsize : 5.78, 3.57 +figure.constrained_layout.use : True + +# Serifenfont benutzen +font.family : serif + +# Fontgrößen +font.size : 11 +legend.fontsize : medium +xtick.labelsize : 9 +ytick.labelsize : 9 + +# unsere Fonteinstellungen benutzen +pgf.rcfonts : False + +# TeX benutzen +text.usetex : True +pgf.texsystem : lualatex +pgf.preamble : \input{header-matplotlib.tex} diff --git a/exercises-latex/example-lab-report/loesung/programme.bib b/exercises-latex/example-lab-report/loesung/programme.bib new file mode 100644 index 00000000..efe7aa60 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/programme.bib @@ -0,0 +1,72 @@ +@article{matplotlib, + author = "Hunter, John D.", + title = "{Matplotlib}: A {2D} Graphics Environment", + publisher = "IEEE", + year = "2007", + journal = "Computing in Science \& Engineering", + volume = "9", + number = "3", + pages = "90--95", + url = "http://matplotlib.org/", + version = "1.4.3", + doi = {10.1109/MCSE.2007.55}, + addendum = {Current version 3.8.0, \textsc{doi}: \href{https://zenodo.org/record/8347255}{\texttt{10.5281/zenodo.8347255}}} +} + +% taken from https://numpy.org/citing-numpy/ but replaced the key 'harris2020array' with 'numpy' +% to keep the neccessary changes to this file +@article{ numpy, + title = {Array programming with {NumPy}}, + author = {Charles R. Harris and K. Jarrod Millman and St{\'{e}}fan J. + van der Walt and Ralf Gommers and Pauli Virtanen and David + Cournapeau and Eric Wieser and Julian Taylor and Sebastian + Berg and Nathaniel J. Smith and Robert Kern and Matti Picus + and Stephan Hoyer and Marten H. van Kerkwijk and Matthew + Brett and Allan Haldane and Jaime Fern{\'{a}}ndez del + R{\'{i}}o and Mark Wiebe and Pearu Peterson and Pierre + G{\'{e}}rard-Marchant and Kevin Sheppard and Tyler Reddy and + Warren Weckesser and Hameer Abbasi and Christoph Gohlke and + Travis E. Oliphant}, + year = {2020}, + month = sep, + journal = {Nature}, + volume = {585}, + number = {7825}, + pages = {357--362}, + doi = {10.1038/s41586-020-2649-2}, + publisher = {Springer Science and Business Media {LLC}}, + url = {https://doi.org/10.1038/s41586-020-2649-2} +} + +% taken from https://scipy.org/citing-scipy/ but replaced the key '2020SciPy-NMeth' with 'scipy' +% to keep the neccessary changes to this file +@article{scipy, + author = {Virtanen, Pauli and Gommers, Ralf and Oliphant, Travis E. and + Haberland, Matt and Reddy, Tyler and Cournapeau, David and + Burovski, Evgeni and Peterson, Pearu and Weckesser, Warren and + Bright, Jonathan and {van der Walt}, St{\'e}fan J. and + Brett, Matthew and Wilson, Joshua and Millman, K. Jarrod and + Mayorov, Nikolay and Nelson, Andrew R. J. and Jones, Eric and + Kern, Robert and Larson, Eric and Carey, C J and + Polat, {\.I}lhan and Feng, Yu and Moore, Eric W. and + {VanderPlas}, Jake and Laxalde, Denis and Perktold, Josef and + Cimrman, Robert and Henriksen, Ian and Quintero, E. A. and + Harris, Charles R. and Archibald, Anne M. and + Ribeiro, Ant{\^o}nio H. and Pedregosa, Fabian and + {van Mulbregt}, Paul and {SciPy 1.0 Contributors}}, + title = {{{SciPy} 1.0: Fundamental Algorithms for Scientific + Computing in Python}}, + journal = {Nature Methods}, + year = {2020}, + volume = {17}, + pages = {261--272}, + adsurl = {https://rdcu.be/b08Wh}, + doi = {10.1038/s41592-019-0686-2}, +} + +@software{uncertainties, + author = "Lebigot, Eric O.", + title = "Uncertainties: a Python package for calculations with uncertainties", + url = "http://pythonhosted.org/uncertainties/", + version = "3.1.7" +} diff --git a/exercises-latex/example-lab-report/loesung/v16516/Makefile b/exercises-latex/example-lab-report/loesung/v16516/Makefile new file mode 100644 index 00000000..782ad9e6 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/Makefile @@ -0,0 +1,33 @@ +all: build/v16516.pdf + +# hier Python-Skripte: +build/plot.pdf: plot.py ../matplotlibrc ../header-matplotlib.tex | build + # so that matplotlib can find the tex header when running + # LaTeX in the tmp directory + # and set the matplotlibrc + TEXINPUTS=$$(pwd)/..: MATPLOTLIBRC=../matplotlibrc python plot.py + +# hier weitere Abhängigkeiten für build/vXXX.pdf deklarieren: +build/v16516.pdf: build/plot.pdf + +build/v16516.pdf: FORCE | build + # to find header and bib files in the main directory + TEXINPUTS=..: \ + BIBINPUTS=..: \ + max_print_line=1048576 \ + latexmk \ + --lualatex \ + --output-directory=build \ + --interaction=nonstopmode \ + --halt-on-error \ + v16516.tex + +build: + mkdir -p build + +clean: + rm -rf build + +FORCE: + +.PHONY: all clean diff --git a/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Frames_Kugel.txt b/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Frames_Kugel.txt new file mode 100644 index 00000000..91bc58b6 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Frames_Kugel.txt @@ -0,0 +1,21 @@ +# h,sigma_h,Fi,sigma_Fi,Ff,sigma_Ff +4.5,0.5,436,1,492,1 +4.5,0.5,555,1,610,1 +4.5,0.5,672,1,729,1 +10,0.5,95,1,130,1 +10,0.5,199,1,235,1 +10,0.5,303,1,338,1 +15,0.5,91,1,119,1 +15,0.5,201,1,229,1 +15,0.5,335,1,362,1 +20,0.5,232,1,256,1 +20,0.5,323,1,347,1 +20,0.5,397,1,421,1 +25,0.5,153,1,174,1 +25,0.5,239,1,260,1 +25,0.5,322,1,343,1 +30,0.5,219,1,238,1 +30,0.5,319,1,338,1 +30,0.5,391,1,412,1 +# Messreihe: Kugel +# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) diff --git a/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Frames_Zylinder.txt b/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Frames_Zylinder.txt new file mode 100644 index 00000000..31a47d13 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Frames_Zylinder.txt @@ -0,0 +1,21 @@ +# h,sigma_h,Fi,sigma_Fi,Ff,sigma_Ff +4.5,0.5,1018,1,108,1 +4.5,0.5,1189,1,124,1 +4.5,0.5,1340,1,140,1 +10,0.5,596,1,63,1 +10,0.5,762,1,80,1 +10,0.5,882,1,92,1 +15,0.5,574,1,60,1 +15,0.5,766,1,79,1 +15,0.5,863,1,89,1 +20,0.5,679,1,70,1 +20,0.5,810,1,83,1 +20,0.5,930,1,95,1 +25,0.5,650,1,67,1 +25,0.5,892,1,91,1 +25,0.5,804,1,82,1 +30,0.5,642,1,66,1 +30,0.5,739,1,76,1 +30,0.5,900,1,92,1 +# Messreihe: Zylinder +# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) diff --git a/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Kugel.txt b/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Kugel.txt new file mode 100644 index 00000000..48b54cb9 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Kugel.txt @@ -0,0 +1,5 @@ +#m,sigma_m,U,sigma_U +216,1,30.5,0.1 + +# Messdaten der Kugel: Vollkugel +# Umfang (U/cm), Masse (m/g) diff --git a/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Zylinder.txt b/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Zylinder.txt new file mode 100644 index 00000000..d9d19ddf --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Zylinder.txt @@ -0,0 +1,5 @@ +#m,sigma_m,U,sigma_U,d,sigma_d +186,1,24.3,0.1,3,1 + +# Messdaten des Zylinders: Hohlzylinder mit Boden aber ohne Deckel +# Umfang (U/cm), Masse (m/g), Wanddicke (Differenz zwischen Innen- und Außenradius) (d/mm) diff --git a/exercises-latex/example-lab-report/loesung/v16516/Messwerte_framerate.txt b/exercises-latex/example-lab-report/loesung/v16516/Messwerte_framerate.txt new file mode 100644 index 00000000..add88808 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/Messwerte_framerate.txt @@ -0,0 +1,4 @@ +# fps,sigma_fps +30,0 +# Framerate der Videoaufnahmen +# Frames per second (fps / 1/s) diff --git a/exercises-latex/example-lab-report/loesung/v16516/auswertung-1.py b/exercises-latex/example-lab-report/loesung/v16516/auswertung-1.py new file mode 100644 index 00000000..bd24de6b --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/auswertung-1.py @@ -0,0 +1,11 @@ +import matplotlib.pyplot as plt +import numpy as np + +import uncertainties as unc +import uncertainties.unumpy as unp + + +data_ball = np. + + + diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex b/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex new file mode 100644 index 00000000..bf778359 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex @@ -0,0 +1,12 @@ +\section{Auswertung} +\label{sec:Auswertung} + +\begin{figure} + \centering + \includegraphics{plot.pdf} + \caption{Plot.} + \label{fig:plot} +\end{figure} + + +Siehe \autoref{fig:plot}! diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/diskussion.tex b/exercises-latex/example-lab-report/loesung/v16516/content/diskussion.tex new file mode 100644 index 00000000..014f9408 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/content/diskussion.tex @@ -0,0 +1,2 @@ +\section{Diskussion} +\label{sec:Diskussion} diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex b/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex new file mode 100644 index 00000000..e84735da --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex @@ -0,0 +1,2 @@ +\section{Durchführung} +\label{sec:Durchführung} diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex b/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex new file mode 100644 index 00000000..fcd0c285 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex @@ -0,0 +1,4 @@ +\section{Theorie} +\label{sec:Theorie} + +\cite{sample} diff --git a/exercises-latex/example-lab-report/loesung/v16516/plot.py b/exercises-latex/example-lab-report/loesung/v16516/plot.py new file mode 100644 index 00000000..ff253805 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/plot.py @@ -0,0 +1,18 @@ +import matplotlib.pyplot as plt +import numpy as np + +x = np.linspace(0, 10, 1000) +y = x ** np.sin(x) + +fig, (ax1, ax2) = plt.subplots(1, 2, layout="constrained") +ax1.plot(x, y, label="Kurve") +ax1.set_xlabel(r"$\alpha \mathbin{/} \unit{\ohm}$") +ax1.set_ylabel(r"$y \mathbin{/} \unit{\micro\joule}$") +ax1.legend(loc="best") + +ax2.plot(x, y, label="Kurve") +ax2.set_xlabel(r"$\alpha \mathbin{/} \unit{\ohm}$") +ax2.set_ylabel(r"$y \mathbin{/} \unit{\micro\joule}$") +ax2.legend(loc="best") + +fig.savefig("build/plot.pdf") diff --git a/exercises-latex/example-lab-report/loesung/v16516/v16516.tex b/exercises-latex/example-lab-report/loesung/v16516/v16516.tex new file mode 100644 index 00000000..30f276ec --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/v16516.tex @@ -0,0 +1,25 @@ +\input{header.tex} + +\subject{VERSUCH NUMMER} +\title{TITEL} +\date{% + Durchführung: DATUM + \hspace{3em} + Abgabe: DATUM +} + +\begin{document} + +\maketitle +\thispagestyle{empty} +\tableofcontents +\newpage + +\input{content/theorie.tex} +\input{content/durchfuehrung.tex} +\input{content/auswertung.tex} +\input{content/diskussion.tex} + +\printbibliography{} + +\end{document} From 16ea8a307ef64f0ef2114bc7b7beed1212989747 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Mon, 16 Sep 2024 12:44:59 +0200 Subject: [PATCH 02/48] renamed python file --- .../v16516/{auswertung-1.py => auswertung.py} | 0 .../example-lab-report/loesung/v16516/plot.py | 18 ------------------ 2 files changed, 18 deletions(-) rename exercises-latex/example-lab-report/loesung/v16516/{auswertung-1.py => auswertung.py} (100%) delete mode 100644 exercises-latex/example-lab-report/loesung/v16516/plot.py diff --git a/exercises-latex/example-lab-report/loesung/v16516/auswertung-1.py b/exercises-latex/example-lab-report/loesung/v16516/auswertung.py similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/auswertung-1.py rename to exercises-latex/example-lab-report/loesung/v16516/auswertung.py diff --git a/exercises-latex/example-lab-report/loesung/v16516/plot.py b/exercises-latex/example-lab-report/loesung/v16516/plot.py deleted file mode 100644 index ff253805..00000000 --- a/exercises-latex/example-lab-report/loesung/v16516/plot.py +++ /dev/null @@ -1,18 +0,0 @@ -import matplotlib.pyplot as plt -import numpy as np - -x = np.linspace(0, 10, 1000) -y = x ** np.sin(x) - -fig, (ax1, ax2) = plt.subplots(1, 2, layout="constrained") -ax1.plot(x, y, label="Kurve") -ax1.set_xlabel(r"$\alpha \mathbin{/} \unit{\ohm}$") -ax1.set_ylabel(r"$y \mathbin{/} \unit{\micro\joule}$") -ax1.legend(loc="best") - -ax2.plot(x, y, label="Kurve") -ax2.set_xlabel(r"$\alpha \mathbin{/} \unit{\ohm}$") -ax2.set_ylabel(r"$y \mathbin{/} \unit{\micro\joule}$") -ax2.legend(loc="best") - -fig.savefig("build/plot.pdf") From a798f5d00bc9ed795dff39afb1e650e08ffd721b Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Mon, 16 Sep 2024 12:46:36 +0200 Subject: [PATCH 03/48] moved measurement data to directory --- .../loesung/v16516/{ => data}/Messwerte_Frames_Kugel.txt | 0 .../loesung/v16516/{ => data}/Messwerte_Frames_Zylinder.txt | 0 .../loesung/v16516/{ => data}/Messwerte_Kugel.txt | 0 .../loesung/v16516/{ => data}/Messwerte_Zylinder.txt | 0 .../loesung/v16516/{ => data}/Messwerte_framerate.txt | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename exercises-latex/example-lab-report/loesung/v16516/{ => data}/Messwerte_Frames_Kugel.txt (100%) rename exercises-latex/example-lab-report/loesung/v16516/{ => data}/Messwerte_Frames_Zylinder.txt (100%) rename exercises-latex/example-lab-report/loesung/v16516/{ => data}/Messwerte_Kugel.txt (100%) rename exercises-latex/example-lab-report/loesung/v16516/{ => data}/Messwerte_Zylinder.txt (100%) rename exercises-latex/example-lab-report/loesung/v16516/{ => data}/Messwerte_framerate.txt (100%) diff --git a/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Frames_Kugel.txt b/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Frames_Kugel.txt similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/Messwerte_Frames_Kugel.txt rename to exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Frames_Kugel.txt diff --git a/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Frames_Zylinder.txt b/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Frames_Zylinder.txt similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/Messwerte_Frames_Zylinder.txt rename to exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Frames_Zylinder.txt diff --git a/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Kugel.txt b/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Kugel.txt similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/Messwerte_Kugel.txt rename to exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Kugel.txt diff --git a/exercises-latex/example-lab-report/loesung/v16516/Messwerte_Zylinder.txt b/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Zylinder.txt similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/Messwerte_Zylinder.txt rename to exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Zylinder.txt diff --git a/exercises-latex/example-lab-report/loesung/v16516/Messwerte_framerate.txt b/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_framerate.txt similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/Messwerte_framerate.txt rename to exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_framerate.txt From 09991b12cd7f0ea7e70c79d05eb90c3b91281662 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Wed, 18 Sep 2024 19:54:29 +0200 Subject: [PATCH 04/48] add some realistic text for the first three sections it seems that the discussion section has nothing to add in terms of being an example --- .../loesung/v16516/content/auswertung.tex | 117 +++++++++++++++++- .../loesung/v16516/content/diskussion.tex | 4 + .../loesung/v16516/content/durchfuehrung.tex | 18 +++ .../loesung/v16516/content/theorie.tex | 76 +++++++++++- 4 files changed, 210 insertions(+), 5 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex b/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex index bf778359..df9753a2 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex @@ -1,12 +1,121 @@ \section{Auswertung} \label{sec:Auswertung} + +Die für diesen Versuch relevanten physikalischen Größen für Kugel und Zylinder sind + +\begin{align} + \label{eq:physical-properties} + m_\text{Z} &= \input{mass_ball.tex} & m_\text{K} &= \input{mass_ball.tex}\nonumber\\ + r_{\text{Z},\text{i}} &= \input{../build/radius-inner_cylinder.tex} & r_\text{K} &= \input{radius_ball.tex}\\ + r_{\text{Z},\text{a}} &= \input{../build/radius-outer_cylinder.tex} &&\nonumber +\end{align} + +Berechnet wurde aus diesen Größen das jeweilige, theoretiche Trägheitsmoment + +\begin{align} + \label{eq:moments-inertia} + I_\text{Z} &= \input{./../build/theoretical-I_cylinder.tex} && I_\text{K} = \input{./../build/theoretical-I_ball.tex}. +\end{align} + + + +Aus den aufgenommenen Videos der Versuche wurden die in \autoref{tab:all-measurements} folgenden Frameindizes extrahiert. +Die ebenfalls aufgeführte Zeitdauer $t$ wurde dann jeweils aus der aus dem Startframeindex $F_\text{i}$, +dem Endframeindex $F_\text{f}$ und der Kameraframerate $\symup{fps}=\input{framerate.tex}$ wie folgt +berechnet +\begin{equation*} + t = (F_\text{f} - F_\text{i})\cdot\symup{fps}^{-1} +\end{equation*} + +\begin{table} + \centering + \input{build/table_all-measurements.tex} + \caption{Alle aufgenommenen Werte, das heißt mit dreifach wiederholter Messungen je Höhe.} + \label{tab:all-measurements} +\end{table} + +Durch Mittelung der Messwerte für die selbe Höhe $h$ ergeben sich die in +\autoref{tab:averaged-measurements} berechnet und werden für die folgenden +Auswertungsschritte verwendet. + + +\begin{table} + \centering + \input{build/table_averaged-measurements.tex} + \caption{Für gleiche Starthöhe $h$ gemittelte Messwerte der Zeit $t$.} + \label{tab:averaged-measurements} +\end{table} + + +\subsection{Bestimmung der Fallbeschleunigung $g$} + +Für die bestimmung der Fallbeschleunigung wurden eine Ausgleichsfunktion der Form +\eqref{eq:fit-function-g-ball} respektive \eqref{eq:fit-function-g-cylinder} an die Messwerte aus \autoref{tab:averaged-measurements} +angepasst. Die Daten und Ausgleichsfunktion sind für die Kugel in \autoref{fig:fit-g-ball} +und für den Zylinder in \autoref{fig:fit-g-cylinder} graphisch dargestellt. + \begin{figure} \centering - \includegraphics{plot.pdf} - \caption{Plot.} - \label{fig:plot} + \includegraphics{plot-g_ball.pdf} + \caption{Dargestellt sind die für je eine Höhe gemittelten Messwerte aus \autoref{tab:averaged-measurements} für die Kugel, zusammen mit einer Ausgleichsfunktion der Form \eqref{eq:fit-function-g-ball}. + Die Parameter der Ausgleichsrechnung sind in \eqref{eq:parameters-g_ball} angegeben.} + \label{fig:fit-g-ball} \end{figure} +\begin{figure} + \centering + \includegraphics{plot-g_cylinder.pdf} + \caption{Dargestellt sind die für je eine Höhe gemittelten Messwerte aus \autoref{tab:averaged-measurements} für den Zylinder, zusammen mit einer Ausgleichsfunktion der Form \eqref{eq:fit-function-g-cylinder}. + Die Parameter der Ausgleichsrechnung sind in \eqref{eq:parameters-g_cylinder} angegeben.} + \label{fig:fit-g-cylinder} +\end{figure} + +Die Parameter der Ausgleichsrechnung ergeben sich für die Kugel zu + +\begin{align} + \label{eq:parameters-g_ball} + g_\text{K} = \input{parameter-g_ball.tex} && t_{0,\text{K}} = \input{parameter-t0_ball.tex} +\intertext{und für den Zylinder} + \label{eq:parameters-g_cylinder} + g_\text{Z} = \input{parameter-g_cylinder.tex} && t_{0,\text{Z}} = \input{parameter-t0_cylinder.tex}. +\end{align} + + +\subsection{Bestimmung der Trägheitsmomente $I$} + +Für die bestimmung der Fallbeschleunigung wurden eine Ausgleichsfunktion der Form +\eqref{eq:fit-function-I} an die Messwerte aus \autoref{tab:averaged-measurements} +angepasst. Die Daten und Ausgleichsfunktion sind für die Kugel in \autoref{fig:fit-I-ball} +und für den Zylinder in \autoref{fig:fit-I-cylinder} graphisch dargestellt. + + +\begin{figure} + \centering + \includegraphics{plot-I_ball.pdf} + \caption{Dargestellt sind die für je eine Höhe gemittelten Messwerte aus \autoref{tab:averaged-measurements} für den Kugel, zusammen mit einer Ausgleichsfunktion der Form \eqref{eq:fit-function-I}. + Die Parameter der Ausgleichsrechnung sind in \eqref{eq:parameters-I_ball} angegeben.} + \label{fig:fit-I-ball} +\end{figure} + + +\begin{figure} + \centering + \includegraphics{plot-I_cylinder.pdf} + \caption{Dargestellt sind die für je eine Höhe gemittelten Messwerte aus \autoref{tab:averaged-measurements} für den Zylinder, zusammen mit einer Ausgleichsfunktion der Form \eqref{eq:fit-function-I}. + Die Parameter der Ausgleichsrechnung sind in \eqref{eq:parameters-I_cylinder} angegeben.} + \label{fig:fit-I-cylinder} +\end{figure} + +Die Parameter der Ausgleichsrechnung ergeben sich für die Kugel zu + +\begin{align} + \label{eq:parameters-I_ball} + I_\text{K} &= \input{parameter-I_ball.tex} &t_{0,\text{K}} &= \input{parameter-t0-I_ball.tex} + \intertext{und für den Zylinder} + \label{eq:parameters-I_cylinder} + I_\text{Z} &= \input{parameter-I_cylinder.tex} & t_{0,\text{Z}} &= \input{parameter-t0-I_cylinder.tex}. +\end{align} + + -Siehe \autoref{fig:plot}! diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/diskussion.tex b/exercises-latex/example-lab-report/loesung/v16516/content/diskussion.tex index 014f9408..68e2b8f1 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/diskussion.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/diskussion.tex @@ -1,2 +1,6 @@ \section{Diskussion} \label{sec:Diskussion} + + + +Todo: Diskussion fertig machen ;-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex b/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex index e84735da..589a7bb6 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex @@ -1,2 +1,20 @@ \section{Durchführung} \label{sec:Durchführung} + +Wie einst von Galileo Galilei \cite[232]{galilei1623} persönlich, wurden im hier beschriebenen Versuch +Objekte (eine Kugel und Holzylinder in Form eines Glases) eine schiefe Ebene hinab gerollt. + +Notiert wird dabei die Starthöhen $h$. Der Prozess des Herabrollens wird mit einer Kamera +aufgezeichnet, um aus die Zeit $t$ bis zum erreichen des Endes der schiefen Ebene möglichst genau +aus den Einzelbildern (frames) des Films ablesen zu können. + +Die aufgenommenen Messdaten werden für zwei unabhängige Zwecke verwendet: + +\begin{enumerate} + \item {Bestimmung der Fallbeschleunigung $g$, dafür werden + die theoretischen Trägheitsmomente angenommen.} + \item {Bestimmung der Trägheitsmoment der beiden Objekte unter Annahme der theoretischen + Fallbeschleunigung.} +\end{enumerate} + + diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex b/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex index fcd0c285..c6680bf0 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex @@ -1,4 +1,78 @@ \section{Theorie} \label{sec:Theorie} -\cite{sample} + + +Wie in der Abbildung \autoref{fig:experimental-setup} veranschaulicht, beginnen die Objekte +in einer Höhe $h$ auf der schiefen Ebene in vollkommener Ruhe. + + +\begin{figure} + \centering + \begin{tikzpicture}[scale=3] + \draw (0,0) -- (3,0) --node[below, near end]{$l$} (0,1) -- cycle; + \draw (0.25,1.19)node[below]{$m$} circle (0.25cm); + \draw[->] (0.25,1.19) -- (0.90, 0.94) node[above] {\small$\vec{v}$}; + \draw[|-|] (-0.15,0.95) -- node[left]{$h$} (-0.15, 0); + \draw[dashed,opacity=0.65] (0.94,0.96) circle (0.25cm); + \draw[dashed,opacity=0.40] (1.75,0.68) circle (0.25cm); + \draw[dashed,opacity=0.25] (3.,0.26) circle (0.25cm); + \draw[->] (0.25, 1.03) arc (270:50:0.16) node[below]{\small$\omega$}; + \end{tikzpicture} + \caption{Schematische Darstellung des Versuchsaufbaus.} + \label{fig:experimental-setup} +\end{figure} + + + +Zwischen Ebene und Objekten wirkt eine nicht zu vernachlässigende Reibung, wodurch die +Objekte nach dem loslassen in Rotation versetzt werden, also tatsächlich herabrollen. +Thermische Reibungsverluste werden jedoch vernächlässigt, sodass Energieerhaltung +angenommen werden kann. Nach dieser gilt + +\begin{align*} +E^\text{pot}_\text{i} &= E^\text{kin}_\text{f} + E^\text{rot}_\text{f} \\ +mgh &= \frac{m}{2}v^2 + \frac{I}{2}\omega^2 \quad\big|\,\omega = \frac{v}{r} \\ +mgh &= \frac{m}{2}v^2 + \frac{I}{2}\frac{v^2}{r^2}\quad\big|\, :mgh \\ +1 &= \frac{v^2}{2gh} \left(1 + \frac{I}{mr^2} \right)\\ +\intertext{aus der Kinematik ist bekannt, dass die Endgeschwindigkeit einer +beschleunigten Bewegung (in der Zeit $t$, entlang einer Strecke $l$) $v = \frac{2l}{t}$ ist. +Es gilt also} +1 &= \left(\frac{2l}{t}\right)^2 \frac{1}{2gh} \left(1 + \frac{I}{mr^2} \right)\quad\big|\, \cdot t^2 \\ +\addtocounter{equation}{1} +t^2 &= \frac{2l^2}{gh} \left(1 + \frac{I}{mr^2} \right)\label{eq:tsquared}\tag{\theequation} +\end{align*} + +Aus \eqref{eq:tsquared} ergeben sich dann die jeweiligen Ausgleichsfunktionen für beide Versuchsteile. + +Für die Bestimmung der Trägheitsmomente wird nur noch die Quadratwurzel von \eqref{eq:tsquared} +berechnet und ein Startzeit als Parameter hinzugefügt, + +\begin{equation} +t(h) = \sqrt{\frac{2l^2}{gh} \left(1 + \frac{I}{mr^2} \right)} + t_0. +\label{eq:fit-function-I} +\end{equation} + +Dabei sind das Trägheitsmoment $I$ und die Startzeit $t_0$ die Parameter für die Ausgleichsrechnung. +Die notwendigen physikalischen Größen der Objekte sind in \autoref{sec:Auswertung} angegeben. + +Für die Bestimmung der Gravitationsbeschleunigung $g$ unter Annahme der theoretischen Trägheitsmomente +für Kugel $I_\text{K}$ und Hohlzylinder $I_\text{Z}$ +\begin{align} + I_{\text{K}} = \frac{2}{5}mr_{\text{K}}^2 && I_{\text{Z}} = \frac{m}{2}(r_{\text{Z},\text{innen}}^2 + r_{\text{Z},\text{außen}}^2), +\end{align} +ergeben sich die folgenden Ausgleichsfunktionen + +\begin{align} +t_\text{K}(h) &= \sqrt{\frac{2l^2}{gh} \left(\frac{7}{5}\right)} + t_0 +\label{eq:fit-function-g-ball} +% +\intertext{und} +% +t_\text{Z}(h) &= \sqrt{\frac{2l^2}{gh} \left(\frac{3}{2} + \left(\frac{r_{\text{Z},\text{innen}}^2}{2r_{\text{Z},\text{außen}}^2}\right) \right)} + t_0. +\label{eq:fit-function-g-cylinder} +\end{align} +Dabei sind in diesen Gleichungen $g$ und $t_0$ die Ausgleichsparameter. + + + From ff94dbf2b9ba3e0304bcf4c383ddbfbcc68d5d11 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Wed, 18 Sep 2024 19:54:46 +0200 Subject: [PATCH 05/48] add data directory with data files --- .../loesung/v16516/data/Messwerte_Bahn.txt | 4 ++ .../v16516/data/Messwerte_Frames_Zylinder.txt | 37 ++++++++++--------- ...rte_framerate.txt => Messwerte_Kamera.txt} | 0 3 files changed, 23 insertions(+), 18 deletions(-) create mode 100644 exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Bahn.txt rename exercises-latex/example-lab-report/loesung/v16516/data/{Messwerte_framerate.txt => Messwerte_Kamera.txt} (100%) diff --git a/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Bahn.txt b/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Bahn.txt new file mode 100644 index 00000000..cc6a4720 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Bahn.txt @@ -0,0 +1,4 @@ +# l,sigma_l +80,0.5 +# Länge der Bahn +# cm (l / cm) diff --git a/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Frames_Zylinder.txt b/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Frames_Zylinder.txt index 31a47d13..2321d313 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Frames_Zylinder.txt +++ b/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Frames_Zylinder.txt @@ -1,21 +1,22 @@ # h,sigma_h,Fi,sigma_Fi,Ff,sigma_Ff -4.5,0.5,1018,1,108,1 -4.5,0.5,1189,1,124,1 -4.5,0.5,1340,1,140,1 -10,0.5,596,1,63,1 -10,0.5,762,1,80,1 -10,0.5,882,1,92,1 -15,0.5,574,1,60,1 -15,0.5,766,1,79,1 -15,0.5,863,1,89,1 -20,0.5,679,1,70,1 -20,0.5,810,1,83,1 -20,0.5,930,1,95,1 -25,0.5,650,1,67,1 -25,0.5,892,1,91,1 -25,0.5,804,1,82,1 -30,0.5,642,1,66,1 -30,0.5,739,1,76,1 -30,0.5,900,1,92,1 +4.5,0.5,1018,1,1083,1 +4.5,0.5,1189,1,1248,1 +4.5,0.5,1340,1,1404,1 +10,0.5,596,1,636,1 +10,0.5,762,1,801,1 +10,0.5,882,1,921,1 +15,0.5,574,1,605,1 +15,0.5,766,1,798,1 +15,0.5,863,1,896,1 +20,0.5,679,1,707,1 +20,0.5,810,1,838,1 +20,0.5,930,1,959,1 +25,0.5,650,1,674,1 +25,0.5,892,1,917,1 +25,0.5,804,1,827,1 +30,0.5,642,1,664,1 +30,0.5,739,1,760,1 +30,0.5,900,1,922,1 + # Messreihe: Zylinder # Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) diff --git a/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_framerate.txt b/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Kamera.txt similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_framerate.txt rename to exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Kamera.txt From eacc0bd3715eac11d3ad105832aef2b57fde536e Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Wed, 18 Sep 2024 19:55:27 +0200 Subject: [PATCH 06/48] add evaluaton script --- .../loesung/v16516/auswertung.py | 406 +++++++++++++++++- 1 file changed, 405 insertions(+), 1 deletion(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/auswertung.py b/exercises-latex/example-lab-report/loesung/v16516/auswertung.py index bd24de6b..5f754b85 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/auswertung.py +++ b/exercises-latex/example-lab-report/loesung/v16516/auswertung.py @@ -1,11 +1,415 @@ import matplotlib.pyplot as plt import numpy as np +import scipy.optimize +import scipy.constants + import uncertainties as unc import uncertainties.unumpy as unp +from uncertainties.unumpy import ( + nominal_values as noms, + std_devs as stds, +) + +from curve_fit import ucurve_fit +from latex_formatting import make_qty + +# Load all data files +camera = np.genfromtxt("data/Messwerte_Kamera.txt", names=True, delimiter=",") +track = np.genfromtxt("data/Messwerte_Bahn.txt", names=True, delimiter=",") +ball = np.genfromtxt("data/Messwerte_Kugel.txt", names=True, delimiter=",") +cylinder = np.genfromtxt("data/Messwerte_Zylinder.txt", names=True, delimiter=",") +measurements_ball = np.genfromtxt("data/Messwerte_Frames_Kugel.txt", names=True, delimiter=",") +measurements_cylinder = np.genfromtxt("data/Messwerte_Frames_Zylinder.txt", names=True, delimiter=",") + + +# overview of raw data +print("Übersicht der (rohen) Messwerte") +print("Kamera Einstellungen") +print(camera.dtype.names) +print(camera) +print("Bahn Eigenschaften") +print(track.dtype.names) +print(track) +print("Ball Eigenschaften") +print(ball.dtype.names) +print(ball) +print("Zylinder Eigenschaften") +print(cylinder.dtype.names) +print(cylinder) +print("Messreihe: Ball") +print(measurements_ball.dtype.names) +print(measurements_ball) +print("Messreihe: Zylinder") +print(measurements_cylinder.dtype.names) +print(measurements_cylinder) +print("-"*70,end="\n\n") + + + +# create data with uncertainties and SI-Units + +framerate = camera["fps"] # frame/s +L = track_length = unc.ufloat(track["l"],track["sigma_l"]) / 100 # m + +m_B = ball_mass = unc.ufloat(ball["m"],ball["sigma_m"])/1000 # kg +U_B = ball_perimeter = unc.ufloat(ball["U"],ball["sigma_U"])/100 #m +R_B = ball_radius = ball_perimeter / (2 * np.pi) +I_B = ball_momentinertia = 2/5 * m_B * (R_B**2) + + +h_B = heights_ball = unp.uarray(measurements_ball["h"], measurements_ball["sigma_h"])/100 # m +fi_B = initalframes_ball = unp.uarray(measurements_ball["Fi"], measurements_ball["sigma_Fi"]) # 1 +ff_B = finalframes_ball = unp.uarray(measurements_ball["Ff"], measurements_ball["sigma_Ff"]) # 1 + +t_B = durations_ball = (ff_B - fi_B) / framerate #s + + +# each height was measured 3 times => calculating the mean of these measurments + +# selecting each height once +h_B = h_B.reshape(-1, 3)[:,0] +t_B = t_B.reshape(-1, 3).mean(axis=1) + + + +m_C = cylinder_mass = unc.ufloat(cylinder["m"],cylinder["sigma_m"])/1000 # kg +U_C = cylinder_perimeter = unc.ufloat(cylinder["U"],cylinder["sigma_U"])/100 #m +d_C = cylinder_thickness = unc.ufloat(cylinder["d"],cylinder["sigma_d"])/1000 #m +Ri_C = cylinder_radius_inner = cylinder_perimeter / (2 * np.pi) +Ro_C = cylinder_radius_outer = cylinder_radius_inner + cylinder_thickness +I_C = ball_momentinertia = 1/2 * m_C * (Ro_C**2 + Ri_C**2) + +h_C = heights_cylinder = unp.uarray(measurements_cylinder["h"], measurements_cylinder["sigma_h"])/100 # m +fi_C = initalframes_cylinder = unp.uarray(measurements_cylinder["Fi"], measurements_cylinder["sigma_Fi"]) # 1 +ff_C = finalframes_cylinder = unp.uarray(measurements_cylinder["Ff"], measurements_cylinder["sigma_Ff"]) # 1 + +t_C = durations_cylinder = (ff_C - fi_C) / framerate #s + +# each height was measured 3 times => calculating the mean of these measurments +# selecting each height once +h_C = h_C.reshape(-1, 3)[:,0] +t_C = t_C.reshape(-1, 3).mean(axis=1) + +# Part 1: determination of the gravitational constant g + + +# fitting theoretical curve to data +def fit_g_ball(h, g, t0): + return np.sqrt(7/10 * 1/h * 4 * noms(L)**2/g) + t0 + +params = ucurve_fit(fit_g_ball, noms(h_B), t_B, p0=[10, 0]) + + +print("Fit Parameter (Kugel):") +print(params) + + +# plotting data an fit +h_plot = np.linspace(0.01,0.35, 1000) +fig, ax = plt.subplots(1, 1, layout="constrained") + +ax.errorbar( + noms(h_B), + noms(t_B), + yerr=stds(t_B), + fmt="k_", + label="Daten", +) +ax.plot(h_plot, fit_g_ball(h_plot, *noms(params)), "-", label="Fit") +ax.set_xlim(h_plot[0], h_plot[-1]) +ax.set_xlabel(r"$h \mathbin{/} \unit{\meter}$") +ax.set_ylabel(r"$t \mathbin{/} \unit{\second}$") +ax.legend(loc="best") +fig.savefig("build/plot-g_ball.pdf") + +# exporting fit parameters +parameter_g, parameter_t0 = params + +with open("build/parameter-g_ball.tex", "w") as f: + f.write(make_qty(parameter_g, r"\meter\per\second\squared")) + +with open("build/parameter-t0-g_ball.tex", "w") as f: + f.write(make_qty(parameter_t0, r"\second")) + + +# fitting theoretical curve to data +def fit_g_cylinder(h, g, t0): + return np.sqrt((2 + noms(Ri_C**2 + Ro_C**2))/4 * 1/h * 4 * noms(L)**2/g) + t0 + +params = ucurve_fit(fit_g_cylinder, noms(h_C), t_C, p0=[10, 0]) + +print("Fit Parameter (Zylinder):") +print(params) + + +# plotting data an fit +h_plot = np.linspace(0.01,0.35, 1000) +fig, ax = plt.subplots(1, 1, layout="constrained") + +ax.errorbar( + noms(h_C), + noms(t_C), + yerr=stds(t_C), + fmt="k_", + label="Daten", +) +ax.plot(h_plot, fit_g_cylinder(h_plot, *noms(params)), "-", label="Fit") +ax.set_xlim(h_plot[0], h_plot[-1]) +ax.set_xlabel(r"$h \mathbin{/} \unit{\meter}$") +ax.set_ylabel(r"$t \mathbin{/} \unit{\second}$") +ax.legend(loc="best") +fig.savefig("build/plot-g_cylinder.pdf") + +# exporting fit parameters +parameter_g, parameter_t0 = params + +with open("build/parameter-g_cylinder.tex", "w") as f: + f.write(make_qty(parameter_g, r"\meter\per\second\squared")) + +with open("build/parameter-t0-g_cylinder.tex", "w") as f: + f.write(make_qty(parameter_t0, r"\second")) + + + +# Part 2: determination of the Moment of inertia if g is assumed to be known +g = scipy.constants.g # m/s² + + + +# fitting theoretical curve to data +def fit_I_ball(h, I, t0): + return np.sqrt(2/g * 1/h * noms(L)**2 * (1 + I/(noms(m_B) * noms(R_B)**2) )) + t0 + +params = ucurve_fit(fit_I_ball, noms(h_B), t_B, p0=[0.001, -1]) + + +print("Fit Parameter (Kugel):") +print(params) + +# plotting data an fit +h_plot = np.linspace(0.01,0.35, 1000) +fig, ax = plt.subplots(1, 1, layout="constrained") + +ax.errorbar( + noms(h_B), + noms(t_B), + yerr=stds(t_B), + fmt="k_", + label="Daten", +) +ax.plot(h_plot, fit_I_ball(h_plot, *noms(params)), "-", label="Fit") +ax.set_xlim(h_plot[0], h_plot[-1]) +ax.set_xlabel(r"$h \mathbin{/} \unit{\meter}$") +ax.set_ylabel(r"$t \mathbin{/} \unit{\second}$") +ax.legend(loc="best") +fig.savefig("build/plot-I_ball.pdf") + +# exporting fit parameters +parameter_I, parameter_t0 = params + +with open("build/parameter-I_ball.tex", "w") as f: + f.write(make_qty(parameter_I, r"\kilo\gram\meter\squared")) + +with open("build/parameter-t0-I_ball.tex", "w") as f: + f.write(make_qty(parameter_t0, r"\second")) + + +# fitting theoretical curve to data +def fit_I_cylinder(h, I, t0): + return np.sqrt(2/g * 1/h * noms(L)**2 * (1 + I/(noms(m_C) * noms(Ro_C)**2) )) + t0 + +params = ucurve_fit(fit_I_cylinder, noms(h_C), t_C, p0=[0.001, -1]) + + +print("Fit Parameter (Zylinder):") +print(params) + + +# plotting data an fit +h_plot = np.linspace(0.01,0.35, 1000) +fig, ax = plt.subplots(1, 1, layout="constrained") + +ax.errorbar( + noms(h_C), + noms(t_C), + yerr=stds(t_C), + fmt="k_", + label="Daten", +) +ax.plot(h_plot, fit_I_cylinder(h_plot, *noms(params)), "-", label="Fit") +ax.set_xlim(h_plot[0], h_plot[-1]) +ax.set_xlabel(r"$h \mathbin{/} \unit{\meter}$") +ax.set_ylabel(r"$t \mathbin{/} \unit{\second}$") +ax.legend(loc="best") + +fig.savefig("build/plot-I_cylinder.pdf") + +# exporting fit parameters +parameter_I, parameter_t0 = params + +with open("build/parameter-I_cylinder.tex", "w") as f: + f.write(make_qty(parameter_I, r"\kilo\gram\meter\squared")) + +with open("build/parameter-t0-I_cylinder.tex", "w") as f: + f.write(make_qty(parameter_t0, r"\second")) + + +# exporting non tabular data + + +with open("build/framerate.tex", "w") as f: + f.write(make_qty(framerate, r"\per\second", figures=1)) + +with open("build/theoretical-I_ball.tex", "w") as f: + f.write(make_qty(I_B,r"\kilo\gram\meter\squared")) + +with open("build/theoretical-I_cylinder.tex", "w") as f: + f.write(make_qty(I_C,r"\kilo\gram\meter\squared")) + +with open("build/tracklength.tex", "w") as f: + f.write(make_qty(L,r"\meter")) + +with open("build/mass_ball.tex", "w") as f: + f.write(make_qty(m_B,r"\kilo\gram")) + +with open("build/mass_cylinder.tex", "w") as f: + f.write(make_qty(m_B,r"\kilo\gram")) + +with open("build/radius_ball.tex", "w") as f: + f.write(make_qty(R_B, r"\meter")) + +with open("build/radius-inner_cylinder.tex", "w") as f: + f.write(make_qty(Ri_C,r"\meter")) + +with open("build/radius-outer_cylinder.tex", "w") as f: + f.write(make_qty(Ro_C,r"\meter")) + +# writing latex tables +# first: writing all measured values not just the averages +# heights_ball, durations_ball, durations_cylinder +# have not been reduced to 6 values each +# Columns: +# %h +# %F_i +# %F_i_sigma +# %F_f +# %F_f_sigma +# %t +# %t_sigma +# %F_i +# %F_i_sigma +# %F_f +# %F_f_sigma +# %t +# %t_sigma + + + +table_header_all = r""" + \begin{tblr}{ + colspec = { + S[table-format=1.3] + S[table-format=4.0] + S[table-format=1.0] + S[table-format=4.0] + S[table-format=1.0] + S[table-format=1.3] + S[table-format=1.3] + S[table-format=4.0] + S[table-format=1.0] + S[table-format=4.0] + S[table-format=1.0] + S[table-format=1.3] + S[table-format=1.3] + }, + row{1} = {guard}, + row{2} = {guard, mode=math}, + vline{3,5,7,9,11,13} = {2}{-}{text=\clap{\pm}}, + } + \toprule + & + \SetCell[c=6]{c} Messung: Kugel & & & & & & + \SetCell[c=6]{c} Messung: Zylinder & & & & & \\ + \cmidrule[lr]{2-7}\cmidrule[lr]{8-14} + h \mathbin{/} \unit{\meter} &% + \SetCell[c=2]{c} F_\text{i} \mathbin{/} 1 & &% + \SetCell[c=2]{c} F_\text{f} \mathbin{/} 1 & &% + \SetCell[c=2]{c} t \mathbin{/} \unit{\second} & &% + \SetCell[c=2]{c} F_\text{i} & &% + \SetCell[c=2]{c} F_\text{f} & &% + \SetCell[c=2]{c} t \mathbin{/} \unit{\second}& \\ + \midrule +""" + + +table_footer = r""" \bottomrule + \end{tblr} +""" + + +row_template = ( + r"{0.n:1.3f} & {1.n:0.0f} & {1.s:0.0f} & {2.n:0.0f} & {2.s:0.0f}& {3.n:1.3f} & {3.s:1.3f} & {4.n:0.0f} & {4.s:0.0f}& {5.n:0.0f} & {5.s:0.0f}& {6.n:1.3f} & {6.s:1.3f} \\" +) + + + +with open("build/table_all-measurements.tex", "w") as f: + f.write(table_header_all) + for row in zip(heights_ball, initalframes_ball, finalframes_ball, durations_ball, initalframes_cylinder, finalframes_cylinder, durations_cylinder): + f.write(row_template.format(*row)) + f.write("\n") + f.write(table_footer) + + +# second: writing the averaged values and leaving out the frames +# heights_ball, durations_ball, durations_cylinder +# have not been reduced to 6 values each + + +table_header_averaged = r""" + \begin{tblr}{ + colspec = { + S[table-format=1.3] + S[table-format=2.3] + S[table-format=1.4] + S[table-format=3.3] + S[table-format=1.5] + }, + row{1} = {guard}, + row{2} = {guard, mode=math}, + vline{3,5,7,9} = {2}{-}{text=\clap{\pm}}, + } + \toprule + & + \SetCell[c=2]{c} Messung: Kugel & & + \SetCell[c=2]{c} Messung: Zylinder &\\ + \cmidrule[lr]{2-3}\cmidrule[lr]{4-5} + h \mathbin{/} \unit{\meter} &% + \SetCell[c=2]{c} t \mathbin{/} \unit{\second} & &% + \SetCell[c=2]{c} t \mathbin{/} \unit{\second}& \\ + \midrule +""" + + +table_footer = r""" \bottomrule + \end{tblr} +""" + + +row_template = ( + r"{0.n:1.3f} & {1.n:1.3f} & {1.s:1.3f} & {2.n:1.3f} & {2.s:1.3f} \\" +) + + +with open("build/table_averaged-measurements.tex", "w") as f: + f.write(table_header_averaged) + for row in zip(h_B, t_B, t_C): + f.write(row_template.format(*row)) + f.write("\n") + f.write(table_footer) -data_ball = np. From c028a4c182d9b7d956992ef59f093f1fbb15c43e Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Wed, 18 Sep 2024 19:56:17 +0200 Subject: [PATCH 07/48] add some 'library' files --- .../loesung/v16516/curve_fit.py | 29 +++++++++++++++++++ .../loesung/v16516/latex_formatting.py | 18 ++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 exercises-latex/example-lab-report/loesung/v16516/curve_fit.py create mode 100644 exercises-latex/example-lab-report/loesung/v16516/latex_formatting.py diff --git a/exercises-latex/example-lab-report/loesung/v16516/curve_fit.py b/exercises-latex/example-lab-report/loesung/v16516/curve_fit.py new file mode 100644 index 00000000..2da5e3dc --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/curve_fit.py @@ -0,0 +1,29 @@ +import numpy as np +import scipy.optimize +import uncertainties as unc +import uncertainties.unumpy as unp + + +def ucurve_fit(f, x, y, **kwargs): + """ + Uncertainties wrapper around curve_fit + y can be a uarray with uncertainties + and the parameters are returned as uncertainties.correlated_values + """ + if np.any(unp.std_devs(y) == 0): + sigma = None + abs_sigma = False + else: + sigma = unp.std_devs(y) + abs_sigma = True + + popt, pcov = scipy.optimize.curve_fit( + f, + x, + unp.nominal_values(y), + sigma=sigma, + absolute_sigma=abs_sigma, + **kwargs, + ) + + return unc.correlated_values(popt, pcov) diff --git a/exercises-latex/example-lab-report/loesung/v16516/latex_formatting.py b/exercises-latex/example-lab-report/loesung/v16516/latex_formatting.py new file mode 100644 index 00000000..bbd52532 --- /dev/null +++ b/exercises-latex/example-lab-report/loesung/v16516/latex_formatting.py @@ -0,0 +1,18 @@ +import numpy as np +from uncertainties.unumpy import ( + std_devs as stds, +) + +def make_qty(num, unit, exp="", figures=None): + """Format an uncertainties ufloat as a \qty quantity""" + if np.any(stds([num])): + if figures is None: + figures = "" + x = "{0:.{1:}uf}".format(num, figures).replace("/", "") + else: + x = "{0:.{1:}f}".format(num, figures) + + return r"\qty{{{}{}}}{{{}}}".format(x, exp, unit) + + + From 56ef974efd7a72766bfd04172e64561a1e09b4ac Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Wed, 18 Sep 2024 19:57:06 +0200 Subject: [PATCH 08/48] add tikz for the setup-sketch & some fake data to the title page --- .../example-lab-report/loesung/v16516/v16516.tex | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/v16516.tex b/exercises-latex/example-lab-report/loesung/v16516/v16516.tex index 30f276ec..1b982de1 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/v16516.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/v16516.tex @@ -1,11 +1,12 @@ \input{header.tex} +\usepackage{tikz} -\subject{VERSUCH NUMMER} -\title{TITEL} +\subject{V16516} +\title{Die schiefe Ebene} \date{% - Durchführung: DATUM + Durchführung: 2023-09-29 \hspace{3em} - Abgabe: DATUM + Abgabe: 2024-09-23 } \begin{document} From 53ee2c73a8162ee65c73fcde3ed4abd9bc88a366 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Wed, 18 Sep 2024 19:57:26 +0200 Subject: [PATCH 09/48] update table package --- exercises-latex/example-lab-report/loesung/header.tex | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/exercises-latex/example-lab-report/loesung/header.tex b/exercises-latex/example-lab-report/loesung/header.tex index 7faa6efe..93860c09 100644 --- a/exercises-latex/example-lab-report/loesung/header.tex +++ b/exercises-latex/example-lab-report/loesung/header.tex @@ -97,11 +97,13 @@ % subfigure, subtable, subref \usepackage{subcaption} + % Grafiken können eingebunden werden \usepackage{graphicx} % schöne Tabellen -\usepackage{booktabs} +\usepackage{tabularray} +\UseTblrLibrary{booktabs,siunitx} % Verbesserungen am Schriftbild \usepackage{microtype} From 1d0b8d53d20478e585bc6e6a0b4631c9b3cc6d7e Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Wed, 18 Sep 2024 19:57:45 +0200 Subject: [PATCH 10/48] add one fitting source --- exercises-latex/example-lab-report/loesung/lit.bib | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/exercises-latex/example-lab-report/loesung/lit.bib b/exercises-latex/example-lab-report/loesung/lit.bib index d4e4807b..98e27516 100644 --- a/exercises-latex/example-lab-report/loesung/lit.bib +++ b/exercises-latex/example-lab-report/loesung/lit.bib @@ -3,3 +3,12 @@ @manual{sample title = {Versuch zum Literaturverzeichnis}, year = 2023 } + +@online{galilei1623, +author = {Galilei, Galileo}, +title = {Il Saggiatore}, +url = {https://bibdig.museogalileo.it/tecanew/opera?bid=354802&seq=13}, +booktitle = {Le opere di Galileo Galilei}, +year = {1623} +} + From 80fed6a635eaafa89937ad9b06edca8758d63393 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Wed, 18 Sep 2024 20:29:32 +0200 Subject: [PATCH 11/48] fix filenames --- .../example-lab-report/loesung/v16516/content/auswertung.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex b/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex index df9753a2..bdb8a780 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex @@ -75,10 +75,10 @@ \subsection{Bestimmung der Fallbeschleunigung $g$} \begin{align} \label{eq:parameters-g_ball} - g_\text{K} = \input{parameter-g_ball.tex} && t_{0,\text{K}} = \input{parameter-t0_ball.tex} + g_\text{K} = \input{parameter-g_ball.tex} && t_{0,\text{K}} = \input{parameter-t0-g_ball.tex} \intertext{und für den Zylinder} \label{eq:parameters-g_cylinder} - g_\text{Z} = \input{parameter-g_cylinder.tex} && t_{0,\text{Z}} = \input{parameter-t0_cylinder.tex}. + g_\text{Z} = \input{parameter-g_cylinder.tex} && t_{0,\text{Z}} = \input{parameter-t0-g_cylinder.tex}. \end{align} From 081b7b72e5c9a9ef67aade17f2b2e7216798d2ea Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Wed, 18 Sep 2024 20:29:51 +0200 Subject: [PATCH 12/48] cancle a factor --- .../example-lab-report/loesung/v16516/content/theorie.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex b/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex index c6680bf0..f67fbb43 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex @@ -69,7 +69,7 @@ \section{Theorie} % \intertext{und} % -t_\text{Z}(h) &= \sqrt{\frac{2l^2}{gh} \left(\frac{3}{2} + \left(\frac{r_{\text{Z},\text{innen}}^2}{2r_{\text{Z},\text{außen}}^2}\right) \right)} + t_0. +t_\text{Z}(h) &= \sqrt{\frac{l^2}{gh} \left(3 + \left(\frac{r_{\text{Z},\text{innen}}^2}{r_{\text{Z},\text{außen}}^2}\right) \right)} + t_0. \label{eq:fit-function-g-cylinder} \end{align} Dabei sind in diesen Gleichungen $g$ und $t_0$ die Ausgleichsparameter. From f88976180bc3253e39f5bd85580075568aef6564 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Wed, 18 Sep 2024 20:30:18 +0200 Subject: [PATCH 13/48] simplyfiy the fit-functions --- .../example-lab-report/loesung/v16516/auswertung.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/auswertung.py b/exercises-latex/example-lab-report/loesung/v16516/auswertung.py index 5f754b85..c6d2e909 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/auswertung.py +++ b/exercises-latex/example-lab-report/loesung/v16516/auswertung.py @@ -14,6 +14,7 @@ from curve_fit import ucurve_fit from latex_formatting import make_qty + # Load all data files camera = np.genfromtxt("data/Messwerte_Kamera.txt", names=True, delimiter=",") track = np.genfromtxt("data/Messwerte_Bahn.txt", names=True, delimiter=",") @@ -46,11 +47,10 @@ print("-"*70,end="\n\n") - # create data with uncertainties and SI-Units framerate = camera["fps"] # frame/s -L = track_length = unc.ufloat(track["l"],track["sigma_l"]) / 100 # m +L = track_length = unc.ufloat(track["l"],track["sigma_l"])/100 # m m_B = ball_mass = unc.ufloat(ball["m"],ball["sigma_m"])/1000 # kg U_B = ball_perimeter = unc.ufloat(ball["U"],ball["sigma_U"])/100 #m @@ -66,7 +66,6 @@ # each height was measured 3 times => calculating the mean of these measurments - # selecting each height once h_B = h_B.reshape(-1, 3)[:,0] t_B = t_B.reshape(-1, 3).mean(axis=1) @@ -96,7 +95,7 @@ # fitting theoretical curve to data def fit_g_ball(h, g, t0): - return np.sqrt(7/10 * 1/h * 4 * noms(L)**2/g) + t0 + return np.sqrt(7/5 * 1/h * 2* noms(L)**2/g) + t0 params = ucurve_fit(fit_g_ball, noms(h_B), t_B, p0=[10, 0]) @@ -135,7 +134,7 @@ def fit_g_ball(h, g, t0): # fitting theoretical curve to data def fit_g_cylinder(h, g, t0): - return np.sqrt((2 + noms(Ri_C**2 + Ro_C**2))/4 * 1/h * 4 * noms(L)**2/g) + t0 + return np.sqrt((3 + noms(Ri_C**2/Ro_C**2)) * noms(L)**2/(g*h)) + t0 params = ucurve_fit(fit_g_cylinder, noms(h_C), t_C, p0=[10, 0]) From 2227017e0ec85e590e44cda32954c96b1ba10f73 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Wed, 18 Sep 2024 20:32:01 +0200 Subject: [PATCH 14/48] add all targets to makefile --- .../loesung/v16516/Makefile | 55 ++++++++++++++++++- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/Makefile b/exercises-latex/example-lab-report/loesung/v16516/Makefile index 782ad9e6..3ee00846 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/Makefile +++ b/exercises-latex/example-lab-report/loesung/v16516/Makefile @@ -1,14 +1,63 @@ all: build/v16516.pdf # hier Python-Skripte: -build/plot.pdf: plot.py ../matplotlibrc ../header-matplotlib.tex | build +build/plot-g_ball.pdf: auswertung.py ../matplotlibrc ../header-matplotlib.tex data/*| build # so that matplotlib can find the tex header when running # LaTeX in the tmp directory # and set the matplotlibrc - TEXINPUTS=$$(pwd)/..: MATPLOTLIBRC=../matplotlibrc python plot.py + TEXINPUTS=$$(pwd)/..: MATPLOTLIBRC=../matplotlibrc python auswertung.py + +build/parameter-g_ball.tex: build/plot-g_ball.pdf +build/parameter-t0-g_ball.tex: build/parameter-g_ball.tex + +build/plot-g_cylinder.pdf: build/parameter-t0-g_ball.tex +build/parameter-g_cylinder.tex: build/plot-g_cylinder.pdf +build/parameter-t0-g_cylinder.tex: build/parameter-g_cylinder.tex + +build/plot-I_ball.pdf: build/parameter-g_cylinder.tex +build/parameter-I_ball.tex: build/plot-I_ball.pdf +build/parameter-t0-I_ball.tex: build/parameter-I_ball.tex + +build/plot-I_cylinder.pdf: build/parameter-t0-I_ball.tex +build/parameter-I_cylinder.tex: build/plot-I_cylinder.pdf +build/parameter-t0-I_cylinder.tex: build/parameter-I_cylinder.tex + +build/table_all-measurements.tex: build/parameter-t0-I_cylinder.tex +build/table_averaged-measurements.tex: build/table_all-measurements.tex +build/tracklength.tex: build/table_averaged-measurements.tex +build/framerate.tex: build/tracklength.tex +build/mass_ball.tex: build/framerate.tex +build/radius_ball.tex: build/mass_ball.tex +build/theoretical-I_ball.tex: build/radius_ball.tex +build/mass_cylinder.tex: build/theoretical-I_ball.tex +build/radius-inner_cylinder.tex: build/mass_cylinder.tex +build/radius-outer_cylinder.tex: build/radius-inner_cylinder.tex +build/theoretical-I_cylinder.tex: build/radius-outer_cylinder.tex # hier weitere Abhängigkeiten für build/vXXX.pdf deklarieren: -build/v16516.pdf: build/plot.pdf +build/v16516.pdf: build/plot-g_ball.pdf +build/v16516.pdf: build/parameter-g_ball.tex +build/v16516.pdf: build/parameter-t0-g_ball.tex +build/v16516.pdf: build/plot-g_cylinder.pdf +build/v16516.pdf: build/parameter-g_cylinder.tex +build/v16516.pdf: build/parameter-t0-g_cylinder.tex +build/v16516.pdf: build/plot-I_ball.pdf +build/v16516.pdf: build/parameter-I_ball.tex +build/v16516.pdf: build/parameter-t0-I_ball.tex +build/v16516.pdf: build/plot-I_cylinder.pdf +build/v16516.pdf: build/parameter-I_cylinder.tex +build/v16516.pdf: build/parameter-t0-I_cylinder.tex +build/v16516.pdf: build/framerate.tex +build/v16516.pdf: build/theoretical-I_ball.tex +build/v16516.pdf: build/theoretical-I_cylinder.tex +build/v16516.pdf: build/tracklength.tex +build/v16516.pdf: build/mass_ball.tex +build/v16516.pdf: build/mass_cylinder.tex +build/v16516.pdf: build/radius_ball.tex +build/v16516.pdf: build/radius-inner_cylinder.tex +build/v16516.pdf: build/radius-outer_cylinder.tex +build/v16516.pdf: build/table_all-measurements.tex +build/v16516.pdf: build/table_averaged-measurements.tex build/v16516.pdf: FORCE | build # to find header and bib files in the main directory From f56fc51857fe94611268a30ad84ef3a852fc77fe Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 11:42:45 +0200 Subject: [PATCH 15/48] added some notes to discussion simulating 'todo notes' --- .../loesung/v16516/content/diskussion.tex | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/diskussion.tex b/exercises-latex/example-lab-report/loesung/v16516/content/diskussion.tex index 68e2b8f1..deea3f31 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/diskussion.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/diskussion.tex @@ -2,5 +2,45 @@ \section{Diskussion} \label{sec:Diskussion} +TODO: Diskussion fertig machen ;-) + +Notizen: + +Bestimmung von g: + +Fits + +\autoref{fig:fit-g-ball} + +\autoref{fig:fit-g-cylinder} + +passen zu den Messwerten. + + +Die Fit parameter +\eqref{eq:parameters-g_ball} +\eqref{eq:parameters-g_cylinder} + +passen zum theoretischen Wert \input{theoretical-g.tex} +=> TODO: Abweichungen berechnen + +Die übereinstimmung der Fitparameter t0, weist auf eine systematische Unsicherheit +=> TODO: Berechnung des Offsets in Frames + +Analog für die Bestimmung von I: + +Fits: + +\autoref{fig:fit-I-ball} + +\autoref{fig:fit-I-cylinder} + +\eqref{eq:parameters-I_ball} + +\eqref{eq:parameters-I_cylinder} + +\eqref{eq:moments-inertia} + +=> TODO: Abweichungen berechnen + -Todo: Diskussion fertig machen ;-) From c17a194a0291db24eac8212ab3fb58cbba6552b4 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 11:44:52 +0200 Subject: [PATCH 16/48] update captions --- .../loesung/v16516/content/auswertung.tex | 16 ++++++++++------ .../loesung/v16516/content/theorie.tex | 4 +++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex b/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex index bdb8a780..39fa7579 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex @@ -30,9 +30,9 @@ \section{Auswertung} \begin{table} \centering - \input{build/table_all-measurements.tex} \caption{Alle aufgenommenen Werte, das heißt mit dreifach wiederholter Messungen je Höhe.} \label{tab:all-measurements} + \input{build/table_all-measurements.tex} \end{table} Durch Mittelung der Messwerte für die selbe Höhe $h$ ergeben sich die in @@ -42,9 +42,9 @@ \section{Auswertung} \begin{table} \centering - \input{build/table_averaged-measurements.tex} \caption{Für gleiche Starthöhe $h$ gemittelte Messwerte der Zeit $t$.} \label{tab:averaged-measurements} + \input{build/table_averaged-measurements.tex} \end{table} @@ -58,7 +58,8 @@ \subsection{Bestimmung der Fallbeschleunigung $g$} \begin{figure} \centering \includegraphics{plot-g_ball.pdf} - \caption{Dargestellt sind die für je eine Höhe gemittelten Messwerte aus \autoref{tab:averaged-measurements} für die Kugel, zusammen mit einer Ausgleichsfunktion der Form \eqref{eq:fit-function-g-ball}. + \caption{Dargestellt sind die für je eine Höhe gemittelten Messwerte aus \autoref{tab:averaged-measurements} für die Kugel, + zusammen mit einer Ausgleichsfunktion der Form \eqref{eq:fit-function-g-ball} für die Bestimmung der Fallbeschleunigung $g$. Die Parameter der Ausgleichsrechnung sind in \eqref{eq:parameters-g_ball} angegeben.} \label{fig:fit-g-ball} \end{figure} @@ -66,7 +67,8 @@ \subsection{Bestimmung der Fallbeschleunigung $g$} \begin{figure} \centering \includegraphics{plot-g_cylinder.pdf} - \caption{Dargestellt sind die für je eine Höhe gemittelten Messwerte aus \autoref{tab:averaged-measurements} für den Zylinder, zusammen mit einer Ausgleichsfunktion der Form \eqref{eq:fit-function-g-cylinder}. + \caption{Dargestellt sind die für je eine Höhe gemittelten Messwerte aus \autoref{tab:averaged-measurements} für den Zylinder, + zusammen mit einer Ausgleichsfunktion der Form \eqref{eq:fit-function-g-cylinder} für die Bestimmung der Fallbeschleunigung $g$. Die Parameter der Ausgleichsrechnung sind in \eqref{eq:parameters-g_cylinder} angegeben.} \label{fig:fit-g-cylinder} \end{figure} @@ -93,7 +95,8 @@ \subsection{Bestimmung der Trägheitsmomente $I$} \begin{figure} \centering \includegraphics{plot-I_ball.pdf} - \caption{Dargestellt sind die für je eine Höhe gemittelten Messwerte aus \autoref{tab:averaged-measurements} für den Kugel, zusammen mit einer Ausgleichsfunktion der Form \eqref{eq:fit-function-I}. + \caption{Dargestellt sind die für je eine Höhe gemittelten Messwerte aus \autoref{tab:averaged-measurements} für den Kugel, + zusammen mit einer Ausgleichsfunktion der Form \eqref{eq:fit-function-I} für die Bestimmung des Trägheitsmoments $I_\text{K}$. Die Parameter der Ausgleichsrechnung sind in \eqref{eq:parameters-I_ball} angegeben.} \label{fig:fit-I-ball} \end{figure} @@ -102,7 +105,8 @@ \subsection{Bestimmung der Trägheitsmomente $I$} \begin{figure} \centering \includegraphics{plot-I_cylinder.pdf} - \caption{Dargestellt sind die für je eine Höhe gemittelten Messwerte aus \autoref{tab:averaged-measurements} für den Zylinder, zusammen mit einer Ausgleichsfunktion der Form \eqref{eq:fit-function-I}. + \caption{Dargestellt sind die für je eine Höhe gemittelten Messwerte aus \autoref{tab:averaged-measurements} für den Zylinder, + zusammen mit einer Ausgleichsfunktion der Form \eqref{eq:fit-function-I} für die Bestimmung des Trägheitsmoments $I_\text{Z}$. Die Parameter der Ausgleichsrechnung sind in \eqref{eq:parameters-I_cylinder} angegeben.} \label{fig:fit-I-cylinder} \end{figure} diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex b/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex index f67fbb43..fdf870f9 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex @@ -19,7 +19,9 @@ \section{Theorie} \draw[dashed,opacity=0.25] (3.,0.26) circle (0.25cm); \draw[->] (0.25, 1.03) arc (270:50:0.16) node[below]{\small$\omega$}; \end{tikzpicture} - \caption{Schematische Darstellung des Versuchsaufbaus.} + \caption{Schematische Darstellung des Versuchsaufbaus. Das runde Objekt (Kugel oder Zylinder) wird in der Höhe $h$ + auf eine schiefe Ebene gelegt, sodass es aus der Ruhe herabrollt. Die Bewegung ist beschleunigt, sodass sowohl + die Geschwindigkeit $\vec{v}(t)$ sowie die Winkelgeschwindigkeit $\omega(t)$ nicht konstant sind.} \label{fig:experimental-setup} \end{figure} From f7b357ddd928eb0341bbc5b341a40a72e9bb0c90 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 11:45:31 +0200 Subject: [PATCH 17/48] improve qty formatting function --- .../loesung/v16516/latex_formatting.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/latex_formatting.py b/exercises-latex/example-lab-report/loesung/v16516/latex_formatting.py index bbd52532..61069449 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/latex_formatting.py +++ b/exercises-latex/example-lab-report/loesung/v16516/latex_formatting.py @@ -3,16 +3,21 @@ std_devs as stds, ) -def make_qty(num, unit, exp="", figures=None): +def make_qty(num, unit, exp="", figures=None, formatting=None): """Format an uncertainties ufloat as a \qty quantity""" if np.any(stds([num])): if figures is None: figures = "" - x = "{0:.{1:}uf}".format(num, figures).replace("/", "") + x = f"{num:.{figures:}uf}".replace("/", "") else: - x = "{0:.{1:}f}".format(num, figures) + x = f"{num:.{figures:}f}" + if exp and not str(exp).startswith('e'): + exp = 'e' + str(exp) + if formatting: + return rf"\qty[{formatting}]{{{x}{exp}}}{{{unit}}}" + + return rf"\qty{{{x}{exp}}}{{{unit}}}" - return r"\qty{{{}{}}}{{{}}}".format(x, exp, unit) From bc54db05bd5205d4bd58e98450a524dd951e3371 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 11:45:38 +0200 Subject: [PATCH 18/48] fix dates --- exercises-latex/example-lab-report/loesung/v16516/v16516.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/v16516.tex b/exercises-latex/example-lab-report/loesung/v16516/v16516.tex index 1b982de1..0cc9914b 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/v16516.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/v16516.tex @@ -4,9 +4,9 @@ \subject{V16516} \title{Die schiefe Ebene} \date{% - Durchführung: 2023-09-29 + Durchführung: 29.09.2023 \hspace{3em} - Abgabe: 2024-09-23 + Abgabe: 23.09.2024 } \begin{document} From 91cf74b0258a2b943d1cc1214393811f4806fd18 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 11:45:51 +0200 Subject: [PATCH 19/48] added authors --- exercises-latex/example-lab-report/loesung/header.tex | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/header.tex b/exercises-latex/example-lab-report/loesung/header.tex index 93860c09..8af6b5a9 100644 --- a/exercises-latex/example-lab-report/loesung/header.tex +++ b/exercises-latex/example-lab-report/loesung/header.tex @@ -131,10 +131,9 @@ \usepackage[shortcuts]{extdash} \author{% - AUTOR A\\% - \href{mailto:authorA@udo.edu}{authorA@udo.edu}% + Joshua Luckey\\% + \href{mailto:joshua.luckey@udo.edu}{joshua.luckey@udo.edu}% \and% - AUTOR B\\% - \href{mailto:authorB@udo.edu}{authorB@udo.edu}% + PeP et al.: Toolbox Workshop\\% + \href{mailto:pep-toolbox.physik@lists.tu-dortmund.de}{pep-toolbox.physik@lists.tu-dortmund.de} } -\publishers{TU Dortmund – Fakultät Physik} From 7e7c22bb3ad8548382bfcd8a7b8f5c36cecc31ec Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 11:46:02 +0200 Subject: [PATCH 20/48] added a book bib-entry --- exercises-latex/example-lab-report/loesung/lit.bib | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/lit.bib b/exercises-latex/example-lab-report/loesung/lit.bib index 98e27516..f1915e13 100644 --- a/exercises-latex/example-lab-report/loesung/lit.bib +++ b/exercises-latex/example-lab-report/loesung/lit.bib @@ -1,9 +1,18 @@ -@manual{sample, +@manual{V16516, organization = {TU Dortmund, Fakultät Physik}, - title = {Versuch zum Literaturverzeichnis}, + title = {Anleitung: Versuch zur schiefen Ebene}, year = 2023 } + + +@book{kuypers2016klassische, + title={Klassische Mechanik}, + author={Kuypers, Friedhelm}, + year={2016}, + publisher={John Wiley \& Sons} +} + @online{galilei1623, author = {Galilei, Galileo}, title = {Il Saggiatore}, From 5f1dad9481bcc23cc47db54733b43116ce62a0bb Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 11:46:38 +0200 Subject: [PATCH 21/48] add info to legends --- .../example-lab-report/loesung/v16516/auswertung.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/auswertung.py b/exercises-latex/example-lab-report/loesung/v16516/auswertung.py index c6d2e909..552b694f 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/auswertung.py +++ b/exercises-latex/example-lab-report/loesung/v16516/auswertung.py @@ -113,7 +113,7 @@ def fit_g_ball(h, g, t0): noms(t_B), yerr=stds(t_B), fmt="k_", - label="Daten", + label="Daten: Kugel", ) ax.plot(h_plot, fit_g_ball(h_plot, *noms(params)), "-", label="Fit") ax.set_xlim(h_plot[0], h_plot[-1]) @@ -151,7 +151,7 @@ def fit_g_cylinder(h, g, t0): noms(t_C), yerr=stds(t_C), fmt="k_", - label="Daten", + label="Daten: Zylinder", ) ax.plot(h_plot, fit_g_cylinder(h_plot, *noms(params)), "-", label="Fit") ax.set_xlim(h_plot[0], h_plot[-1]) @@ -195,7 +195,7 @@ def fit_I_ball(h, I, t0): noms(t_B), yerr=stds(t_B), fmt="k_", - label="Daten", + label="Daten: Kugel", ) ax.plot(h_plot, fit_I_ball(h_plot, *noms(params)), "-", label="Fit") ax.set_xlim(h_plot[0], h_plot[-1]) @@ -234,7 +234,7 @@ def fit_I_cylinder(h, I, t0): noms(t_C), yerr=stds(t_C), fmt="k_", - label="Daten", + label="Daten: Zylinder", ) ax.plot(h_plot, fit_I_cylinder(h_plot, *noms(params)), "-", label="Fit") ax.set_xlim(h_plot[0], h_plot[-1]) From 4fd4a89a49215d1d1ce2b7b004f11dae97efae8f Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 11:48:17 +0200 Subject: [PATCH 22/48] change exported values: I unit & add g --- .../example-lab-report/loesung/v16516/auswertung.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/auswertung.py b/exercises-latex/example-lab-report/loesung/v16516/auswertung.py index 552b694f..eda9c935 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/auswertung.py +++ b/exercises-latex/example-lab-report/loesung/v16516/auswertung.py @@ -208,7 +208,7 @@ def fit_I_ball(h, I, t0): parameter_I, parameter_t0 = params with open("build/parameter-I_ball.tex", "w") as f: - f.write(make_qty(parameter_I, r"\kilo\gram\meter\squared")) + f.write(make_qty(parameter_I*10000, r"\kilo\gram\centi\meter\squared"))# change units: kg cm² with open("build/parameter-t0-I_ball.tex", "w") as f: f.write(make_qty(parameter_t0, r"\second")) @@ -248,7 +248,7 @@ def fit_I_cylinder(h, I, t0): parameter_I, parameter_t0 = params with open("build/parameter-I_cylinder.tex", "w") as f: - f.write(make_qty(parameter_I, r"\kilo\gram\meter\squared")) + f.write(make_qty(parameter_I*10000, r"\kilo\gram\centi\meter\squared"))# change units: kg cm² with open("build/parameter-t0-I_cylinder.tex", "w") as f: f.write(make_qty(parameter_t0, r"\second")) @@ -256,15 +256,17 @@ def fit_I_cylinder(h, I, t0): # exporting non tabular data +with open("build/theoretical-g.tex", "w") as f: + f.write(make_qty(g,r"\meter\per\second\squared", figures=2, formatting="per-mode=reciprocal")) with open("build/framerate.tex", "w") as f: - f.write(make_qty(framerate, r"\per\second", figures=1)) + f.write(make_qty(framerate, r"\per\second", figures=0, formatting="per-mode=reciprocal")) with open("build/theoretical-I_ball.tex", "w") as f: - f.write(make_qty(I_B,r"\kilo\gram\meter\squared")) + f.write(make_qty(I_B*10000,r"\kilo\gram\centi\meter\squared")) # change units: kg cm² with open("build/theoretical-I_cylinder.tex", "w") as f: - f.write(make_qty(I_C,r"\kilo\gram\meter\squared")) + f.write(make_qty(I_C*10000,r"\kilo\gram\centi\meter\squared"))# change units: kg cm² with open("build/tracklength.tex", "w") as f: f.write(make_qty(L,r"\meter")) From 5dd331f25cdaf5642d280292debbfbda03af2920 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 11:49:07 +0200 Subject: [PATCH 23/48] add some citations --- .../example-lab-report/loesung/v16516/content/durchfuehrung.tex | 2 ++ .../example-lab-report/loesung/v16516/content/theorie.tex | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex b/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex index 589a7bb6..5c91c492 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex @@ -1,6 +1,8 @@ \section{Durchführung} \label{sec:Durchführung} +Wie in der Anleitung~\cite{V16516} beschrieben, wird der Versuch wie folgt durchgeführt. + Wie einst von Galileo Galilei \cite[232]{galilei1623} persönlich, wurden im hier beschriebenen Versuch Objekte (eine Kugel und Holzylinder in Form eines Glases) eine schiefe Ebene hinab gerollt. diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex b/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex index fdf870f9..6b396a8d 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex @@ -37,7 +37,7 @@ \section{Theorie} mgh &= \frac{m}{2}v^2 + \frac{I}{2}\omega^2 \quad\big|\,\omega = \frac{v}{r} \\ mgh &= \frac{m}{2}v^2 + \frac{I}{2}\frac{v^2}{r^2}\quad\big|\, :mgh \\ 1 &= \frac{v^2}{2gh} \left(1 + \frac{I}{mr^2} \right)\\ -\intertext{aus der Kinematik ist bekannt, dass die Endgeschwindigkeit einer + \intertext{aus der Kinematik~\cite{kuypers2016klassische} ist bekannt, dass die Endgeschwindigkeit einer beschleunigten Bewegung (in der Zeit $t$, entlang einer Strecke $l$) $v = \frac{2l}{t}$ ist. Es gilt also} 1 &= \left(\frac{2l}{t}\right)^2 \frac{1}{2gh} \left(1 + \frac{I}{mr^2} \right)\quad\big|\, \cdot t^2 \\ From 34b79c55f7c982ff944144228552fe4de73a3013 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 11:50:50 +0200 Subject: [PATCH 24/48] change listing of fit parameters --- .../loesung/v16516/content/auswertung.tex | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex b/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex index 39fa7579..871ed209 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex @@ -15,7 +15,7 @@ \section{Auswertung} \begin{align} \label{eq:moments-inertia} - I_\text{Z} &= \input{./../build/theoretical-I_cylinder.tex} && I_\text{K} = \input{./../build/theoretical-I_ball.tex}. + I_\text{Z} &= \input{./../build/theoretical-I_cylinder.tex}\quad\text{ und } & I_\text{K} = \input{./../build/theoretical-I_ball.tex}. \end{align} @@ -77,10 +77,10 @@ \subsection{Bestimmung der Fallbeschleunigung $g$} \begin{align} \label{eq:parameters-g_ball} - g_\text{K} = \input{parameter-g_ball.tex} && t_{0,\text{K}} = \input{parameter-t0-g_ball.tex} + g_\text{K} &= \input{parameter-g_ball.tex}\quad\text{ und } & t_{0,\text{K}} &= \input{parameter-t0-g_ball.tex} \intertext{und für den Zylinder} \label{eq:parameters-g_cylinder} - g_\text{Z} = \input{parameter-g_cylinder.tex} && t_{0,\text{Z}} = \input{parameter-t0-g_cylinder.tex}. + g_\text{Z} &= \input{parameter-g_cylinder.tex}\quad\text{ und } & t_{0,\text{Z}} &= \input{parameter-t0-g_cylinder.tex}. \end{align} @@ -115,10 +115,10 @@ \subsection{Bestimmung der Trägheitsmomente $I$} \begin{align} \label{eq:parameters-I_ball} - I_\text{K} &= \input{parameter-I_ball.tex} &t_{0,\text{K}} &= \input{parameter-t0-I_ball.tex} + I_\text{K} &= \input{parameter-I_ball.tex}\quad\text{ und } &t_{0,\text{K}} &= \input{parameter-t0-I_ball.tex} \intertext{und für den Zylinder} \label{eq:parameters-I_cylinder} - I_\text{Z} &= \input{parameter-I_cylinder.tex} & t_{0,\text{Z}} &= \input{parameter-t0-I_cylinder.tex}. + I_\text{Z} &= \input{parameter-I_cylinder.tex}\quad\text{ und } & t_{0,\text{Z}} &= \input{parameter-t0-I_cylinder.tex}. \end{align} From 0469613c195a5ab08839e8e16cf5410a345cab2c Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 11:51:09 +0200 Subject: [PATCH 25/48] fix spacing --- .../loesung/v16516/content/auswertung.tex | 21 ++++--------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex b/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex index 871ed209..6945baf8 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex @@ -1,25 +1,17 @@ \section{Auswertung} \label{sec:Auswertung} - - -Die für diesen Versuch relevanten physikalischen Größen für Kugel und Zylinder sind - +Die für diesen Versuch relevanten physikalischen Größen für Kugel und Zylinder sind: \begin{align} \label{eq:physical-properties} m_\text{Z} &= \input{mass_ball.tex} & m_\text{K} &= \input{mass_ball.tex}\nonumber\\ r_{\text{Z},\text{i}} &= \input{../build/radius-inner_cylinder.tex} & r_\text{K} &= \input{radius_ball.tex}\\ r_{\text{Z},\text{a}} &= \input{../build/radius-outer_cylinder.tex} &&\nonumber \end{align} - -Berechnet wurde aus diesen Größen das jeweilige, theoretiche Trägheitsmoment - +Berechnet wurde aus diesen Größen das jeweilige, theoretische Trägheitsmoment \begin{align} \label{eq:moments-inertia} I_\text{Z} &= \input{./../build/theoretical-I_cylinder.tex}\quad\text{ und } & I_\text{K} = \input{./../build/theoretical-I_ball.tex}. \end{align} - - - Aus den aufgenommenen Videos der Versuche wurden die in \autoref{tab:all-measurements} folgenden Frameindizes extrahiert. Die ebenfalls aufgeführte Zeitdauer $t$ wurde dann jeweils aus der aus dem Startframeindex $F_\text{i}$, dem Endframeindex $F_\text{f}$ und der Kameraframerate $\symup{fps}=\input{framerate.tex}$ wie folgt @@ -35,11 +27,10 @@ \section{Auswertung} \input{build/table_all-measurements.tex} \end{table} -Durch Mittelung der Messwerte für die selbe Höhe $h$ ergeben sich die in -\autoref{tab:averaged-measurements} berechnet und werden für die folgenden +Durch Mittelung der Messwerte für die selbe Höhe $h$ ergeben sich die Werte +in \autoref{tab:averaged-measurements}. Diese Werte werden für die folgenden Auswertungsschritte verwendet. - \begin{table} \centering \caption{Für gleiche Starthöhe $h$ gemittelte Messwerte der Zeit $t$.} @@ -47,7 +38,6 @@ \section{Auswertung} \input{build/table_averaged-measurements.tex} \end{table} - \subsection{Bestimmung der Fallbeschleunigung $g$} Für die bestimmung der Fallbeschleunigung wurden eine Ausgleichsfunktion der Form @@ -74,7 +64,6 @@ \subsection{Bestimmung der Fallbeschleunigung $g$} \end{figure} Die Parameter der Ausgleichsrechnung ergeben sich für die Kugel zu - \begin{align} \label{eq:parameters-g_ball} g_\text{K} &= \input{parameter-g_ball.tex}\quad\text{ und } & t_{0,\text{K}} &= \input{parameter-t0-g_ball.tex} @@ -83,7 +72,6 @@ \subsection{Bestimmung der Fallbeschleunigung $g$} g_\text{Z} &= \input{parameter-g_cylinder.tex}\quad\text{ und } & t_{0,\text{Z}} &= \input{parameter-t0-g_cylinder.tex}. \end{align} - \subsection{Bestimmung der Trägheitsmomente $I$} Für die bestimmung der Fallbeschleunigung wurden eine Ausgleichsfunktion der Form @@ -112,7 +100,6 @@ \subsection{Bestimmung der Trägheitsmomente $I$} \end{figure} Die Parameter der Ausgleichsrechnung ergeben sich für die Kugel zu - \begin{align} \label{eq:parameters-I_ball} I_\text{K} &= \input{parameter-I_ball.tex}\quad\text{ und } &t_{0,\text{K}} &= \input{parameter-t0-I_ball.tex} From b452ea2d5b097c97b798c82399f938610766b2d3 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 11:51:46 +0200 Subject: [PATCH 26/48] fix typo --- .../loesung/v16516/content/durchfuehrung.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex b/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex index 5c91c492..090bea1a 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex @@ -7,7 +7,7 @@ \section{Durchführung} Objekte (eine Kugel und Holzylinder in Form eines Glases) eine schiefe Ebene hinab gerollt. Notiert wird dabei die Starthöhen $h$. Der Prozess des Herabrollens wird mit einer Kamera -aufgezeichnet, um aus die Zeit $t$ bis zum erreichen des Endes der schiefen Ebene möglichst genau +aufgezeichnet, um aus der Zeit $t$ bis zum erreichen des Endes der schiefen Ebene möglichst genau aus den Einzelbildern (frames) des Films ablesen zu können. Die aufgenommenen Messdaten werden für zwei unabhängige Zwecke verwendet: @@ -15,7 +15,7 @@ \section{Durchführung} \begin{enumerate} \item {Bestimmung der Fallbeschleunigung $g$, dafür werden die theoretischen Trägheitsmomente angenommen.} - \item {Bestimmung der Trägheitsmoment der beiden Objekte unter Annahme der theoretischen + \item {Bestimmung der Trägheitsmomente $I$ der beiden Objekte unter Annahme der theoretischen Fallbeschleunigung.} \end{enumerate} From 55f199f5eb2d387f79762e007bd91f62bbe37609 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 11:51:54 +0200 Subject: [PATCH 27/48] reformat equation --- .../example-lab-report/loesung/v16516/content/theorie.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex b/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex index 6b396a8d..0ef332cf 100644 --- a/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex +++ b/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex @@ -71,7 +71,7 @@ \section{Theorie} % \intertext{und} % -t_\text{Z}(h) &= \sqrt{\frac{l^2}{gh} \left(3 + \left(\frac{r_{\text{Z},\text{innen}}^2}{r_{\text{Z},\text{außen}}^2}\right) \right)} + t_0. +t_\text{Z}(h) &= \sqrt{\frac{l^2}{gh} \left(3 + \left(\frac{r_{\text{Z},\text{innen}}}{r_{\text{Z},\text{außen}}}\right)^2 \right)} + t_0. \label{eq:fit-function-g-cylinder} \end{align} Dabei sind in diesen Gleichungen $g$ und $t_0$ die Ausgleichsparameter. From 86f3d0b1e50aa961e5b97bf5a1c73fbf637804fe Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 16:47:49 +0200 Subject: [PATCH 28/48] moved complete version to the last exercises collection '8-all' --- .../8-all/Realistisches-Beispiel-Protokoll}/loesung/Makefile | 0 .../8-all/Realistisches-Beispiel-Protokoll}/loesung/README.md | 0 .../loesung/header-matplotlib.tex | 0 .../8-all/Realistisches-Beispiel-Protokoll}/loesung/header.tex | 0 .../8-all/Realistisches-Beispiel-Protokoll}/loesung/lit.bib | 0 .../8-all/Realistisches-Beispiel-Protokoll}/loesung/matplotlibrc | 0 .../8-all/Realistisches-Beispiel-Protokoll}/loesung/programme.bib | 0 .../Realistisches-Beispiel-Protokoll}/loesung/v16516/Makefile | 0 .../loesung/v16516/auswertung.py | 0 .../loesung/v16516/content/auswertung.tex | 0 .../loesung/v16516/content/diskussion.tex | 0 .../loesung/v16516/content/durchfuehrung.tex | 0 .../loesung/v16516/content/theorie.tex | 0 .../Realistisches-Beispiel-Protokoll}/loesung/v16516/curve_fit.py | 0 .../loesung/v16516/data/Messwerte_Bahn.txt | 0 .../loesung/v16516/data/Messwerte_Frames_Kugel.txt | 0 .../loesung/v16516/data/Messwerte_Frames_Zylinder.txt | 0 .../loesung/v16516/data/Messwerte_Kamera.txt | 0 .../loesung/v16516/data/Messwerte_Kugel.txt | 0 .../loesung/v16516/data/Messwerte_Zylinder.txt | 0 .../loesung/v16516/latex_formatting.py | 0 .../Realistisches-Beispiel-Protokoll}/loesung/v16516/v16516.tex | 0 22 files changed, 0 insertions(+), 0 deletions(-) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/Makefile (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/README.md (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/header-matplotlib.tex (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/header.tex (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/lit.bib (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/matplotlibrc (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/programme.bib (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/Makefile (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/auswertung.py (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/content/auswertung.tex (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/content/diskussion.tex (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/content/durchfuehrung.tex (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/content/theorie.tex (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/curve_fit.py (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/data/Messwerte_Bahn.txt (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/data/Messwerte_Frames_Kugel.txt (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/data/Messwerte_Frames_Zylinder.txt (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/data/Messwerte_Kamera.txt (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/data/Messwerte_Kugel.txt (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/data/Messwerte_Zylinder.txt (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/latex_formatting.py (100%) rename {exercises-latex/example-lab-report => exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll}/loesung/v16516/v16516.tex (100%) diff --git a/exercises-latex/example-lab-report/loesung/Makefile b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/Makefile similarity index 100% rename from exercises-latex/example-lab-report/loesung/Makefile rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/Makefile diff --git a/exercises-latex/example-lab-report/loesung/README.md b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/README.md similarity index 100% rename from exercises-latex/example-lab-report/loesung/README.md rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/README.md diff --git a/exercises-latex/example-lab-report/loesung/header-matplotlib.tex b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/header-matplotlib.tex similarity index 100% rename from exercises-latex/example-lab-report/loesung/header-matplotlib.tex rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/header-matplotlib.tex diff --git a/exercises-latex/example-lab-report/loesung/header.tex b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/header.tex similarity index 100% rename from exercises-latex/example-lab-report/loesung/header.tex rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/header.tex diff --git a/exercises-latex/example-lab-report/loesung/lit.bib b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/lit.bib similarity index 100% rename from exercises-latex/example-lab-report/loesung/lit.bib rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/lit.bib diff --git a/exercises-latex/example-lab-report/loesung/matplotlibrc b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/matplotlibrc similarity index 100% rename from exercises-latex/example-lab-report/loesung/matplotlibrc rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/matplotlibrc diff --git a/exercises-latex/example-lab-report/loesung/programme.bib b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/programme.bib similarity index 100% rename from exercises-latex/example-lab-report/loesung/programme.bib rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/programme.bib diff --git a/exercises-latex/example-lab-report/loesung/v16516/Makefile b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/Makefile similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/Makefile rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/Makefile diff --git a/exercises-latex/example-lab-report/loesung/v16516/auswertung.py b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/auswertung.py rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/auswertung.tex similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/content/auswertung.tex rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/auswertung.tex diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/diskussion.tex b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/diskussion.tex similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/content/diskussion.tex rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/diskussion.tex diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/durchfuehrung.tex similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/content/durchfuehrung.tex rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/durchfuehrung.tex diff --git a/exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/theorie.tex similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/content/theorie.tex rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/theorie.tex diff --git a/exercises-latex/example-lab-report/loesung/v16516/curve_fit.py b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/curve_fit.py similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/curve_fit.py rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/curve_fit.py diff --git a/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Bahn.txt b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Bahn.txt rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt diff --git a/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Frames_Kugel.txt rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt diff --git a/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Frames_Zylinder.txt rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt diff --git a/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Kamera.txt b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Kamera.txt rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt diff --git a/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Kugel.txt b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Kugel.txt rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt diff --git a/exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Zylinder.txt b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/data/Messwerte_Zylinder.txt rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt diff --git a/exercises-latex/example-lab-report/loesung/v16516/latex_formatting.py b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/latex_formatting.py similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/latex_formatting.py rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/latex_formatting.py diff --git a/exercises-latex/example-lab-report/loesung/v16516/v16516.tex b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/v16516.tex similarity index 100% rename from exercises-latex/example-lab-report/loesung/v16516/v16516.tex rename to exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/v16516.tex From 981f468278a73ecdae4340fe273493f2aae465eb Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 17:28:28 +0200 Subject: [PATCH 29/48] add first step for the example report --- .../aufgabe.txt | 30 +++++++++++++++++++ .../vorlage/v16516/auswertung.py | 0 .../vorlage/v16516/data/Messwerte_Bahn.txt | 4 +++ .../v16516/data/Messwerte_Frames_Kugel.txt | 21 +++++++++++++ .../v16516/data/Messwerte_Frames_Zylinder.txt | 22 ++++++++++++++ .../vorlage/v16516/data/Messwerte_Kamera.txt | 4 +++ .../vorlage/v16516/data/Messwerte_Kugel.txt | 5 ++++ .../v16516/data/Messwerte_Zylinder.txt | 5 ++++ 8 files changed, 91 insertions(+) create mode 100644 exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/aufgabe.txt create mode 100644 exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/auswertung.py create mode 100644 exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt create mode 100644 exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt create mode 100644 exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt create mode 100644 exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt create mode 100644 exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt create mode 100644 exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/aufgabe.txt new file mode 100644 index 00000000..c04c96f3 --- /dev/null +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/aufgabe.txt @@ -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 wars 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 schomal abgenommen. ;) + + + + + + diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/auswertung.py b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/auswertung.py new file mode 100644 index 00000000..e69de29b diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt new file mode 100644 index 00000000..cc6a4720 --- /dev/null +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt @@ -0,0 +1,4 @@ +# l,sigma_l +80,0.5 +# Länge der Bahn +# cm (l / cm) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt new file mode 100644 index 00000000..91bc58b6 --- /dev/null +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt @@ -0,0 +1,21 @@ +# h,sigma_h,Fi,sigma_Fi,Ff,sigma_Ff +4.5,0.5,436,1,492,1 +4.5,0.5,555,1,610,1 +4.5,0.5,672,1,729,1 +10,0.5,95,1,130,1 +10,0.5,199,1,235,1 +10,0.5,303,1,338,1 +15,0.5,91,1,119,1 +15,0.5,201,1,229,1 +15,0.5,335,1,362,1 +20,0.5,232,1,256,1 +20,0.5,323,1,347,1 +20,0.5,397,1,421,1 +25,0.5,153,1,174,1 +25,0.5,239,1,260,1 +25,0.5,322,1,343,1 +30,0.5,219,1,238,1 +30,0.5,319,1,338,1 +30,0.5,391,1,412,1 +# Messreihe: Kugel +# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt new file mode 100644 index 00000000..2321d313 --- /dev/null +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt @@ -0,0 +1,22 @@ +# h,sigma_h,Fi,sigma_Fi,Ff,sigma_Ff +4.5,0.5,1018,1,1083,1 +4.5,0.5,1189,1,1248,1 +4.5,0.5,1340,1,1404,1 +10,0.5,596,1,636,1 +10,0.5,762,1,801,1 +10,0.5,882,1,921,1 +15,0.5,574,1,605,1 +15,0.5,766,1,798,1 +15,0.5,863,1,896,1 +20,0.5,679,1,707,1 +20,0.5,810,1,838,1 +20,0.5,930,1,959,1 +25,0.5,650,1,674,1 +25,0.5,892,1,917,1 +25,0.5,804,1,827,1 +30,0.5,642,1,664,1 +30,0.5,739,1,760,1 +30,0.5,900,1,922,1 + +# Messreihe: Zylinder +# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt new file mode 100644 index 00000000..add88808 --- /dev/null +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt @@ -0,0 +1,4 @@ +# fps,sigma_fps +30,0 +# Framerate der Videoaufnahmen +# Frames per second (fps / 1/s) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt new file mode 100644 index 00000000..48b54cb9 --- /dev/null +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt @@ -0,0 +1,5 @@ +#m,sigma_m,U,sigma_U +216,1,30.5,0.1 + +# Messdaten der Kugel: Vollkugel +# Umfang (U/cm), Masse (m/g) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt new file mode 100644 index 00000000..d9d19ddf --- /dev/null +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt @@ -0,0 +1,5 @@ +#m,sigma_m,U,sigma_U,d,sigma_d +186,1,24.3,0.1,3,1 + +# Messdaten des Zylinders: Hohlzylinder mit Boden aber ohne Deckel +# Umfang (U/cm), Masse (m/g), Wanddicke (Differenz zwischen Innen- und Außenradius) (d/mm) From ed12c3e0318bba86aadc324a7ad2682e30b97367 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 17:49:32 +0200 Subject: [PATCH 30/48] removed the uncertianties from this first step --- .../vorlage/v16516/data/Messwerte_Bahn.txt | 6 +-- .../v16516/data/Messwerte_Frames_Kugel.txt | 40 +++++++++--------- .../v16516/data/Messwerte_Frames_Zylinder.txt | 41 +++++++++---------- .../vorlage/v16516/data/Messwerte_Kamera.txt | 4 +- .../vorlage/v16516/data/Messwerte_Kugel.txt | 6 +-- .../v16516/data/Messwerte_Zylinder.txt | 6 +-- 6 files changed, 45 insertions(+), 58 deletions(-) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt index cc6a4720..47b1b6b7 100644 --- a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt @@ -1,4 +1,2 @@ -# l,sigma_l -80,0.5 -# Länge der Bahn -# cm (l / cm) +# l +80 diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt index 91bc58b6..aef1c76c 100644 --- a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt @@ -1,21 +1,19 @@ -# h,sigma_h,Fi,sigma_Fi,Ff,sigma_Ff -4.5,0.5,436,1,492,1 -4.5,0.5,555,1,610,1 -4.5,0.5,672,1,729,1 -10,0.5,95,1,130,1 -10,0.5,199,1,235,1 -10,0.5,303,1,338,1 -15,0.5,91,1,119,1 -15,0.5,201,1,229,1 -15,0.5,335,1,362,1 -20,0.5,232,1,256,1 -20,0.5,323,1,347,1 -20,0.5,397,1,421,1 -25,0.5,153,1,174,1 -25,0.5,239,1,260,1 -25,0.5,322,1,343,1 -30,0.5,219,1,238,1 -30,0.5,319,1,338,1 -30,0.5,391,1,412,1 -# Messreihe: Kugel -# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) +# 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 diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt index 2321d313..d51023f6 100644 --- a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt @@ -1,22 +1,19 @@ -# h,sigma_h,Fi,sigma_Fi,Ff,sigma_Ff -4.5,0.5,1018,1,1083,1 -4.5,0.5,1189,1,1248,1 -4.5,0.5,1340,1,1404,1 -10,0.5,596,1,636,1 -10,0.5,762,1,801,1 -10,0.5,882,1,921,1 -15,0.5,574,1,605,1 -15,0.5,766,1,798,1 -15,0.5,863,1,896,1 -20,0.5,679,1,707,1 -20,0.5,810,1,838,1 -20,0.5,930,1,959,1 -25,0.5,650,1,674,1 -25,0.5,892,1,917,1 -25,0.5,804,1,827,1 -30,0.5,642,1,664,1 -30,0.5,739,1,760,1 -30,0.5,900,1,922,1 - -# Messreihe: Zylinder -# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) +#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 diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt index add88808..7fe7a21e 100644 --- a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt @@ -1,4 +1,2 @@ -# fps,sigma_fps +# fps 30,0 -# Framerate der Videoaufnahmen -# Frames per second (fps / 1/s) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt index 48b54cb9..a3b4ac8c 100644 --- a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt @@ -1,5 +1,3 @@ -#m,sigma_m,U,sigma_U -216,1,30.5,0.1 +#m,U +216,30.5 -# Messdaten der Kugel: Vollkugel -# Umfang (U/cm), Masse (m/g) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt index d9d19ddf..97b96d6e 100644 --- a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt @@ -1,5 +1,3 @@ -#m,sigma_m,U,sigma_U,d,sigma_d -186,1,24.3,0.1,3,1 +#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) From 45f96b9517e5dd285db8d431e1109bf786416486 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Fri, 20 Sep 2024 18:39:02 +0200 Subject: [PATCH 31/48] fix calculation for cylinder MoI --- .../loesung/v16516/auswertung.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py index eda9c935..3b47c43c 100644 --- a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py +++ b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py @@ -75,9 +75,9 @@ m_C = cylinder_mass = unc.ufloat(cylinder["m"],cylinder["sigma_m"])/1000 # kg U_C = cylinder_perimeter = unc.ufloat(cylinder["U"],cylinder["sigma_U"])/100 #m d_C = cylinder_thickness = unc.ufloat(cylinder["d"],cylinder["sigma_d"])/1000 #m -Ri_C = cylinder_radius_inner = cylinder_perimeter / (2 * np.pi) -Ro_C = cylinder_radius_outer = cylinder_radius_inner + cylinder_thickness -I_C = ball_momentinertia = 1/2 * m_C * (Ro_C**2 + Ri_C**2) +Ro_C = cylinder_radius_outer = cylinder_perimeter / (2 * np.pi) +Ri_C = cylinder_radius_inner = cylinder_radius_outer - cylinder_thickness +I_C = cylinder_momentinertia = 1/2 * m_C * (Ro_C**2 + Ri_C**2) h_C = heights_cylinder = unp.uarray(measurements_cylinder["h"], measurements_cylinder["sigma_h"])/100 # m fi_C = initalframes_cylinder = unp.uarray(measurements_cylinder["Fi"], measurements_cylinder["sigma_Fi"]) # 1 From 88e95613b1f842bdd3e57111051fcd0820e72792 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 10:48:11 +0200 Subject: [PATCH 32/48] add second step for the example lab report --- .../aufgabe.txt | 19 ++++ .../loesung/v16516/auswertung.py | 103 ++++++++++++++++++ .../loesung/v16516/data/Messwerte_Bahn.txt | 2 + .../v16516/data/Messwerte_Frames_Kugel.txt | 19 ++++ .../v16516/data/Messwerte_Frames_Zylinder.txt | 19 ++++ .../loesung/v16516/data/Messwerte_Kamera.txt | 2 + .../loesung/v16516/data/Messwerte_Kugel.txt | 3 + .../v16516/data/Messwerte_Zylinder.txt | 3 + 8 files changed, 170 insertions(+) create mode 100644 exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/aufgabe.txt create mode 100644 exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py create mode 100644 exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt create mode 100644 exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt create mode 100644 exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt create mode 100644 exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt create mode 100644 exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt create mode 100644 exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/aufgabe.txt new file mode 100644 index 00000000..d9bcbfc0 --- /dev/null +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/aufgabe.txt @@ -0,0 +1,19 @@ +# 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', leßt 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 des herabrollens für die beiden Messreihen +4. Gebt auch diese berechneten Werte auf das Terminal aus, um diese zu überprüfen diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py new file mode 100644 index 00000000..05fc9570 --- /dev/null +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py @@ -0,0 +1,103 @@ +# 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: +# Eine gewisses Maß an Struktur in der Benennung von Variablen hilft bei der Orientierung, +# garade 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 + +print("Messwerte (Ball)") +print("Zeit") +print(t_b) + +print("Höhe") +print(h_b) +print("\n") +print("Messwerte (Zylinder)") +print("Zeit") +print(t_c) +print("Höhe") +print(h_c) + + + diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt new file mode 100644 index 00000000..47b1b6b7 --- /dev/null +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt @@ -0,0 +1,2 @@ +# l +80 diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt new file mode 100644 index 00000000..aef1c76c --- /dev/null +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt @@ -0,0 +1,19 @@ +# 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 diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt new file mode 100644 index 00000000..d51023f6 --- /dev/null +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt @@ -0,0 +1,19 @@ +#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 diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt new file mode 100644 index 00000000..f39bcc58 --- /dev/null +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt @@ -0,0 +1,2 @@ +# fps +30 diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt new file mode 100644 index 00000000..a3b4ac8c --- /dev/null +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt @@ -0,0 +1,3 @@ +#m,U +216,30.5 + diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt new file mode 100644 index 00000000..97b96d6e --- /dev/null +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt @@ -0,0 +1,3 @@ +#m,U,d +186,24.3,3 + From 33ad874dedc033949a51fd726b224239e46f4078 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 10:48:29 +0200 Subject: [PATCH 33/48] fix camera measurments --- .../vorlage/v16516/data/Messwerte_Kamera.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt index 7fe7a21e..f39bcc58 100644 --- a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt @@ -1,2 +1,2 @@ # fps -30,0 +30 From ba970363dc569e27c3133f3bf6012565b05a6c2a Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 10:58:11 +0200 Subject: [PATCH 34/48] readd missing footer for unit information --- .../vorlage/v16516/data/Messwerte_Bahn.txt | 2 ++ .../vorlage/v16516/data/Messwerte_Frames_Kugel.txt | 2 ++ .../vorlage/v16516/data/Messwerte_Frames_Zylinder.txt | 2 ++ .../vorlage/v16516/data/Messwerte_Kamera.txt | 2 ++ .../vorlage/v16516/data/Messwerte_Kugel.txt | 2 ++ .../vorlage/v16516/data/Messwerte_Zylinder.txt | 2 ++ .../loesung/v16516/data/Messwerte_Bahn.txt | 2 ++ .../loesung/v16516/data/Messwerte_Frames_Kugel.txt | 2 ++ .../loesung/v16516/data/Messwerte_Frames_Zylinder.txt | 2 ++ .../loesung/v16516/data/Messwerte_Kamera.txt | 2 ++ .../loesung/v16516/data/Messwerte_Kugel.txt | 2 ++ .../loesung/v16516/data/Messwerte_Zylinder.txt | 2 ++ 12 files changed, 24 insertions(+) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt index 47b1b6b7..bc860551 100644 --- a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt @@ -1,2 +1,4 @@ # l 80 +# Länge der Bahn +# cm (l / cm) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt index aef1c76c..72cb5208 100644 --- a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt @@ -17,3 +17,5 @@ 30,219,238 30,319,338 30,391,412 +# Messreihe: Kugel +# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt index d51023f6..245c87d2 100644 --- a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt @@ -17,3 +17,5 @@ 30,642,664 30,739,760 30,900,922 +# Messreihe: Zylinder +# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt index f39bcc58..1b429402 100644 --- a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt @@ -1,2 +1,4 @@ # fps 30 +# Framerate der Videoaufnahmen +# Frames per second (fps / 1/s) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt index a3b4ac8c..1dc033ed 100644 --- a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt @@ -1,3 +1,5 @@ #m,U 216,30.5 +# Messdaten der Kugel: Vollkugel +# Umfang (U/cm), Masse (m/g) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt index 97b96d6e..6ba4a540 100644 --- a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt +++ b/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt @@ -1,3 +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) diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt index 47b1b6b7..bc860551 100644 --- a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt @@ -1,2 +1,4 @@ # l 80 +# Länge der Bahn +# cm (l / cm) diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt index aef1c76c..72cb5208 100644 --- a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt @@ -17,3 +17,5 @@ 30,219,238 30,319,338 30,391,412 +# Messreihe: Kugel +# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt index d51023f6..245c87d2 100644 --- a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt @@ -17,3 +17,5 @@ 30,642,664 30,739,760 30,900,922 +# Messreihe: Zylinder +# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt index f39bcc58..1b429402 100644 --- a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt @@ -1,2 +1,4 @@ # fps 30 +# Framerate der Videoaufnahmen +# Frames per second (fps / 1/s) diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt index a3b4ac8c..1dc033ed 100644 --- a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt @@ -1,3 +1,5 @@ #m,U 216,30.5 +# Messdaten der Kugel: Vollkugel +# Umfang (U/cm), Masse (m/g) diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt index 97b96d6e..6ba4a540 100644 --- a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt @@ -1,3 +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) From 5a1242a2b71fb6725325b23c5a7d4dd6eceb2a99 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 11:51:54 +0200 Subject: [PATCH 35/48] add subtask of calculating the mean --- .../aufgabe.txt | 2 + .../loesung/v16516/auswertung.py | 76 ++++++++++++++++--- 2 files changed, 69 insertions(+), 9 deletions(-) diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/aufgabe.txt index d9bcbfc0..64ffb074 100644 --- a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/aufgabe.txt +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/aufgabe.txt @@ -17,3 +17,5 @@ einzulesen und zu verarbeiten. - Trägheitsmoment I von Ball und Zylinder - Zeitdauern t des herabrollens für die beiden Messreihen 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 diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py index 05fc9570..d3b8a949 100644 --- a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py +++ b/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py @@ -86,18 +86,76 @@ t_b = (Ff_b - Fi_b)/fps t_c = (Ff_c - Fi_c)/fps -print("Messwerte (Ball)") -print("Zeit") -print(t_b) +# Berechnung des Mittelwerts für die Zeitdauer t für jede (dreifach gemessene) Höhe -print("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 Anweisungs, 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("Zeit") +print("alle Höhen") +print(h_c) +print("alle Zeiten") print(t_c) print("Höhe") -print(h_c) - - - +print(h_c_mean) +print("gemittlelte Zeit") +print(t_c_mean) From 39ce28c2dda98f334d15f42f9a6f537be6652e0c Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 12:29:08 +0200 Subject: [PATCH 36/48] add third step for the example lab report --- .../aufgabe.txt | 29 +++ .../loesung/v16515/auswertung.py | 196 ++++++++++++++++++ .../loesung/v16515/data/Messwerte_Bahn.txt | 4 + .../v16515/data/Messwerte_Frames_Kugel.txt | 21 ++ .../v16515/data/Messwerte_Frames_Zylinder.txt | 21 ++ .../loesung/v16515/data/Messwerte_Kamera.txt | 4 + .../loesung/v16515/data/Messwerte_Kugel.txt | 5 + .../v16515/data/Messwerte_Zylinder.txt | 5 + 8 files changed, 285 insertions(+) create mode 100644 exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/aufgabe.txt create mode 100644 exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py create mode 100644 exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Bahn.txt create mode 100644 exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Kugel.txt create mode 100644 exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Zylinder.txt create mode 100644 exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kamera.txt create mode 100644 exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kugel.txt create mode 100644 exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Zylinder.txt diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/aufgabe.txt new file mode 100644 index 00000000..b29c1438 --- /dev/null +++ b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/aufgabe.txt @@ -0,0 +1,29 @@ +# 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. + +Zusatzaufgabe: +Die Berechnung von Ausgleichskurven wird erst durch eine weitere Bibliothek (scipy) möglich. +Jedoch könnt ihr den Verlauf der theoretischen Kurven bereits in die Plots einzeichnen. + +1. Schreibt jeweils eine Python-Funktion für die Gleichungen t_B(h) und t_Z(h) (Gleichungen 4 und 5 im Protokoll) + Als Wert für g könnt ihr 9.81 verwenden (auch dafür wird scipy noch eine bessere Lösung sein) +2. Erstellt mit np.linspace ein array mit vielen Werten die für den Plot der Theoriekurven verwendert werden können. + (da matplotlib im Prinzip einzelne Punkte zeichnet bzw. diese mit Geraden verbindet, braucht man für Theoriekurven + sehr viele Punkte und kann nicht einfach nur die Messwerte für h verwenden.) +3. Ergänzt die Theoriekurven im jeweiligen plot der Messwerte. + + + diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py new file mode 100644 index 00000000..10179aa1 --- /dev/null +++ b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py @@ -0,0 +1,196 @@ +import numpy as np +# Kommentar: +# Importiere matplotlib.pyplot dem Namen plt + +import matplotlib.pyplot as plt + +# 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 + +# 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 + + +# 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 + +t_b_mean = t_b.reshape(-1,3).mean(axis=1) +h_b_mean = h_b.reshape(-1,3)[:,0] +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) + + +# Erstelle Plots der Messwerte t_._mean und h_._mean + +# Kommentar: +# Erstellen einer figure mit einem subplot darin (1 Zeile x 1 Spalte an subplots) + +fig, ax = plt.subplots(1, 1, layout="constrained") + +# Kommentar: +# Einstellung der Achsenbeschriftungen + +ax.set_xlabel("$h$ / m") +ax.set_ylabel("$t$ / s") + +# Kommentar: +# Darstellen der Messwerte mit Legendeneintrag + +ax.plot(h_b_mean, t_b_mean, "k+", label="Daten: Kugel") +ax.legend() +fig.savefig("plot_kugel.pdf") + + + +# Kommentar: +# Erstellen einer figure mit einem subplot darin (1 Zeile x 1 Spalte an subplots) + +fig, ax = plt.subplots(1, 1, layout="constrained") + +# Kommentar: +# Einstellung der Achsenbeschriftungen + +ax.set_xlabel("$h$ / m") +ax.set_ylabel("$t$ / s") + +# Kommentar: +# Darstellen der Messwerte mit Legendeneintrag + +ax.plot(h_c_mean, t_c_mean, "k+", label="Daten: Zylinder") +ax.legend() +fig.savefig("plot_zylinder.pdf") + + +# (Zusatzaufgabe) Erstelle Plots der Messwerte t_._mean und h_._mean mit Theoriekurve + + + + +# Kommentar: +# Funktionen für die Funktionsgleichungen der Theoriekurven +# In Funktionen können Variablen verwendet werden, die außerhalb (global) definiert wurden +# wie hier: l, ri_c und ro_c +# Solche golbalen Variablen können bei größeren Skripten/Programmen zu einem Problem werden +# es ist also zumindest Vorsicht geboten + +def theory_t_ball(h): + return np.sqrt(7/5 * 1/h * 2* l/9.81) + +def theory_t_cylinder(h): + return np.sqrt((3 + ri_c**2/ro_c**2) * l**2/9.81 * 1/h) + +# Kommentar: +# Die Werte für h die im Plot der Theoriekurven verwendet werden, damit diese +# auch tatsächlich aussieht wie eine differenzierbare Funktion +# Der Bereich in dem diese Werte liegen entspricht aber dem der Messwerte ca. [0.03, 0.33] + +h_plot = np.linspace(0.03, 0.33, 205) + +fig, ax = plt.subplots(1, 1, layout="constrained") + +# Kommentar: +# Einstellung der Achsenbeschriftungen + +ax.set_xlabel("$h$ / m") +ax.set_ylabel("$t$ / s") + + +ax.plot(h_b_mean, t_b_mean, "k+", label="Daten: Kugel") +# Kommentar: +# Darstellen der Messwerte mit Legendeneintrag +ax.plot(h_plot, theory_t_ball(h_plot), label="Theorie") +ax.legend() +fig.savefig("plot_kugel_zusatz.pdf") + + + +# Kommentar: +# Erstellen einer figure mit einem subplot darin (1 Zeile x 1 Spalte an subplots) + +fig, ax = plt.subplots(1, 1, layout="constrained") + +# Kommentar: +# Einstellung der Achsenbeschriftungen + +ax.set_xlabel("$h$ / m") +ax.set_ylabel("$t$ / s") + +# Kommentar: +# Darstellen der Messwerte mit Legendeneintrag + +ax.plot(h_c_mean, t_c_mean, "k+", label="Daten: Zylinder") +ax.plot(h_plot, theory_t_cylinder(h_plot), label="Theorie") +ax.legend() +fig.savefig("plot_zylinder_zusatz.pdf") + diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Bahn.txt b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Bahn.txt new file mode 100644 index 00000000..bc860551 --- /dev/null +++ b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Bahn.txt @@ -0,0 +1,4 @@ +# l +80 +# Länge der Bahn +# cm (l / cm) diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Kugel.txt new file mode 100644 index 00000000..72cb5208 --- /dev/null +++ b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Kugel.txt @@ -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) diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Zylinder.txt new file mode 100644 index 00000000..245c87d2 --- /dev/null +++ b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Zylinder.txt @@ -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) diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kamera.txt b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kamera.txt new file mode 100644 index 00000000..1b429402 --- /dev/null +++ b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kamera.txt @@ -0,0 +1,4 @@ +# fps +30 +# Framerate der Videoaufnahmen +# Frames per second (fps / 1/s) diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kugel.txt b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kugel.txt new file mode 100644 index 00000000..1dc033ed --- /dev/null +++ b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kugel.txt @@ -0,0 +1,5 @@ +#m,U +216,30.5 + +# Messdaten der Kugel: Vollkugel +# Umfang (U/cm), Masse (m/g) diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Zylinder.txt b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Zylinder.txt new file mode 100644 index 00000000..6ba4a540 --- /dev/null +++ b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Zylinder.txt @@ -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) From 89c2055ecd959e4cb45aa8bf44562b66093c8a2f Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 12:29:59 +0200 Subject: [PATCH 37/48] fix inconsitencies to prior steps --- .../loesung/v16516/auswertung.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py index 3b47c43c..33a72782 100644 --- a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py +++ b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py @@ -105,7 +105,7 @@ def fit_g_ball(h, g, t0): # plotting data an fit -h_plot = np.linspace(0.01,0.35, 1000) +h_plot = np.linspace(0.03,0.33, 1000) fig, ax = plt.subplots(1, 1, layout="constrained") ax.errorbar( @@ -143,7 +143,7 @@ def fit_g_cylinder(h, g, t0): # plotting data an fit -h_plot = np.linspace(0.01,0.35, 1000) +h_plot = np.linspace(0.03,0.33, 1000) fig, ax = plt.subplots(1, 1, layout="constrained") ax.errorbar( @@ -187,7 +187,7 @@ def fit_I_ball(h, I, t0): print(params) # plotting data an fit -h_plot = np.linspace(0.01,0.35, 1000) +h_plot = np.linspace(0.03,0.33, 1000) fig, ax = plt.subplots(1, 1, layout="constrained") ax.errorbar( @@ -226,7 +226,7 @@ def fit_I_cylinder(h, I, t0): # plotting data an fit -h_plot = np.linspace(0.01,0.35, 1000) +h_plot = np.linspace(0.03,0.33, 1000) fig, ax = plt.subplots(1, 1, layout="constrained") ax.errorbar( From b9608c90878e2b4a285a9edc5f91058339839229 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 12:40:36 +0200 Subject: [PATCH 38/48] changed additional-tasks to subtasks --- .../aufgabe.txt | 7 ++- .../loesung/v16515/auswertung.py | 52 +++---------------- 2 files changed, 9 insertions(+), 50 deletions(-) diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/aufgabe.txt index b29c1438..341bf407 100644 --- a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/aufgabe.txt +++ b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/aufgabe.txt @@ -14,16 +14,15 @@ Erstellt für jede Messreihe (Kugel, Zylinder) jeweils eine Abbildung: 2. Erstellt jeweils eine Abbildung mit einem subplot, in dem die Messwerte (die berechneten Mittelwerte) als schwarze '+' dargestellt werden. -Zusatzaufgabe: Die Berechnung von Ausgleichskurven wird erst durch eine weitere Bibliothek (scipy) möglich. Jedoch könnt ihr den Verlauf der theoretischen Kurven bereits in die Plots einzeichnen. -1. Schreibt jeweils eine Python-Funktion für die Gleichungen t_B(h) und t_Z(h) (Gleichungen 4 und 5 im Protokoll) +3. Schreibt jeweils eine Python-Funktion für die Gleichungen t_B(h) und t_Z(h) (Gleichungen 4 und 5 im Protokoll) Als Wert für g könnt ihr 9.81 verwenden (auch dafür wird scipy noch eine bessere Lösung sein) -2. Erstellt mit np.linspace ein array mit vielen Werten die für den Plot der Theoriekurven verwendert werden können. +4. Erstellt mit np.linspace ein array mit vielen Werten die für den Plot der Theoriekurven verwendert werden können. (da matplotlib im Prinzip einzelne Punkte zeichnet bzw. diese mit Geraden verbindet, braucht man für Theoriekurven sehr viele Punkte und kann nicht einfach nur die Messwerte für h verwenden.) -3. Ergänzt die Theoriekurven im jeweiligen plot der Messwerte. +5. Ergänzt die Theoriekurven im jeweiligen plot der Messwerte. diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py index 10179aa1..130aff7b 100644 --- a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py +++ b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py @@ -93,50 +93,6 @@ # Erstelle Plots der Messwerte t_._mean und h_._mean -# Kommentar: -# Erstellen einer figure mit einem subplot darin (1 Zeile x 1 Spalte an subplots) - -fig, ax = plt.subplots(1, 1, layout="constrained") - -# Kommentar: -# Einstellung der Achsenbeschriftungen - -ax.set_xlabel("$h$ / m") -ax.set_ylabel("$t$ / s") - -# Kommentar: -# Darstellen der Messwerte mit Legendeneintrag - -ax.plot(h_b_mean, t_b_mean, "k+", label="Daten: Kugel") -ax.legend() -fig.savefig("plot_kugel.pdf") - - - -# Kommentar: -# Erstellen einer figure mit einem subplot darin (1 Zeile x 1 Spalte an subplots) - -fig, ax = plt.subplots(1, 1, layout="constrained") - -# Kommentar: -# Einstellung der Achsenbeschriftungen - -ax.set_xlabel("$h$ / m") -ax.set_ylabel("$t$ / s") - -# Kommentar: -# Darstellen der Messwerte mit Legendeneintrag - -ax.plot(h_c_mean, t_c_mean, "k+", label="Daten: Zylinder") -ax.legend() -fig.savefig("plot_zylinder.pdf") - - -# (Zusatzaufgabe) Erstelle Plots der Messwerte t_._mean und h_._mean mit Theoriekurve - - - - # Kommentar: # Funktionen für die Funktionsgleichungen der Theoriekurven # In Funktionen können Variablen verwendet werden, die außerhalb (global) definiert wurden @@ -157,6 +113,10 @@ def theory_t_cylinder(h): h_plot = np.linspace(0.03, 0.33, 205) + +# Kommentar: +# Erstellen einer figure mit einem subplot darin (1 Zeile x 1 Spalte an subplots) + fig, ax = plt.subplots(1, 1, layout="constrained") # Kommentar: @@ -171,7 +131,7 @@ def theory_t_cylinder(h): # Darstellen der Messwerte mit Legendeneintrag ax.plot(h_plot, theory_t_ball(h_plot), label="Theorie") ax.legend() -fig.savefig("plot_kugel_zusatz.pdf") +fig.savefig("plot_kugel.pdf") @@ -192,5 +152,5 @@ def theory_t_cylinder(h): ax.plot(h_c_mean, t_c_mean, "k+", label="Daten: Zylinder") ax.plot(h_plot, theory_t_cylinder(h_plot), label="Theorie") ax.legend() -fig.savefig("plot_zylinder_zusatz.pdf") +fig.savefig("plot_zylinder.pdf") From 9398a60d6a7fc3f317502bf3253de688af070b48 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 13:51:39 +0200 Subject: [PATCH 39/48] add fourth step for the example lab report --- .../aufgabe.txt | 0 .../loesung/aufgabe.txt | 35 +++ .../loesung/v16515/auswertung.py | 269 ++++++++++++++++++ .../loesung/v16515/data/Messwerte_Bahn.txt | 4 + .../v16515/data/Messwerte_Frames_Kugel.txt | 21 ++ .../v16515/data/Messwerte_Frames_Zylinder.txt | 21 ++ .../loesung/v16515/data/Messwerte_Kamera.txt | 4 + .../loesung/v16515/data/Messwerte_Kugel.txt | 5 + .../v16515/data/Messwerte_Zylinder.txt | 5 + 9 files changed, 364 insertions(+) create mode 100644 exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/aufgabe.txt create mode 100644 exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/aufgabe.txt create mode 100644 exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py create mode 100644 exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Bahn.txt create mode 100644 exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Kugel.txt create mode 100644 exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Zylinder.txt create mode 100644 exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kamera.txt create mode 100644 exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kugel.txt create mode 100644 exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Zylinder.txt diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/aufgabe.txt new file mode 100644 index 00000000..e69de29b diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/aufgabe.txt b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/aufgabe.txt new file mode 100644 index 00000000..43eb4fb0 --- /dev/null +++ b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/aufgabe.txt @@ -0,0 +1,35 @@ +# 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 scipy könnt ihr nun die Theorie-Funktionen aus der letzten Aufgabe +zu Fit-Funktionen abändern und so physikalische Größen als Fit-Parameter bestimmen. + +1. Ändert die Theorie-Funktionen aus der letzten Aufgabe zu Fit-Funktionen, diese benötigen + zusätzliche Argumente für die Fit-Parameter. Und diese Fit-Parameter müssen auch in der + Funktion verwendet werden. Konkret: + - Die Fallbeschleunigung g die in der letzten Aufgabe als 9.81 angenommen wurde ist jetzt ein + Fit-Parameter g + - Außerdem ist noch ein weiterer Parameter t0 nötig, wie ihr dem finalen Beispielprotokoll entnehmen könnt. + +2. Importiert die Funktion curve_fit aus scypy.optimize + +3. Für jede der beiden Messreihen: + Verwendet curve_fit, um aus den gemittelten Messwerten für Höhe und Zeit die beiden Fit-Parameter + zu berechnen. + +4. Gebt die Parameter mit ihrer zugehörigen Unsicherheit auf das Terminal aus. + +5. Entfernt die Theorie-Funktionen aus den Plots und fügt stattdessen die Fit-Funktionen + mit den berechneten Parametern hinzu + +6. Im finalen Beispielprotokoll wurden auch das Trägheitsmoment der Objekte durch einen weiteren + Fit bestimmt (dabei ist dann der Theoriewert von g anzunehmen). + Ergäzt die notwendigen Fit-Funktionen und Plots für diesen Auswertungsschritt in dem ihr die + vorangegangenen Schritte für diesen Fit wiederholt. + diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py new file mode 100644 index 00000000..4eb6cd96 --- /dev/null +++ b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py @@ -0,0 +1,269 @@ +import numpy as np + +import matplotlib.pyplot as plt + +# Kommentar: +# Importiere curve_fit aus scipy.optimize +from scipy.optimize import curve_fit +from scipy.constants import physical_constants + +# 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 + +# 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 + + +# 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 + +t_b_mean = t_b.reshape(-1,3).mean(axis=1) +h_b_mean = h_b.reshape(-1,3)[:,0] +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) +print("\n") + +# Erstelle Plots der Messwerte t_._mean und h_._mean + + +# Kommentar: +# Umwandeln der Theorie-Funktion zu einer Fitfunktion: +# Die Funktion erhält ein zusätzliches Argument für jeden Fitparameter, hier: g und t0 +# diese müssen auch in der Funktion verwendet werden. +# +# Namen sind wie immer beliebig und es gibt nicht "den einen richtigen Namen", +# aber es bietet sich wie immer an sprechende Namen zu verwenden, hier z.B. +# "fit_g_ball" als Abkürzung für "Fitfunktion für den Parameter g aus den Messwerten für die Kugel" + +def fit_g_ball(h, g, t0): + return np.sqrt(7/5 * 1/h * 2* l/g) + t0 + +def fit_g_cylinder(h, g, t0): + return np.sqrt((3 + ri_c**2/ro_c**2) * l**2/g * 1/h) + t0 + + +# Kommentar: +# Hier ist Vorsicht geboten, da die Fit-Funktion und Messwerte zusammen passen müssen +# an solchen Stellen zahlt sich eine konsistente Benennung aus. +# Berechnung der Fitparameter für die Kugel +params, covariance_matrix = curve_fit(fit_g_ball, h_b_mean, t_b_mean) +param_uncertainties = np.sqrt(np.diag(covariance_matrix)) + + +# Kommentar: +# Ansehnliche Ausgabe der Parameter aufs Terminal +print("Fitparameter (Kugel)") +for name, value, uncertainty in zip("gt", params, param_uncertainties): + print(f"{name} = {value:8.3f} ± {uncertainty:.3f}") +print("\n") + + +h_plot = np.linspace(0.03, 0.33, 205) + + +# Fit Parameter für den Zylinder + + +fig, ax = plt.subplots(1, 1, layout="constrained") + + +ax.set_xlabel("$h$ / m") +ax.set_ylabel("$t$ / s") + + +# Kommentar: +# Theorie-Funktion durch Fit-Funktion mit Fit-Parametern ersetzen + +ax.plot(h_b_mean, t_b_mean, "k+", label="Daten: Kugel") +ax.plot(h_plot, fit_g_ball(h_plot, *params), label="Fit") +ax.legend() +fig.savefig("plot-g_kugel.pdf") + + + +# Kommentar: +# Analog für die Messreihe des Zylinders +# Achtung! Copy und Paste ist natürlich gängige Praxis, +# aber alle Varialben müssen angepasst werden. + +# Berechnung der Fitparameter für den Zylinder +params, covariance_matrix = curve_fit(fit_g_cylinder, h_c_mean, t_c_mean) +param_uncertainties = np.sqrt(np.diag(covariance_matrix)) + + +print("Fitparameter (Zylinder)") +for name, value, uncertainty in zip("gt", params, param_uncertainties): + print(f"{name} = {value:8.3f} ± {uncertainty:.3f}") +print("\n") + + +fig, ax = plt.subplots(1, 1, layout="constrained") + +ax.set_xlabel("$h$ / m") +ax.set_ylabel("$t$ / s") + + +ax.plot(h_c_mean, t_c_mean, "k+", label="Daten: Zylinder") +ax.plot(h_plot, fit_g_cylinder(h_plot, *params), label="Fit") +ax.legend() +fig.savefig("plot-g_zylinder.pdf") + + + +# Kommentar: +# Verwenden der physikalischen Konstanten aus scipy +# hier: g +# physical_constants enthält 3er-tuple, der erste Eintrag +# der tuple ist der Wert der Konstante, deswegen [0] + +def fit_I_ball(h, I, t0): + g = physical_constants["standard acceleration of gravity"][0] + return np.sqrt(2/g * 1/h * l**2 * (1 + I/(m_b * r_b**2)) ) + t0 + + +def fit_I_cylinder(h, I, t0): + g = physical_constants["standard acceleration of gravity"][0] + return np.sqrt(2/g * 1/h * l**2 * (1 + I/(m_c * ro_c**2) )) + t0 + + +# Kommentar: +# Durch den Fit wird diese Warnung auf das Terminal ausgegeben: +# .../v16515/auswertung.py:197: RuntimeWarning: invalid value encountered in sqrt +# return np.sqrt(2/g * 1/h * l**2 * (1 + I/(m_c * ro_c**2) )) + t0 +# +# Diese bedeutet, dass während des Fits negative Werte für I 'ausprobiert' wurden, +# von denen die Wurzel nicht berechnet werden konnte. +# Man kann das verhindern, in dem man die Parameter auf den physikalisch möglichen +# Bereich einschränkt. Dies tut man mit dem zusätzlichen Parameter bounds für curve_fit, +# hier müsste +# bounds=([0,-np.inf],[+np.inf,+np.inf]) +# als zusätzliches Argument für curve_fit ergänzt werden. +# bounds gibt den minimalen und den maximalen Wert für alle Parameter an, +# und zwar zuerst alle Minimima und dann alle Maxima, +# in diesem konkrete Beispiel steht bounds also für: 0 < I < +np.inf und -np.inf < t0 < +np.inf + + +# Berechnung der Fitparameter für die Kugel +params, covariance_matrix = curve_fit(fit_I_ball, h_b_mean, t_b_mean) +param_uncertainties = np.sqrt(np.diag(covariance_matrix)) + + +print("Fitparameter (Kugel)") +for name, value, uncertainty in zip("It", params, param_uncertainties): + # in kg*m² sehr klein, umwandlung zu kg*cm² + if name == "I": + value *= 10000 + uncertainty *= 10000 + print(f"{name} = {value:8.3f} ± {uncertainty:.3f}") +print("\n") + + +fig, ax = plt.subplots(1, 1, layout="constrained") + +ax.set_xlabel("$h$ / m") +ax.set_ylabel("$t$ / s") + + +ax.plot(h_c_mean, t_c_mean, "k+", label="Daten: Kugel") +ax.plot(h_plot, fit_I_cylinder(h_plot, *params), label="Fit") +ax.legend() +fig.savefig("plot-I_kugel.pdf") + + +# Berechnung der Fitparameter für den Zylinder +params, covariance_matrix = curve_fit(fit_I_cylinder, h_c_mean, t_c_mean) +param_uncertainties = np.sqrt(np.diag(covariance_matrix)) + + +print("Fitparameter (Zylinder)") +for name, value, uncertainty in zip("It", params, param_uncertainties): + # in kg*m² sehr klein, umwandlung zu kg*cm² + if name == "I": + value *= 10000 + uncertainty *= 10000 + print(f"{name} = {value:8.3f} ± {uncertainty:.3f}") +print("\n") + + + +fig, ax = plt.subplots(1, 1, layout="constrained") + +ax.set_xlabel("$h$ / m") +ax.set_ylabel("$t$ / s") + + +ax.plot(h_c_mean, t_c_mean, "k+", label="Daten: Zylinder") +ax.plot(h_plot, fit_I_cylinder(h_plot, *params), label="Fit") +ax.legend() +fig.savefig("plot-I_zylinder.pdf") diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Bahn.txt b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Bahn.txt new file mode 100644 index 00000000..bc860551 --- /dev/null +++ b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Bahn.txt @@ -0,0 +1,4 @@ +# l +80 +# Länge der Bahn +# cm (l / cm) diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Kugel.txt new file mode 100644 index 00000000..72cb5208 --- /dev/null +++ b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Kugel.txt @@ -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) diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Zylinder.txt new file mode 100644 index 00000000..245c87d2 --- /dev/null +++ b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Zylinder.txt @@ -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) diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kamera.txt b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kamera.txt new file mode 100644 index 00000000..1b429402 --- /dev/null +++ b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kamera.txt @@ -0,0 +1,4 @@ +# fps +30 +# Framerate der Videoaufnahmen +# Frames per second (fps / 1/s) diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kugel.txt b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kugel.txt new file mode 100644 index 00000000..1dc033ed --- /dev/null +++ b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kugel.txt @@ -0,0 +1,5 @@ +#m,U +216,30.5 + +# Messdaten der Kugel: Vollkugel +# Umfang (U/cm), Masse (m/g) diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Zylinder.txt b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Zylinder.txt new file mode 100644 index 00000000..6ba4a540 --- /dev/null +++ b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Zylinder.txt @@ -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) From d7ec6ce57e7fd5d2916dc7f42c66331f47d1c6a3 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 13:56:25 +0200 Subject: [PATCH 40/48] moved missplaced aufgabe.txt --- .../aufgabe.txt | 35 +++++++++++++++++++ .../loesung/aufgabe.txt | 35 ------------------- 2 files changed, 35 insertions(+), 35 deletions(-) delete mode 100644 exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/aufgabe.txt diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/aufgabe.txt index e69de29b..43eb4fb0 100644 --- a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/aufgabe.txt +++ b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/aufgabe.txt @@ -0,0 +1,35 @@ +# 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 scipy könnt ihr nun die Theorie-Funktionen aus der letzten Aufgabe +zu Fit-Funktionen abändern und so physikalische Größen als Fit-Parameter bestimmen. + +1. Ändert die Theorie-Funktionen aus der letzten Aufgabe zu Fit-Funktionen, diese benötigen + zusätzliche Argumente für die Fit-Parameter. Und diese Fit-Parameter müssen auch in der + Funktion verwendet werden. Konkret: + - Die Fallbeschleunigung g die in der letzten Aufgabe als 9.81 angenommen wurde ist jetzt ein + Fit-Parameter g + - Außerdem ist noch ein weiterer Parameter t0 nötig, wie ihr dem finalen Beispielprotokoll entnehmen könnt. + +2. Importiert die Funktion curve_fit aus scypy.optimize + +3. Für jede der beiden Messreihen: + Verwendet curve_fit, um aus den gemittelten Messwerten für Höhe und Zeit die beiden Fit-Parameter + zu berechnen. + +4. Gebt die Parameter mit ihrer zugehörigen Unsicherheit auf das Terminal aus. + +5. Entfernt die Theorie-Funktionen aus den Plots und fügt stattdessen die Fit-Funktionen + mit den berechneten Parametern hinzu + +6. Im finalen Beispielprotokoll wurden auch das Trägheitsmoment der Objekte durch einen weiteren + Fit bestimmt (dabei ist dann der Theoriewert von g anzunehmen). + Ergäzt die notwendigen Fit-Funktionen und Plots für diesen Auswertungsschritt in dem ihr die + vorangegangenen Schritte für diesen Fit wiederholt. + diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/aufgabe.txt b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/aufgabe.txt deleted file mode 100644 index 43eb4fb0..00000000 --- a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/aufgabe.txt +++ /dev/null @@ -1,35 +0,0 @@ -# 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 scipy könnt ihr nun die Theorie-Funktionen aus der letzten Aufgabe -zu Fit-Funktionen abändern und so physikalische Größen als Fit-Parameter bestimmen. - -1. Ändert die Theorie-Funktionen aus der letzten Aufgabe zu Fit-Funktionen, diese benötigen - zusätzliche Argumente für die Fit-Parameter. Und diese Fit-Parameter müssen auch in der - Funktion verwendet werden. Konkret: - - Die Fallbeschleunigung g die in der letzten Aufgabe als 9.81 angenommen wurde ist jetzt ein - Fit-Parameter g - - Außerdem ist noch ein weiterer Parameter t0 nötig, wie ihr dem finalen Beispielprotokoll entnehmen könnt. - -2. Importiert die Funktion curve_fit aus scypy.optimize - -3. Für jede der beiden Messreihen: - Verwendet curve_fit, um aus den gemittelten Messwerten für Höhe und Zeit die beiden Fit-Parameter - zu berechnen. - -4. Gebt die Parameter mit ihrer zugehörigen Unsicherheit auf das Terminal aus. - -5. Entfernt die Theorie-Funktionen aus den Plots und fügt stattdessen die Fit-Funktionen - mit den berechneten Parametern hinzu - -6. Im finalen Beispielprotokoll wurden auch das Trägheitsmoment der Objekte durch einen weiteren - Fit bestimmt (dabei ist dann der Theoriewert von g anzunehmen). - Ergäzt die notwendigen Fit-Funktionen und Plots für diesen Auswertungsschritt in dem ihr die - vorangegangenen Schritte für diesen Fit wiederholt. - From 3431b10ed7102b7e7a53c39e447bc6b39b8384ee Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 15:01:10 +0200 Subject: [PATCH 41/48] fix missing square --- .../loesung/v16515/auswertung.py | 4 ++-- .../loesung/v16515/auswertung.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py index 130aff7b..31cec5a6 100644 --- a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py +++ b/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py @@ -1,6 +1,6 @@ import numpy as np # Kommentar: -# Importiere matplotlib.pyplot dem Namen plt +# Importiere matplotlib.pyplot unter dem Namen plt import matplotlib.pyplot as plt @@ -101,7 +101,7 @@ # es ist also zumindest Vorsicht geboten def theory_t_ball(h): - return np.sqrt(7/5 * 1/h * 2* l/9.81) + return np.sqrt(7/5 * 1/h * 2* l**2/9.81) def theory_t_cylinder(h): return np.sqrt((3 + ri_c**2/ro_c**2) * l**2/9.81 * 1/h) diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py index 4eb6cd96..133a99dc 100644 --- a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py +++ b/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py @@ -107,7 +107,7 @@ # "fit_g_ball" als Abkürzung für "Fitfunktion für den Parameter g aus den Messwerten für die Kugel" def fit_g_ball(h, g, t0): - return np.sqrt(7/5 * 1/h * 2* l/g) + t0 + return np.sqrt(7/5 * 1/h * 2* l**2/g) + t0 def fit_g_cylinder(h, g, t0): return np.sqrt((3 + ri_c**2/ro_c**2) * l**2/g * 1/h) + t0 From 6257791c6a0e8a5e854d0bc77aad6064c853e60d Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 15:01:44 +0200 Subject: [PATCH 42/48] add fifth step for the example lab report --- .../aufgabe.txt | 39 +++ .../loesung/v16516/auswertung.py | 284 ++++++++++++++++++ .../loesung/v16516/data/Messwerte_Bahn.txt | 4 + .../v16516/data/Messwerte_Frames_Kugel.txt | 21 ++ .../v16516/data/Messwerte_Frames_Zylinder.txt | 22 ++ .../loesung/v16516/data/Messwerte_Kamera.txt | 4 + .../loesung/v16516/data/Messwerte_Kugel.txt | 5 + .../v16516/data/Messwerte_Zylinder.txt | 5 + .../vorlage/v16516/data/Messwerte_Bahn.txt | 4 + .../v16516/data/Messwerte_Frames_Kugel.txt | 21 ++ .../v16516/data/Messwerte_Frames_Zylinder.txt | 22 ++ .../vorlage/v16516/data/Messwerte_Kamera.txt | 4 + .../vorlage/v16516/data/Messwerte_Kugel.txt | 5 + .../v16516/data/Messwerte_Zylinder.txt | 5 + 14 files changed, 445 insertions(+) create mode 100644 exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/aufgabe.txt create mode 100644 exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py create mode 100644 exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt create mode 100644 exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt create mode 100644 exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt create mode 100644 exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt create mode 100644 exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt create mode 100644 exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt create mode 100644 exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt create mode 100644 exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt create mode 100644 exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt create mode 100644 exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt create mode 100644 exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt create mode 100644 exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/aufgabe.txt new file mode 100644 index 00000000..dc265fbd --- /dev/null +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/aufgabe.txt @@ -0,0 +1,39 @@ +# 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 uncertainties könnt ihr jetzt den Umgang mit Messunsicherheiten +in die Auswertung aufnehmen. Die Messdaten im Ordner vorlage/v16516/data haben jetzt +zusätzliche Spalten mit den jeweiligen Unsicherheiten. + +1. Kopiert diese neuen Messwertdateien in euren eigenen Ordner data, um die Messwerte +mit Unsicherheiten zu haben. Die alten Dateien könnt ihr überschreiben oder vorher löschen. + +2. Importiert uncertainties und uncertainties.unumpy in eurer auswertung.py + +3. Ergänzt das Einlesen der Messdaten um die zusätzlichen Spalten mit unsicherheiten, + eine Benennung der Form l_unc für "Unsicherheit des Messwerts l" ist hier sinnvoll + +4. Die eingelesenen Messwerte und Unsicherheiten müssen jetzt zu unsicherheitbehafteten + Messwerten zusammengefügt werden. Nutzt dafür ufloat (aus uncertainties) für einzelne Werte + und uarray (aus uncertainties.unumpy) für Messreihen. + +5. In den Fit-Funktionen müsst ihr von allen Konstanten die Unsicherheiten entfernen, + die dafür nötige Funktion heißt nominal_values und es bietet sich an diese in + abgekürzter Form zu importieren (genauso wie die Funktion std_devs): + from uncertainties.unumpy import (nominal_values as noms, std_devs as stds) + Dann kann die Funktion noms() verwendet werden, um die Unsicherheit eines Wertes + zu entfernen. + +6. curve_fit kann mit Unsicherheiten nicht direkt umgehen, die unabhängige Variable + darf keine Unsicherheiten haben und den Wert bzw. die Unsicherheit + der abhängige Varialbe müssen getrennt übergeben werden. + +7. matplotlib kann auch nicht mit den unsicherheiten umgehen: + Verwendet statt ax.plot die Funktion ax.errorbar um die Messwerte mit ihren + Unsicherheiten darzustellen. diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py new file mode 100644 index 00000000..96bb0e4c --- /dev/null +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py @@ -0,0 +1,284 @@ +import numpy as np + +import matplotlib.pyplot as plt + +from scipy.optimize import curve_fit +from scipy.constants import physical_constants + + +# Kommentar: +# Importiere uncertainties unter dem Namen unc +# Importiere uncertainties.unumpy unter dem Namen unp +# Importiere der Funktionen nominal_values und std_devs +# aus uncertainties.unumpy, unter den kürzeren Namen +# noms respektive stds +import uncertainties as unc +import uncertainties.unumpy as unp +from uncertainties.unumpy import (nominal_values as noms, std_devs as stds) + + +# Kommentar: +# Die Dateien im Ordner data enthalten jetzt auch spalten mit den Unsicherheiten +# für die meisten Messwerte +# Beim Importieren der Daten muss beachtet werden, dass: +# (1) Messgröße und Unsicherheit jeweils eine eigene Variablennamen brauchen. +# Auch hier ist eine konsistente Benennung sinnvoll +# z.B. l (Messwerte) und l_unc (zugehörige Unsicherheiten) +# +# (2) die Unsicherheitbehafteten Messwerte noch erstellt werden müssen, +# entweder durch unc.ufloat oder druch das unp.uarray + + +# Länge der schiefen Ebene +l, l_unc = np.genfromtxt("data/Messwerte_Bahn.txt", delimiter=",")/100 # m +l = unc.ufloat(l, l_unc) + +# Framerate der Kamera (hat keine Unsicherheit, fps_unc = 0) +fps, fps_unc = np.genfromtxt("data/Messwerte_Kamera.txt", delimiter=",") # 1/s + +# Masse und Umfang der Kugel +m_b, m_b_unc, u_b, u_b_unc = np.genfromtxt("data/Messwerte_Kugel.txt", delimiter=",", unpack=True) + +m_b = unc.ufloat(m_b,m_b_unc)/1000 # kg +u_b = unc.ufloat(u_b,m_b_unc)/100 # m + +# Messreihe: Starthöhe und Startframe und Endframe (Kugel) +h_b, h_b_unc, Fi_b, Fi_b_unc, Ff_b, Ff_b_unc = np.genfromtxt("data/Messwerte_Frames_Kugel.txt", delimiter=",", unpack=True) +h_b = unp.uarray(h_b, h_b_unc)/100 # m +Fi_b = unp.uarray(Fi_b, Fi_b_unc) +Ff_b = unp.uarray(Ff_b, Ff_b_unc) + + +# Masse und Umfang des Zylinders +m_c, m_c_unc, u_c, u_c_unc, d_c, d_c_unc = np.genfromtxt("data/Messwerte_Zylinder.txt", delimiter=",", unpack=True) +m_c = unc.ufloat(m_c, m_c_unc)/1000 # kg +u_c = unc.ufloat(u_c, u_c_unc)/100 # m +d_c = unc.ufloat(d_c, d_c_unc)/100 # m + +# Messreihe: Starthöhe und Startframe und Endframe (Zylinder) +h_c, h_c_unc, Fi_c, Fi_c_unc, Ff_c, Ff_c_unc = np.genfromtxt("data/Messwerte_Frames_Zylinder.txt", delimiter=",", unpack=True) +h_c = unp.uarray(h_c, h_c_unc)/100 # m +Fi_c = unp.uarray(Fi_c, Fi_c_unc) +Ff_c = unp.uarray(Ff_c, Ff_c_unc) + + + +# Kommentar: +# Die folgenden Berechnungen funktionieren alle weiterhin, nur jetzt mit automatischen Fehlerrechnung + + +# 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 + +t_b_mean = t_b.reshape(-1,3).mean(axis=1) +h_b_mean = h_b.reshape(-1,3)[:,0] +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) +print("\n") + +# Erstelle Plots der Messwerte t_._mean und h_._mean + + +# Kommentar: +# Nur für die Erstellung der Plots und Fits ändert sich etwas: +# Weder scipy noch matplotlib können direkt mit den unsicherheitbehafteten +# Messwerten umgehen. +# Folgendes muss dafür geändert werden: +# +# (1) in der Fitfunktien müssen mit der Funktion noms() +# die Unsicherheiten von Konstanten entfernt werden +# +# (2) mit Unsicherheiten der unabhängigen Variable kann curve_fit nicht umgehen, +# diese müssen mit noms() entfernt werden. +# +# (3) die Werte und Unsicherheiten der abhängigen Variable (gemessene Funktionswerte) +# müssen getrennt übergeben werden: noms() und stds() +# +# (4) die Darstellung der Messwerte im Plot wird durch errorbar() ersetzt, +# um die Unsicherheiten anzeigen zu können +# +# In der Aufgabe 3-curve_fit muss eine Funktion ucurve_fit geschrieben werden, +# die die scipy funktion curve_fit verwendet, die aber den umgang mit den +# Unsicherheiten abstrahiert, sodass man das nicht jedes mal aufs neue machen muss. + + + +def fit_g_ball(h, g, t0): + return np.sqrt(7/5 * 1/h * 2* noms(l)**2/g) + t0 + +def fit_g_cylinder(h, g, t0): + return np.sqrt((3 + noms(ri_c**2/ro_c**2)) * noms(l)**2/g * 1/h) + t0 + + +params, covariance_matrix = curve_fit(fit_g_ball, noms(h_b_mean), noms(t_b_mean), sigma=stds(t_b_mean)) +param_uncertainties = np.sqrt(np.diag(covariance_matrix)) + + +print("Fitparameter (Kugel)") +for name, value, uncertainty in zip("gt", params, param_uncertainties): + print(f"{name} = {value:8.3f} ± {uncertainty:.3f}") +print("\n") + + +h_plot = np.linspace(0.03, 0.33, 205) + + +# Fit Parameter für den Zylinder + + +fig, ax = plt.subplots(1, 1, layout="constrained") + + +ax.set_xlabel("$h$ / m") +ax.set_ylabel("$t$ / s") + + + +ax.errorbar(noms(h_b_mean), noms(t_b_mean), yerr=stds(h_b_mean), fmt="k+", label="Daten: Kugel") +ax.plot(h_plot, fit_g_ball(h_plot, *params), label="Fit") +ax.legend() +fig.savefig("plot-g_kugel.pdf") + + + + +# Berechnung der Fitparameter für den Zylinder +params, covariance_matrix = curve_fit(fit_g_cylinder, noms(h_c_mean), noms(t_c_mean), sigma=stds(t_c_mean)) +param_uncertainties = np.sqrt(np.diag(covariance_matrix)) + + +print("Fitparameter (Zylinder)") +for name, value, uncertainty in zip("gt", params, param_uncertainties): + print(f"{name} = {value:8.3f} ± {uncertainty:.3f}") +print("\n") + + +fig, ax = plt.subplots(1, 1, layout="constrained") + +ax.set_xlabel("$h$ / m") +ax.set_ylabel("$t$ / s") + + +ax.errorbar(noms(h_c_mean), noms(t_c_mean), yerr=stds(h_c_mean), fmt="k+", label="Daten: Zylinder") +ax.plot(h_plot, fit_g_cylinder(h_plot, *params), label="Fit") +ax.legend() +fig.savefig("plot-g_zylinder.pdf") + + + + +def fit_I_ball(h, I, t0): + g = physical_constants["standard acceleration of gravity"][0] + return np.sqrt(2/g * 1/h * noms(l)**2 * (1 + I/(noms(m_b * r_b)**2)) ) + t0 + + +def fit_I_cylinder(h, I, t0): + g = physical_constants["standard acceleration of gravity"][0] + return np.sqrt(2/g * 1/h * noms(l)**2 * (1 + I/(noms(m_c * ro_c**2)) )) + t0 + + +# Berechnung der Fitparameter für die Kugel +params, covariance_matrix = curve_fit(fit_I_ball, noms(h_b_mean), noms(t_b_mean), sigma=stds(t_b_mean)) +param_uncertainties = np.sqrt(np.diag(covariance_matrix)) + + +print("Fitparameter (Kugel)") +for name, value, uncertainty in zip("It", params, param_uncertainties): + # in kg*m² sehr klein, umwandlung zu kg*cm² + if name == "I": + value *= 10000 + uncertainty *= 10000 + print(f"{name} = {value:8.3f} ± {uncertainty:.3f}") +print("\n") + + +fig, ax = plt.subplots(1, 1, layout="constrained") + +ax.set_xlabel("$h$ / m") +ax.set_ylabel("$t$ / s") + + +ax.errorbar(noms(h_b_mean), noms(t_b_mean), yerr=stds(h_b_mean), fmt="k+", label="Daten: Kugel") +ax.plot(h_plot, fit_I_cylinder(h_plot, *params), label="Fit") +ax.legend() +fig.savefig("plot-I_kugel.pdf") + + +# Berechnung der Fitparameter für den Zylinder +params, covariance_matrix = curve_fit(fit_I_cylinder, noms(h_c_mean), noms(t_c_mean), sigma=stds(t_c_mean)) +param_uncertainties = np.sqrt(np.diag(covariance_matrix)) + + +print("Fitparameter (Zylinder)") +for name, value, uncertainty in zip("It", params, param_uncertainties): + # in kg*m² sehr klein, umwandlung zu kg*cm² + if name == "I": + value *= 10000 + uncertainty *= 10000 + print(f"{name} = {value:8.3f} ± {uncertainty:.3f}") +print("\n") + + + +fig, ax = plt.subplots(1, 1, layout="constrained") + +ax.set_xlabel("$h$ / m") +ax.set_ylabel("$t$ / s") + + +ax.errorbar(noms(h_c_mean), noms(t_c_mean), yerr=stds(h_c_mean), fmt="k+", label="Daten: Zylinder") +ax.plot(h_plot, fit_I_cylinder(h_plot, *params), label="Fit") +ax.legend() +fig.savefig("plot-I_zylinder.pdf") diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt new file mode 100644 index 00000000..cc6a4720 --- /dev/null +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt @@ -0,0 +1,4 @@ +# l,sigma_l +80,0.5 +# Länge der Bahn +# cm (l / cm) diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt new file mode 100644 index 00000000..91bc58b6 --- /dev/null +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt @@ -0,0 +1,21 @@ +# h,sigma_h,Fi,sigma_Fi,Ff,sigma_Ff +4.5,0.5,436,1,492,1 +4.5,0.5,555,1,610,1 +4.5,0.5,672,1,729,1 +10,0.5,95,1,130,1 +10,0.5,199,1,235,1 +10,0.5,303,1,338,1 +15,0.5,91,1,119,1 +15,0.5,201,1,229,1 +15,0.5,335,1,362,1 +20,0.5,232,1,256,1 +20,0.5,323,1,347,1 +20,0.5,397,1,421,1 +25,0.5,153,1,174,1 +25,0.5,239,1,260,1 +25,0.5,322,1,343,1 +30,0.5,219,1,238,1 +30,0.5,319,1,338,1 +30,0.5,391,1,412,1 +# Messreihe: Kugel +# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt new file mode 100644 index 00000000..2321d313 --- /dev/null +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt @@ -0,0 +1,22 @@ +# h,sigma_h,Fi,sigma_Fi,Ff,sigma_Ff +4.5,0.5,1018,1,1083,1 +4.5,0.5,1189,1,1248,1 +4.5,0.5,1340,1,1404,1 +10,0.5,596,1,636,1 +10,0.5,762,1,801,1 +10,0.5,882,1,921,1 +15,0.5,574,1,605,1 +15,0.5,766,1,798,1 +15,0.5,863,1,896,1 +20,0.5,679,1,707,1 +20,0.5,810,1,838,1 +20,0.5,930,1,959,1 +25,0.5,650,1,674,1 +25,0.5,892,1,917,1 +25,0.5,804,1,827,1 +30,0.5,642,1,664,1 +30,0.5,739,1,760,1 +30,0.5,900,1,922,1 + +# Messreihe: Zylinder +# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt new file mode 100644 index 00000000..add88808 --- /dev/null +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt @@ -0,0 +1,4 @@ +# fps,sigma_fps +30,0 +# Framerate der Videoaufnahmen +# Frames per second (fps / 1/s) diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt new file mode 100644 index 00000000..48b54cb9 --- /dev/null +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt @@ -0,0 +1,5 @@ +#m,sigma_m,U,sigma_U +216,1,30.5,0.1 + +# Messdaten der Kugel: Vollkugel +# Umfang (U/cm), Masse (m/g) diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt new file mode 100644 index 00000000..d9d19ddf --- /dev/null +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt @@ -0,0 +1,5 @@ +#m,sigma_m,U,sigma_U,d,sigma_d +186,1,24.3,0.1,3,1 + +# Messdaten des Zylinders: Hohlzylinder mit Boden aber ohne Deckel +# Umfang (U/cm), Masse (m/g), Wanddicke (Differenz zwischen Innen- und Außenradius) (d/mm) diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt new file mode 100644 index 00000000..cc6a4720 --- /dev/null +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt @@ -0,0 +1,4 @@ +# l,sigma_l +80,0.5 +# Länge der Bahn +# cm (l / cm) diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt new file mode 100644 index 00000000..91bc58b6 --- /dev/null +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt @@ -0,0 +1,21 @@ +# h,sigma_h,Fi,sigma_Fi,Ff,sigma_Ff +4.5,0.5,436,1,492,1 +4.5,0.5,555,1,610,1 +4.5,0.5,672,1,729,1 +10,0.5,95,1,130,1 +10,0.5,199,1,235,1 +10,0.5,303,1,338,1 +15,0.5,91,1,119,1 +15,0.5,201,1,229,1 +15,0.5,335,1,362,1 +20,0.5,232,1,256,1 +20,0.5,323,1,347,1 +20,0.5,397,1,421,1 +25,0.5,153,1,174,1 +25,0.5,239,1,260,1 +25,0.5,322,1,343,1 +30,0.5,219,1,238,1 +30,0.5,319,1,338,1 +30,0.5,391,1,412,1 +# Messreihe: Kugel +# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt new file mode 100644 index 00000000..2321d313 --- /dev/null +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt @@ -0,0 +1,22 @@ +# h,sigma_h,Fi,sigma_Fi,Ff,sigma_Ff +4.5,0.5,1018,1,1083,1 +4.5,0.5,1189,1,1248,1 +4.5,0.5,1340,1,1404,1 +10,0.5,596,1,636,1 +10,0.5,762,1,801,1 +10,0.5,882,1,921,1 +15,0.5,574,1,605,1 +15,0.5,766,1,798,1 +15,0.5,863,1,896,1 +20,0.5,679,1,707,1 +20,0.5,810,1,838,1 +20,0.5,930,1,959,1 +25,0.5,650,1,674,1 +25,0.5,892,1,917,1 +25,0.5,804,1,827,1 +30,0.5,642,1,664,1 +30,0.5,739,1,760,1 +30,0.5,900,1,922,1 + +# Messreihe: Zylinder +# Höhe(h/cm), Startframe(Fi/1), Endframe(Ff/1) diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt new file mode 100644 index 00000000..add88808 --- /dev/null +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt @@ -0,0 +1,4 @@ +# fps,sigma_fps +30,0 +# Framerate der Videoaufnahmen +# Frames per second (fps / 1/s) diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt new file mode 100644 index 00000000..48b54cb9 --- /dev/null +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt @@ -0,0 +1,5 @@ +#m,sigma_m,U,sigma_U +216,1,30.5,0.1 + +# Messdaten der Kugel: Vollkugel +# Umfang (U/cm), Masse (m/g) diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt new file mode 100644 index 00000000..d9d19ddf --- /dev/null +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt @@ -0,0 +1,5 @@ +#m,sigma_m,U,sigma_U,d,sigma_d +186,1,24.3,0.1,3,1 + +# Messdaten des Zylinders: Hohlzylinder mit Boden aber ohne Deckel +# Umfang (U/cm), Masse (m/g), Wanddicke (Differenz zwischen Innen- und Außenradius) (d/mm) From d7f101002b8aa408f50946765cae6d2b795cfaa6 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 15:05:19 +0200 Subject: [PATCH 43/48] fix wrong uncertainties --- .../loesung/v16516/auswertung.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py index 96bb0e4c..32cf7101 100644 --- a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py +++ b/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py @@ -186,7 +186,7 @@ def fit_g_cylinder(h, g, t0): -ax.errorbar(noms(h_b_mean), noms(t_b_mean), yerr=stds(h_b_mean), fmt="k+", label="Daten: Kugel") +ax.errorbar(noms(h_b_mean), noms(t_b_mean), yerr=stds(t_b_mean), fmt="k+", label="Daten: Kugel") ax.plot(h_plot, fit_g_ball(h_plot, *params), label="Fit") ax.legend() fig.savefig("plot-g_kugel.pdf") @@ -211,7 +211,7 @@ def fit_g_cylinder(h, g, t0): ax.set_ylabel("$t$ / s") -ax.errorbar(noms(h_c_mean), noms(t_c_mean), yerr=stds(h_c_mean), fmt="k+", label="Daten: Zylinder") +ax.errorbar(noms(h_c_mean), noms(t_c_mean), yerr=stds(t_c_mean), fmt="k+", label="Daten: Zylinder") ax.plot(h_plot, fit_g_cylinder(h_plot, *params), label="Fit") ax.legend() fig.savefig("plot-g_zylinder.pdf") @@ -250,7 +250,7 @@ def fit_I_cylinder(h, I, t0): ax.set_ylabel("$t$ / s") -ax.errorbar(noms(h_b_mean), noms(t_b_mean), yerr=stds(h_b_mean), fmt="k+", label="Daten: Kugel") +ax.errorbar(noms(h_b_mean), noms(t_b_mean), yerr=stds(t_b_mean), fmt="k+", label="Daten: Kugel") ax.plot(h_plot, fit_I_cylinder(h_plot, *params), label="Fit") ax.legend() fig.savefig("plot-I_kugel.pdf") @@ -278,7 +278,7 @@ def fit_I_cylinder(h, I, t0): ax.set_ylabel("$t$ / s") -ax.errorbar(noms(h_c_mean), noms(t_c_mean), yerr=stds(h_c_mean), fmt="k+", label="Daten: Zylinder") +ax.errorbar(noms(h_c_mean), noms(t_c_mean), yerr=stds(t_c_mean), fmt="k+", label="Daten: Zylinder") ax.plot(h_plot, fit_I_cylinder(h_plot, *params), label="Fit") ax.legend() fig.savefig("plot-I_zylinder.pdf") From c8206d731618edf86047766636f13eb7ed902391 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 17:48:23 +0200 Subject: [PATCH 44/48] add sixth step for the example protocoll --- .../aufgabe.txt | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 exercises-toolbox/7-git/Realistisches-Beispiel-Protokoll/aufgabe.txt diff --git a/exercises-toolbox/7-git/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/7-git/Realistisches-Beispiel-Protokoll/aufgabe.txt new file mode 100644 index 00000000..98d10eb4 --- /dev/null +++ b/exercises-toolbox/7-git/Realistisches-Beispiel-Protokoll/aufgabe.txt @@ -0,0 +1,44 @@ +# 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: +Diesmal arbeitet ihr nicht am Protokoll weiter. Das Ziel soll es sein, euren bisherigen (und zukünftigen) Fortschritt +am Beispielprotokoll in einem Git-Repository zu speichern und auf Github hochzuladen. + +1) Erstellt in dem Ordner, in dem ihr den Ordner v16516 für diese Aufgabe gespeichert habt +einen neuen Ordner (z.B. Beispiel-Praktikum). + +2) Verschiebt den Ordner v16516 in den neuen Ordner Beispiel-Praktikum. + +3) Navigiert mit dem Terminal in den neuen Ordner und intitialisiert in diesem ein Git-Repository (init). + +4) Fügt alle Dateien zum Repository hinzu (add, commit). + +Repository auf Github hochladen: + +5) Erstellt euch einen Github-Account, falls ihr noch keinen habt. + +6) Navigiert zu https://github.com/dashboard. Erstellt über den Button "New" ein neues Repository. + Für diese Aufgabe müsst ihr dem Repository nur einen Namen geben, alle optionalen Einstellungen könnt ihr + unverändert lassen. + Nach dem erstellen werden euch drei Möglichkeiten vorgeschlagen fortzufahren, da wir bereits einen + Repository auf dem Computer haben wählen wir die dritte Option: + + "…or push an existing repository from the command line" + git remote add origin git@github.com:LuckyJosh/TestTestTest.git + git branch -M main + git push -u origin main + + +7) Navigiert mit dem Terminal in euer Beispiel-Praktikum Git-Repository und gebt die drei obigen + Befehle ein. + +8) Schaut euch euer Repository auf https://github.com/ an. + + + From e654a7e041971084c613ee8bbbb0a5c81dad63ad Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 17:51:31 +0200 Subject: [PATCH 45/48] fix symup -> operatorname --- .../loesung/v16516/content/auswertung.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/auswertung.tex b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/auswertung.tex index 6945baf8..f3f7e84f 100644 --- a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/auswertung.tex +++ b/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/auswertung.tex @@ -14,10 +14,10 @@ \section{Auswertung} \end{align} Aus den aufgenommenen Videos der Versuche wurden die in \autoref{tab:all-measurements} folgenden Frameindizes extrahiert. Die ebenfalls aufgeführte Zeitdauer $t$ wurde dann jeweils aus der aus dem Startframeindex $F_\text{i}$, -dem Endframeindex $F_\text{f}$ und der Kameraframerate $\symup{fps}=\input{framerate.tex}$ wie folgt +dem Endframeindex $F_\text{f}$ und der Kameraframerate $\operatorname{fps}=\input{framerate.tex}$ wie folgt berechnet \begin{equation*} - t = (F_\text{f} - F_\text{i})\cdot\symup{fps}^{-1} + t = (F_\text{f} - F_\text{i})\cdot\operatorname{fps}^{-1} \end{equation*} \begin{table} From 67bf18b756833db65f96f875d89e4252a903e19c Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 18:12:12 +0200 Subject: [PATCH 46/48] changed directory name for example report --- .../aufgabe.txt | 0 .../vorlage/v16516/auswertung.py | 0 .../vorlage/v16516/data/Messwerte_Bahn.txt | 0 .../vorlage/v16516/data/Messwerte_Frames_Kugel.txt | 0 .../vorlage/v16516/data/Messwerte_Frames_Zylinder.txt | 0 .../vorlage/v16516/data/Messwerte_Kamera.txt | 0 .../vorlage/v16516/data/Messwerte_Kugel.txt | 0 .../vorlage/v16516/data/Messwerte_Zylinder.txt | 0 .../aufgabe.txt | 0 .../loesung/v16516/auswertung.py | 0 .../loesung/v16516/data/Messwerte_Bahn.txt | 0 .../loesung/v16516/data/Messwerte_Frames_Kugel.txt | 0 .../loesung/v16516/data/Messwerte_Frames_Zylinder.txt | 0 .../loesung/v16516/data/Messwerte_Kamera.txt | 0 .../loesung/v16516/data/Messwerte_Kugel.txt | 0 .../loesung/v16516/data/Messwerte_Zylinder.txt | 0 .../aufgabe.txt | 0 .../loesung/v16515/auswertung.py | 0 .../loesung/v16515/data/Messwerte_Bahn.txt | 0 .../loesung/v16515/data/Messwerte_Frames_Kugel.txt | 0 .../loesung/v16515/data/Messwerte_Frames_Zylinder.txt | 0 .../loesung/v16515/data/Messwerte_Kamera.txt | 0 .../loesung/v16515/data/Messwerte_Kugel.txt | 0 .../loesung/v16515/data/Messwerte_Zylinder.txt | 0 .../aufgabe.txt | 0 .../loesung/v16515/auswertung.py | 0 .../loesung/v16515/data/Messwerte_Bahn.txt | 0 .../loesung/v16515/data/Messwerte_Frames_Kugel.txt | 0 .../loesung/v16515/data/Messwerte_Frames_Zylinder.txt | 0 .../loesung/v16515/data/Messwerte_Kamera.txt | 0 .../loesung/v16515/data/Messwerte_Kugel.txt | 0 .../loesung/v16515/data/Messwerte_Zylinder.txt | 0 .../aufgabe.txt | 0 .../loesung/v16516/auswertung.py | 0 .../loesung/v16516/data/Messwerte_Bahn.txt | 0 .../loesung/v16516/data/Messwerte_Frames_Kugel.txt | 0 .../loesung/v16516/data/Messwerte_Frames_Zylinder.txt | 0 .../loesung/v16516/data/Messwerte_Kamera.txt | 0 .../loesung/v16516/data/Messwerte_Kugel.txt | 0 .../loesung/v16516/data/Messwerte_Zylinder.txt | 0 .../vorlage/v16516/data/Messwerte_Bahn.txt | 0 .../vorlage/v16516/data/Messwerte_Frames_Kugel.txt | 0 .../vorlage/v16516/data/Messwerte_Frames_Zylinder.txt | 0 .../vorlage/v16516/data/Messwerte_Kamera.txt | 0 .../vorlage/v16516/data/Messwerte_Kugel.txt | 0 .../vorlage/v16516/data/Messwerte_Zylinder.txt | 0 .../aufgabe.txt | 0 .../loesung/Makefile | 0 .../loesung/README.md | 0 .../loesung/header-matplotlib.tex | 0 .../loesung/header.tex | 0 .../loesung/lit.bib | 0 .../loesung/matplotlibrc | 0 .../loesung/programme.bib | 0 .../loesung/v16516/Makefile | 0 .../loesung/v16516/auswertung.py | 0 .../loesung/v16516/content/auswertung.tex | 0 .../loesung/v16516/content/diskussion.tex | 0 .../loesung/v16516/content/durchfuehrung.tex | 0 .../loesung/v16516/content/theorie.tex | 0 .../loesung/v16516/curve_fit.py | 0 .../loesung/v16516/data/Messwerte_Bahn.txt | 0 .../loesung/v16516/data/Messwerte_Frames_Kugel.txt | 0 .../loesung/v16516/data/Messwerte_Frames_Zylinder.txt | 0 .../loesung/v16516/data/Messwerte_Kamera.txt | 0 .../loesung/v16516/data/Messwerte_Kugel.txt | 0 .../loesung/v16516/data/Messwerte_Zylinder.txt | 0 .../loesung/v16516/latex_formatting.py | 0 .../loesung/v16516/v16516.tex | 0 69 files changed, 0 insertions(+), 0 deletions(-) rename exercises-toolbox/1-python/{Realistisches-Beispiel-Protokoll => report-example}/aufgabe.txt (100%) rename exercises-toolbox/1-python/{Realistisches-Beispiel-Protokoll => report-example}/vorlage/v16516/auswertung.py (100%) rename exercises-toolbox/1-python/{Realistisches-Beispiel-Protokoll => report-example}/vorlage/v16516/data/Messwerte_Bahn.txt (100%) rename exercises-toolbox/1-python/{Realistisches-Beispiel-Protokoll => report-example}/vorlage/v16516/data/Messwerte_Frames_Kugel.txt (100%) rename exercises-toolbox/1-python/{Realistisches-Beispiel-Protokoll => report-example}/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt (100%) rename exercises-toolbox/1-python/{Realistisches-Beispiel-Protokoll => report-example}/vorlage/v16516/data/Messwerte_Kamera.txt (100%) rename exercises-toolbox/1-python/{Realistisches-Beispiel-Protokoll => report-example}/vorlage/v16516/data/Messwerte_Kugel.txt (100%) rename exercises-toolbox/1-python/{Realistisches-Beispiel-Protokoll => report-example}/vorlage/v16516/data/Messwerte_Zylinder.txt (100%) rename exercises-toolbox/2-numpy/{Realistisches-Beispiel-Protokoll => report-example}/aufgabe.txt (100%) rename exercises-toolbox/2-numpy/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/auswertung.py (100%) rename exercises-toolbox/2-numpy/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Bahn.txt (100%) rename exercises-toolbox/2-numpy/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Frames_Kugel.txt (100%) rename exercises-toolbox/2-numpy/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Frames_Zylinder.txt (100%) rename exercises-toolbox/2-numpy/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Kamera.txt (100%) rename exercises-toolbox/2-numpy/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Kugel.txt (100%) rename exercises-toolbox/2-numpy/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Zylinder.txt (100%) rename exercises-toolbox/3-matplotlib/{Realistisches-Beispiel-Protokoll => report-example}/aufgabe.txt (100%) rename exercises-toolbox/3-matplotlib/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16515/auswertung.py (100%) rename exercises-toolbox/3-matplotlib/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16515/data/Messwerte_Bahn.txt (100%) rename exercises-toolbox/3-matplotlib/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16515/data/Messwerte_Frames_Kugel.txt (100%) rename exercises-toolbox/3-matplotlib/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16515/data/Messwerte_Frames_Zylinder.txt (100%) rename exercises-toolbox/3-matplotlib/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16515/data/Messwerte_Kamera.txt (100%) rename exercises-toolbox/3-matplotlib/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16515/data/Messwerte_Kugel.txt (100%) rename exercises-toolbox/3-matplotlib/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16515/data/Messwerte_Zylinder.txt (100%) rename exercises-toolbox/4-scipy/{Realistisches-Beispiel-Protokoll => report-example}/aufgabe.txt (100%) rename exercises-toolbox/4-scipy/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16515/auswertung.py (100%) rename exercises-toolbox/4-scipy/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16515/data/Messwerte_Bahn.txt (100%) rename exercises-toolbox/4-scipy/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16515/data/Messwerte_Frames_Kugel.txt (100%) rename exercises-toolbox/4-scipy/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16515/data/Messwerte_Frames_Zylinder.txt (100%) rename exercises-toolbox/4-scipy/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16515/data/Messwerte_Kamera.txt (100%) rename exercises-toolbox/4-scipy/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16515/data/Messwerte_Kugel.txt (100%) rename exercises-toolbox/4-scipy/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16515/data/Messwerte_Zylinder.txt (100%) rename exercises-toolbox/5-uncertainties/{Realistisches-Beispiel-Protokoll => report-example}/aufgabe.txt (100%) rename exercises-toolbox/5-uncertainties/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/auswertung.py (100%) rename exercises-toolbox/5-uncertainties/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Bahn.txt (100%) rename exercises-toolbox/5-uncertainties/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Frames_Kugel.txt (100%) rename exercises-toolbox/5-uncertainties/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Frames_Zylinder.txt (100%) rename exercises-toolbox/5-uncertainties/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Kamera.txt (100%) rename exercises-toolbox/5-uncertainties/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Kugel.txt (100%) rename exercises-toolbox/5-uncertainties/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Zylinder.txt (100%) rename exercises-toolbox/5-uncertainties/{Realistisches-Beispiel-Protokoll => report-example}/vorlage/v16516/data/Messwerte_Bahn.txt (100%) rename exercises-toolbox/5-uncertainties/{Realistisches-Beispiel-Protokoll => report-example}/vorlage/v16516/data/Messwerte_Frames_Kugel.txt (100%) rename exercises-toolbox/5-uncertainties/{Realistisches-Beispiel-Protokoll => report-example}/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt (100%) rename exercises-toolbox/5-uncertainties/{Realistisches-Beispiel-Protokoll => report-example}/vorlage/v16516/data/Messwerte_Kamera.txt (100%) rename exercises-toolbox/5-uncertainties/{Realistisches-Beispiel-Protokoll => report-example}/vorlage/v16516/data/Messwerte_Kugel.txt (100%) rename exercises-toolbox/5-uncertainties/{Realistisches-Beispiel-Protokoll => report-example}/vorlage/v16516/data/Messwerte_Zylinder.txt (100%) rename exercises-toolbox/7-git/{Realistisches-Beispiel-Protokoll => report-example}/aufgabe.txt (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/Makefile (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/README.md (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/header-matplotlib.tex (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/header.tex (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/lit.bib (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/matplotlibrc (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/programme.bib (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/Makefile (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/auswertung.py (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/content/auswertung.tex (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/content/diskussion.tex (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/content/durchfuehrung.tex (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/content/theorie.tex (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/curve_fit.py (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Bahn.txt (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Frames_Kugel.txt (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Frames_Zylinder.txt (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Kamera.txt (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Kugel.txt (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/data/Messwerte_Zylinder.txt (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/latex_formatting.py (100%) rename exercises-toolbox/8-all/{Realistisches-Beispiel-Protokoll => report-example}/loesung/v16516/v16516.tex (100%) diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/1-python/report-example/aufgabe.txt similarity index 100% rename from exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/aufgabe.txt rename to exercises-toolbox/1-python/report-example/aufgabe.txt diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/auswertung.py b/exercises-toolbox/1-python/report-example/vorlage/v16516/auswertung.py similarity index 100% rename from exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/auswertung.py rename to exercises-toolbox/1-python/report-example/vorlage/v16516/auswertung.py diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt b/exercises-toolbox/1-python/report-example/vorlage/v16516/data/Messwerte_Bahn.txt similarity index 100% rename from exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt rename to exercises-toolbox/1-python/report-example/vorlage/v16516/data/Messwerte_Bahn.txt diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/1-python/report-example/vorlage/v16516/data/Messwerte_Frames_Kugel.txt similarity index 100% rename from exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt rename to exercises-toolbox/1-python/report-example/vorlage/v16516/data/Messwerte_Frames_Kugel.txt diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/1-python/report-example/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt similarity index 100% rename from exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt rename to exercises-toolbox/1-python/report-example/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt b/exercises-toolbox/1-python/report-example/vorlage/v16516/data/Messwerte_Kamera.txt similarity index 100% rename from exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt rename to exercises-toolbox/1-python/report-example/vorlage/v16516/data/Messwerte_Kamera.txt diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt b/exercises-toolbox/1-python/report-example/vorlage/v16516/data/Messwerte_Kugel.txt similarity index 100% rename from exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt rename to exercises-toolbox/1-python/report-example/vorlage/v16516/data/Messwerte_Kugel.txt diff --git a/exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt b/exercises-toolbox/1-python/report-example/vorlage/v16516/data/Messwerte_Zylinder.txt similarity index 100% rename from exercises-toolbox/1-python/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt rename to exercises-toolbox/1-python/report-example/vorlage/v16516/data/Messwerte_Zylinder.txt diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/2-numpy/report-example/aufgabe.txt similarity index 100% rename from exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/aufgabe.txt rename to exercises-toolbox/2-numpy/report-example/aufgabe.txt diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py b/exercises-toolbox/2-numpy/report-example/loesung/v16516/auswertung.py similarity index 100% rename from exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py rename to exercises-toolbox/2-numpy/report-example/loesung/v16516/auswertung.py diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt b/exercises-toolbox/2-numpy/report-example/loesung/v16516/data/Messwerte_Bahn.txt similarity index 100% rename from exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt rename to exercises-toolbox/2-numpy/report-example/loesung/v16516/data/Messwerte_Bahn.txt diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/2-numpy/report-example/loesung/v16516/data/Messwerte_Frames_Kugel.txt similarity index 100% rename from exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt rename to exercises-toolbox/2-numpy/report-example/loesung/v16516/data/Messwerte_Frames_Kugel.txt diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/2-numpy/report-example/loesung/v16516/data/Messwerte_Frames_Zylinder.txt similarity index 100% rename from exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt rename to exercises-toolbox/2-numpy/report-example/loesung/v16516/data/Messwerte_Frames_Zylinder.txt diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt b/exercises-toolbox/2-numpy/report-example/loesung/v16516/data/Messwerte_Kamera.txt similarity index 100% rename from exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt rename to exercises-toolbox/2-numpy/report-example/loesung/v16516/data/Messwerte_Kamera.txt diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt b/exercises-toolbox/2-numpy/report-example/loesung/v16516/data/Messwerte_Kugel.txt similarity index 100% rename from exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt rename to exercises-toolbox/2-numpy/report-example/loesung/v16516/data/Messwerte_Kugel.txt diff --git a/exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt b/exercises-toolbox/2-numpy/report-example/loesung/v16516/data/Messwerte_Zylinder.txt similarity index 100% rename from exercises-toolbox/2-numpy/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt rename to exercises-toolbox/2-numpy/report-example/loesung/v16516/data/Messwerte_Zylinder.txt diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/3-matplotlib/report-example/aufgabe.txt similarity index 100% rename from exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/aufgabe.txt rename to exercises-toolbox/3-matplotlib/report-example/aufgabe.txt diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py b/exercises-toolbox/3-matplotlib/report-example/loesung/v16515/auswertung.py similarity index 100% rename from exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py rename to exercises-toolbox/3-matplotlib/report-example/loesung/v16515/auswertung.py diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Bahn.txt b/exercises-toolbox/3-matplotlib/report-example/loesung/v16515/data/Messwerte_Bahn.txt similarity index 100% rename from exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Bahn.txt rename to exercises-toolbox/3-matplotlib/report-example/loesung/v16515/data/Messwerte_Bahn.txt diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/3-matplotlib/report-example/loesung/v16515/data/Messwerte_Frames_Kugel.txt similarity index 100% rename from exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Kugel.txt rename to exercises-toolbox/3-matplotlib/report-example/loesung/v16515/data/Messwerte_Frames_Kugel.txt diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/3-matplotlib/report-example/loesung/v16515/data/Messwerte_Frames_Zylinder.txt similarity index 100% rename from exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Zylinder.txt rename to exercises-toolbox/3-matplotlib/report-example/loesung/v16515/data/Messwerte_Frames_Zylinder.txt diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kamera.txt b/exercises-toolbox/3-matplotlib/report-example/loesung/v16515/data/Messwerte_Kamera.txt similarity index 100% rename from exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kamera.txt rename to exercises-toolbox/3-matplotlib/report-example/loesung/v16515/data/Messwerte_Kamera.txt diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kugel.txt b/exercises-toolbox/3-matplotlib/report-example/loesung/v16515/data/Messwerte_Kugel.txt similarity index 100% rename from exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kugel.txt rename to exercises-toolbox/3-matplotlib/report-example/loesung/v16515/data/Messwerte_Kugel.txt diff --git a/exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Zylinder.txt b/exercises-toolbox/3-matplotlib/report-example/loesung/v16515/data/Messwerte_Zylinder.txt similarity index 100% rename from exercises-toolbox/3-matplotlib/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Zylinder.txt rename to exercises-toolbox/3-matplotlib/report-example/loesung/v16515/data/Messwerte_Zylinder.txt diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/4-scipy/report-example/aufgabe.txt similarity index 100% rename from exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/aufgabe.txt rename to exercises-toolbox/4-scipy/report-example/aufgabe.txt diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py b/exercises-toolbox/4-scipy/report-example/loesung/v16515/auswertung.py similarity index 100% rename from exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/auswertung.py rename to exercises-toolbox/4-scipy/report-example/loesung/v16515/auswertung.py diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Bahn.txt b/exercises-toolbox/4-scipy/report-example/loesung/v16515/data/Messwerte_Bahn.txt similarity index 100% rename from exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Bahn.txt rename to exercises-toolbox/4-scipy/report-example/loesung/v16515/data/Messwerte_Bahn.txt diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/4-scipy/report-example/loesung/v16515/data/Messwerte_Frames_Kugel.txt similarity index 100% rename from exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Kugel.txt rename to exercises-toolbox/4-scipy/report-example/loesung/v16515/data/Messwerte_Frames_Kugel.txt diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/4-scipy/report-example/loesung/v16515/data/Messwerte_Frames_Zylinder.txt similarity index 100% rename from exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Frames_Zylinder.txt rename to exercises-toolbox/4-scipy/report-example/loesung/v16515/data/Messwerte_Frames_Zylinder.txt diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kamera.txt b/exercises-toolbox/4-scipy/report-example/loesung/v16515/data/Messwerte_Kamera.txt similarity index 100% rename from exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kamera.txt rename to exercises-toolbox/4-scipy/report-example/loesung/v16515/data/Messwerte_Kamera.txt diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kugel.txt b/exercises-toolbox/4-scipy/report-example/loesung/v16515/data/Messwerte_Kugel.txt similarity index 100% rename from exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Kugel.txt rename to exercises-toolbox/4-scipy/report-example/loesung/v16515/data/Messwerte_Kugel.txt diff --git a/exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Zylinder.txt b/exercises-toolbox/4-scipy/report-example/loesung/v16515/data/Messwerte_Zylinder.txt similarity index 100% rename from exercises-toolbox/4-scipy/Realistisches-Beispiel-Protokoll/loesung/v16515/data/Messwerte_Zylinder.txt rename to exercises-toolbox/4-scipy/report-example/loesung/v16515/data/Messwerte_Zylinder.txt diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/5-uncertainties/report-example/aufgabe.txt similarity index 100% rename from exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/aufgabe.txt rename to exercises-toolbox/5-uncertainties/report-example/aufgabe.txt diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py b/exercises-toolbox/5-uncertainties/report-example/loesung/v16516/auswertung.py similarity index 100% rename from exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py rename to exercises-toolbox/5-uncertainties/report-example/loesung/v16516/auswertung.py diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt b/exercises-toolbox/5-uncertainties/report-example/loesung/v16516/data/Messwerte_Bahn.txt similarity index 100% rename from exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt rename to exercises-toolbox/5-uncertainties/report-example/loesung/v16516/data/Messwerte_Bahn.txt diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/5-uncertainties/report-example/loesung/v16516/data/Messwerte_Frames_Kugel.txt similarity index 100% rename from exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt rename to exercises-toolbox/5-uncertainties/report-example/loesung/v16516/data/Messwerte_Frames_Kugel.txt diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/5-uncertainties/report-example/loesung/v16516/data/Messwerte_Frames_Zylinder.txt similarity index 100% rename from exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt rename to exercises-toolbox/5-uncertainties/report-example/loesung/v16516/data/Messwerte_Frames_Zylinder.txt diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt b/exercises-toolbox/5-uncertainties/report-example/loesung/v16516/data/Messwerte_Kamera.txt similarity index 100% rename from exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt rename to exercises-toolbox/5-uncertainties/report-example/loesung/v16516/data/Messwerte_Kamera.txt diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt b/exercises-toolbox/5-uncertainties/report-example/loesung/v16516/data/Messwerte_Kugel.txt similarity index 100% rename from exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt rename to exercises-toolbox/5-uncertainties/report-example/loesung/v16516/data/Messwerte_Kugel.txt diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt b/exercises-toolbox/5-uncertainties/report-example/loesung/v16516/data/Messwerte_Zylinder.txt similarity index 100% rename from exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt rename to exercises-toolbox/5-uncertainties/report-example/loesung/v16516/data/Messwerte_Zylinder.txt diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt b/exercises-toolbox/5-uncertainties/report-example/vorlage/v16516/data/Messwerte_Bahn.txt similarity index 100% rename from exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Bahn.txt rename to exercises-toolbox/5-uncertainties/report-example/vorlage/v16516/data/Messwerte_Bahn.txt diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/5-uncertainties/report-example/vorlage/v16516/data/Messwerte_Frames_Kugel.txt similarity index 100% rename from exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Kugel.txt rename to exercises-toolbox/5-uncertainties/report-example/vorlage/v16516/data/Messwerte_Frames_Kugel.txt diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/5-uncertainties/report-example/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt similarity index 100% rename from exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt rename to exercises-toolbox/5-uncertainties/report-example/vorlage/v16516/data/Messwerte_Frames_Zylinder.txt diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt b/exercises-toolbox/5-uncertainties/report-example/vorlage/v16516/data/Messwerte_Kamera.txt similarity index 100% rename from exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kamera.txt rename to exercises-toolbox/5-uncertainties/report-example/vorlage/v16516/data/Messwerte_Kamera.txt diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt b/exercises-toolbox/5-uncertainties/report-example/vorlage/v16516/data/Messwerte_Kugel.txt similarity index 100% rename from exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Kugel.txt rename to exercises-toolbox/5-uncertainties/report-example/vorlage/v16516/data/Messwerte_Kugel.txt diff --git a/exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt b/exercises-toolbox/5-uncertainties/report-example/vorlage/v16516/data/Messwerte_Zylinder.txt similarity index 100% rename from exercises-toolbox/5-uncertainties/Realistisches-Beispiel-Protokoll/vorlage/v16516/data/Messwerte_Zylinder.txt rename to exercises-toolbox/5-uncertainties/report-example/vorlage/v16516/data/Messwerte_Zylinder.txt diff --git a/exercises-toolbox/7-git/Realistisches-Beispiel-Protokoll/aufgabe.txt b/exercises-toolbox/7-git/report-example/aufgabe.txt similarity index 100% rename from exercises-toolbox/7-git/Realistisches-Beispiel-Protokoll/aufgabe.txt rename to exercises-toolbox/7-git/report-example/aufgabe.txt diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/Makefile b/exercises-toolbox/8-all/report-example/loesung/Makefile similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/Makefile rename to exercises-toolbox/8-all/report-example/loesung/Makefile diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/README.md b/exercises-toolbox/8-all/report-example/loesung/README.md similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/README.md rename to exercises-toolbox/8-all/report-example/loesung/README.md diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/header-matplotlib.tex b/exercises-toolbox/8-all/report-example/loesung/header-matplotlib.tex similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/header-matplotlib.tex rename to exercises-toolbox/8-all/report-example/loesung/header-matplotlib.tex diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/header.tex b/exercises-toolbox/8-all/report-example/loesung/header.tex similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/header.tex rename to exercises-toolbox/8-all/report-example/loesung/header.tex diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/lit.bib b/exercises-toolbox/8-all/report-example/loesung/lit.bib similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/lit.bib rename to exercises-toolbox/8-all/report-example/loesung/lit.bib diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/matplotlibrc b/exercises-toolbox/8-all/report-example/loesung/matplotlibrc similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/matplotlibrc rename to exercises-toolbox/8-all/report-example/loesung/matplotlibrc diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/programme.bib b/exercises-toolbox/8-all/report-example/loesung/programme.bib similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/programme.bib rename to exercises-toolbox/8-all/report-example/loesung/programme.bib diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/Makefile b/exercises-toolbox/8-all/report-example/loesung/v16516/Makefile similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/Makefile rename to exercises-toolbox/8-all/report-example/loesung/v16516/Makefile diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py b/exercises-toolbox/8-all/report-example/loesung/v16516/auswertung.py similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/auswertung.py rename to exercises-toolbox/8-all/report-example/loesung/v16516/auswertung.py diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/auswertung.tex b/exercises-toolbox/8-all/report-example/loesung/v16516/content/auswertung.tex similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/auswertung.tex rename to exercises-toolbox/8-all/report-example/loesung/v16516/content/auswertung.tex diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/diskussion.tex b/exercises-toolbox/8-all/report-example/loesung/v16516/content/diskussion.tex similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/diskussion.tex rename to exercises-toolbox/8-all/report-example/loesung/v16516/content/diskussion.tex diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/durchfuehrung.tex b/exercises-toolbox/8-all/report-example/loesung/v16516/content/durchfuehrung.tex similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/durchfuehrung.tex rename to exercises-toolbox/8-all/report-example/loesung/v16516/content/durchfuehrung.tex diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/theorie.tex b/exercises-toolbox/8-all/report-example/loesung/v16516/content/theorie.tex similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/content/theorie.tex rename to exercises-toolbox/8-all/report-example/loesung/v16516/content/theorie.tex diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/curve_fit.py b/exercises-toolbox/8-all/report-example/loesung/v16516/curve_fit.py similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/curve_fit.py rename to exercises-toolbox/8-all/report-example/loesung/v16516/curve_fit.py diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt b/exercises-toolbox/8-all/report-example/loesung/v16516/data/Messwerte_Bahn.txt similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Bahn.txt rename to exercises-toolbox/8-all/report-example/loesung/v16516/data/Messwerte_Bahn.txt diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt b/exercises-toolbox/8-all/report-example/loesung/v16516/data/Messwerte_Frames_Kugel.txt similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Kugel.txt rename to exercises-toolbox/8-all/report-example/loesung/v16516/data/Messwerte_Frames_Kugel.txt diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt b/exercises-toolbox/8-all/report-example/loesung/v16516/data/Messwerte_Frames_Zylinder.txt similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Frames_Zylinder.txt rename to exercises-toolbox/8-all/report-example/loesung/v16516/data/Messwerte_Frames_Zylinder.txt diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt b/exercises-toolbox/8-all/report-example/loesung/v16516/data/Messwerte_Kamera.txt similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kamera.txt rename to exercises-toolbox/8-all/report-example/loesung/v16516/data/Messwerte_Kamera.txt diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt b/exercises-toolbox/8-all/report-example/loesung/v16516/data/Messwerte_Kugel.txt similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Kugel.txt rename to exercises-toolbox/8-all/report-example/loesung/v16516/data/Messwerte_Kugel.txt diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt b/exercises-toolbox/8-all/report-example/loesung/v16516/data/Messwerte_Zylinder.txt similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/data/Messwerte_Zylinder.txt rename to exercises-toolbox/8-all/report-example/loesung/v16516/data/Messwerte_Zylinder.txt diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/latex_formatting.py b/exercises-toolbox/8-all/report-example/loesung/v16516/latex_formatting.py similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/latex_formatting.py rename to exercises-toolbox/8-all/report-example/loesung/v16516/latex_formatting.py diff --git a/exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/v16516.tex b/exercises-toolbox/8-all/report-example/loesung/v16516/v16516.tex similarity index 100% rename from exercises-toolbox/8-all/Realistisches-Beispiel-Protokoll/loesung/v16516/v16516.tex rename to exercises-toolbox/8-all/report-example/loesung/v16516/v16516.tex From 07d15889d6ca31c890a792bc1a1dab8bf516c376 Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 19:47:51 +0200 Subject: [PATCH 47/48] fixes from languagetool --- exercises-toolbox/1-python/example-report | Bin 0 -> 109569 bytes .../1-python/report-example/aufgabe.txt | 8 ++++---- .../2-numpy/report-example/aufgabe.txt | 4 ++-- .../loesung/v16516/auswertung.py | 12 ++++++------ .../3-matplotlib/report-example/aufgabe.txt | 12 ++++++------ .../loesung/v16515/auswertung.py | 11 ++++++----- .../4-scipy/report-example/aufgabe.txt | 10 +++++----- .../loesung/v16515/auswertung.py | 10 +++++----- .../report-example/aufgabe.txt | 8 ++++---- .../loesung/v16516/auswertung.py | 18 +++++++++--------- .../7-git/report-example/aufgabe.txt | 12 +++++------- .../loesung/v16516/auswertung.py | 4 ++-- 12 files changed, 54 insertions(+), 55 deletions(-) create mode 100644 exercises-toolbox/1-python/example-report diff --git a/exercises-toolbox/1-python/example-report b/exercises-toolbox/1-python/example-report new file mode 100644 index 0000000000000000000000000000000000000000..43318a9ce35524f4544573e19bd7191e53cf1a2f GIT binary patch literal 109569 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≶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 Fe*mU`%BKJT literal 0 HcmV?d00001 diff --git a/exercises-toolbox/1-python/report-example/aufgabe.txt b/exercises-toolbox/1-python/report-example/aufgabe.txt index c04c96f3..b9f4237c 100644 --- a/exercises-toolbox/1-python/report-example/aufgabe.txt +++ b/exercises-toolbox/1-python/report-example/aufgabe.txt @@ -6,7 +6,7 @@ Wie der Name der Aufgabe schon verspricht, werdet ihr im Zuge dieser Aufgabe ein 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. +Um zu wissen, wo es hingeht, findet ihr auch in diesem Ordner schon das vollständige Protokoll zum Ansehen. Aufgabe: @@ -15,13 +15,13 @@ des Ordners in dem ihr diese Aufgabe immer weiter ergänzt. Dieser Ordner heißt 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 wars schon, morgen gehts weiter. +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 schomal abgenommen. ;) +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. ;) diff --git a/exercises-toolbox/2-numpy/report-example/aufgabe.txt b/exercises-toolbox/2-numpy/report-example/aufgabe.txt index 64ffb074..df77421e 100644 --- a/exercises-toolbox/2-numpy/report-example/aufgabe.txt +++ b/exercises-toolbox/2-numpy/report-example/aufgabe.txt @@ -9,13 +9,13 @@ 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', leßt die Messwerte in den Dateien im Ordner 'data' ein +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 des herabrollens für die beiden Messreihen + - 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 diff --git a/exercises-toolbox/2-numpy/report-example/loesung/v16516/auswertung.py b/exercises-toolbox/2-numpy/report-example/loesung/v16516/auswertung.py index d3b8a949..f584f4fd 100644 --- a/exercises-toolbox/2-numpy/report-example/loesung/v16516/auswertung.py +++ b/exercises-toolbox/2-numpy/report-example/loesung/v16516/auswertung.py @@ -5,7 +5,7 @@ # Kommentar: # Die Daten liegen im Ordner 'data'. Um die Dateien einlesen -# zu können reicht es deswegen nicht den Dateinamen anzugeben +# 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 @@ -15,7 +15,7 @@ # 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 +# 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 @@ -46,8 +46,8 @@ h_c = h_c/100 # m # Kommentar: -# Eine gewisses Maß an Struktur in der Benennung von Variablen hilft bei der Orientierung, -# garade in der Zusammenarbeit mit euren jeweiligen Partnern. +# 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. @@ -99,14 +99,14 @@ # 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 Anweisungs, diese Anzahl +# 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 +# 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) diff --git a/exercises-toolbox/3-matplotlib/report-example/aufgabe.txt b/exercises-toolbox/3-matplotlib/report-example/aufgabe.txt index 341bf407..2b8e8c97 100644 --- a/exercises-toolbox/3-matplotlib/report-example/aufgabe.txt +++ b/exercises-toolbox/3-matplotlib/report-example/aufgabe.txt @@ -15,14 +15,14 @@ Erstellt für jede Messreihe (Kugel, Zylinder) jeweils eine Abbildung: 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 Kurven bereits in die Plots einzeichnen. +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) - Als 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 Theoriekurven verwendert werden können. - (da matplotlib im Prinzip einzelne Punkte zeichnet bzw. diese mit Geraden verbindet, braucht man für Theoriekurven +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 Theoriekurven im jeweiligen plot der Messwerte. +5. Ergänzt die Theorie-Funktion im jeweiligen plot der Messwerte. diff --git a/exercises-toolbox/3-matplotlib/report-example/loesung/v16515/auswertung.py b/exercises-toolbox/3-matplotlib/report-example/loesung/v16515/auswertung.py index 31cec5a6..b97041f4 100644 --- a/exercises-toolbox/3-matplotlib/report-example/loesung/v16515/auswertung.py +++ b/exercises-toolbox/3-matplotlib/report-example/loesung/v16515/auswertung.py @@ -94,10 +94,11 @@ # Erstelle Plots der Messwerte t_._mean und h_._mean # Kommentar: -# Funktionen für die Funktionsgleichungen der Theoriekurven +# Funktionen für die Funktionsgleichungen der Theorie-Funktionen +# # In Funktionen können Variablen verwendet werden, die außerhalb (global) definiert wurden # wie hier: l, ri_c und ro_c -# Solche golbalen Variablen können bei größeren Skripten/Programmen zu einem Problem werden +# Solche globalen Variablen können bei größeren Skripten/Programmen zu einem Problem werden # es ist also zumindest Vorsicht geboten def theory_t_ball(h): @@ -107,9 +108,9 @@ def theory_t_cylinder(h): return np.sqrt((3 + ri_c**2/ro_c**2) * l**2/9.81 * 1/h) # Kommentar: -# Die Werte für h die im Plot der Theoriekurven verwendet werden, damit diese -# auch tatsächlich aussieht wie eine differenzierbare Funktion -# Der Bereich in dem diese Werte liegen entspricht aber dem der Messwerte ca. [0.03, 0.33] +# Die Werte für h die im Plot der Theorie-Funktionen verwendet werden, damit diese +# auch tatsächlich aussieht wie eine differenzierbare Funktion. +# Der Bereich in dem diese Werte liegen entspricht, aber dem der Messwerte ca. [0.03, 0.33] h_plot = np.linspace(0.03, 0.33, 205) diff --git a/exercises-toolbox/4-scipy/report-example/aufgabe.txt b/exercises-toolbox/4-scipy/report-example/aufgabe.txt index 43eb4fb0..2447217a 100644 --- a/exercises-toolbox/4-scipy/report-example/aufgabe.txt +++ b/exercises-toolbox/4-scipy/report-example/aufgabe.txt @@ -13,11 +13,11 @@ zu Fit-Funktionen abändern und so physikalische Größen als Fit-Parameter best 1. Ändert die Theorie-Funktionen aus der letzten Aufgabe zu Fit-Funktionen, diese benötigen zusätzliche Argumente für die Fit-Parameter. Und diese Fit-Parameter müssen auch in der Funktion verwendet werden. Konkret: - - Die Fallbeschleunigung g die in der letzten Aufgabe als 9.81 angenommen wurde ist jetzt ein - Fit-Parameter g + - Die Fallbeschleunigung g die in der letzten Aufgabe als 9.81 angenommen wurde, ist jetzt ein + Fit-Parameter g. - Außerdem ist noch ein weiterer Parameter t0 nötig, wie ihr dem finalen Beispielprotokoll entnehmen könnt. -2. Importiert die Funktion curve_fit aus scypy.optimize +2. Importiert die Funktion curve_fit aus scipy.optimize. 3. Für jede der beiden Messreihen: Verwendet curve_fit, um aus den gemittelten Messwerten für Höhe und Zeit die beiden Fit-Parameter @@ -26,10 +26,10 @@ zu Fit-Funktionen abändern und so physikalische Größen als Fit-Parameter best 4. Gebt die Parameter mit ihrer zugehörigen Unsicherheit auf das Terminal aus. 5. Entfernt die Theorie-Funktionen aus den Plots und fügt stattdessen die Fit-Funktionen - mit den berechneten Parametern hinzu + mit den berechneten Parametern hinzu. 6. Im finalen Beispielprotokoll wurden auch das Trägheitsmoment der Objekte durch einen weiteren Fit bestimmt (dabei ist dann der Theoriewert von g anzunehmen). - Ergäzt die notwendigen Fit-Funktionen und Plots für diesen Auswertungsschritt in dem ihr die + Ergänzt die notwendigen Fit-Funktionen und Plots für diesen Auswertungsschritt in dem ihr die vorangegangenen Schritte für diesen Fit wiederholt. diff --git a/exercises-toolbox/4-scipy/report-example/loesung/v16515/auswertung.py b/exercises-toolbox/4-scipy/report-example/loesung/v16515/auswertung.py index 133a99dc..db624544 100644 --- a/exercises-toolbox/4-scipy/report-example/loesung/v16515/auswertung.py +++ b/exercises-toolbox/4-scipy/report-example/loesung/v16515/auswertung.py @@ -98,7 +98,7 @@ # Kommentar: -# Umwandeln der Theorie-Funktion zu einer Fitfunktion: +# Umwandeln der Theorie-Funktion zu einer Fit-Funktion: # Die Funktion erhält ein zusätzliches Argument für jeden Fitparameter, hier: g und t0 # diese müssen auch in der Funktion verwendet werden. # @@ -154,8 +154,8 @@ def fit_g_cylinder(h, g, t0): # Kommentar: # Analog für die Messreihe des Zylinders -# Achtung! Copy und Paste ist natürlich gängige Praxis, -# aber alle Varialben müssen angepasst werden. +# Achtung! Copy-and-paste ist natürlich gängige Praxis, +# aber alle Variablen müssen angepasst werden. # Berechnung der Fitparameter für den Zylinder params, covariance_matrix = curve_fit(fit_g_cylinder, h_c_mean, t_c_mean) @@ -210,8 +210,8 @@ def fit_I_cylinder(h, I, t0): # bounds=([0,-np.inf],[+np.inf,+np.inf]) # als zusätzliches Argument für curve_fit ergänzt werden. # bounds gibt den minimalen und den maximalen Wert für alle Parameter an, -# und zwar zuerst alle Minimima und dann alle Maxima, -# in diesem konkrete Beispiel steht bounds also für: 0 < I < +np.inf und -np.inf < t0 < +np.inf +# und zwar zuerst alle Minima und dann alle Maxima, +# in diesem konkreten Beispiel steht bounds also für: 0 < I < +np.inf und -np.inf < t0 < +np.inf # Berechnung der Fitparameter für die Kugel diff --git a/exercises-toolbox/5-uncertainties/report-example/aufgabe.txt b/exercises-toolbox/5-uncertainties/report-example/aufgabe.txt index dc265fbd..6a33b232 100644 --- a/exercises-toolbox/5-uncertainties/report-example/aufgabe.txt +++ b/exercises-toolbox/5-uncertainties/report-example/aufgabe.txt @@ -16,7 +16,7 @@ mit Unsicherheiten zu haben. Die alten Dateien könnt ihr überschreiben oder vo 2. Importiert uncertainties und uncertainties.unumpy in eurer auswertung.py -3. Ergänzt das Einlesen der Messdaten um die zusätzlichen Spalten mit unsicherheiten, +3. Ergänzt das Einlesen der Messdaten um die zusätzlichen Spalten mit Unsicherheiten, eine Benennung der Form l_unc für "Unsicherheit des Messwerts l" ist hier sinnvoll 4. Die eingelesenen Messwerte und Unsicherheiten müssen jetzt zu unsicherheitbehafteten @@ -27,13 +27,13 @@ mit Unsicherheiten zu haben. Die alten Dateien könnt ihr überschreiben oder vo die dafür nötige Funktion heißt nominal_values und es bietet sich an diese in abgekürzter Form zu importieren (genauso wie die Funktion std_devs): from uncertainties.unumpy import (nominal_values as noms, std_devs as stds) - Dann kann die Funktion noms() verwendet werden, um die Unsicherheit eines Wertes + dann kann die Funktion noms() verwendet werden, um die Unsicherheit eines Wertes zu entfernen. 6. curve_fit kann mit Unsicherheiten nicht direkt umgehen, die unabhängige Variable darf keine Unsicherheiten haben und den Wert bzw. die Unsicherheit - der abhängige Varialbe müssen getrennt übergeben werden. + der abhängige Variable müssen getrennt übergeben werden. -7. matplotlib kann auch nicht mit den unsicherheiten umgehen: +7. matplotlib kann auch nicht mit den Unsicherheiten umgehen: Verwendet statt ax.plot die Funktion ax.errorbar um die Messwerte mit ihren Unsicherheiten darzustellen. diff --git a/exercises-toolbox/5-uncertainties/report-example/loesung/v16516/auswertung.py b/exercises-toolbox/5-uncertainties/report-example/loesung/v16516/auswertung.py index 32cf7101..dda11ba7 100644 --- a/exercises-toolbox/5-uncertainties/report-example/loesung/v16516/auswertung.py +++ b/exercises-toolbox/5-uncertainties/report-example/loesung/v16516/auswertung.py @@ -18,15 +18,15 @@ # Kommentar: -# Die Dateien im Ordner data enthalten jetzt auch spalten mit den Unsicherheiten -# für die meisten Messwerte +# Die Dateien im Ordner data enthalten jetzt auch Spalten mit den Unsicherheiten +# für die meisten Messwerte. # Beim Importieren der Daten muss beachtet werden, dass: # (1) Messgröße und Unsicherheit jeweils eine eigene Variablennamen brauchen. # Auch hier ist eine konsistente Benennung sinnvoll # z.B. l (Messwerte) und l_unc (zugehörige Unsicherheiten) # # (2) die Unsicherheitbehafteten Messwerte noch erstellt werden müssen, -# entweder durch unc.ufloat oder druch das unp.uarray +# entweder durch unc.ufloat oder durch das unp.uarray # Länge der schiefen Ebene @@ -64,7 +64,7 @@ # Kommentar: -# Die folgenden Berechnungen funktionieren alle weiterhin, nur jetzt mit automatischen Fehlerrechnung +# Die folgenden Berechnungen funktionieren alle weiterhin, nur jetzt mit automatischer Fehlerrechnung # Berechnung der benötigten Größen: Radius und Trägheitsmoment @@ -137,21 +137,21 @@ # Messwerten umgehen. # Folgendes muss dafür geändert werden: # -# (1) in der Fitfunktien müssen mit der Funktion noms() +# (1) in der Fitfunktion müssen mit der Funktion noms() # die Unsicherheiten von Konstanten entfernt werden # # (2) mit Unsicherheiten der unabhängigen Variable kann curve_fit nicht umgehen, # diese müssen mit noms() entfernt werden. # -# (3) die Werte und Unsicherheiten der abhängigen Variable (gemessene Funktionswerte) +# (3) die Werte und Unsicherheiten der abhängigen Variable (gemessene Funktionswerte) # müssen getrennt übergeben werden: noms() und stds() # # (4) die Darstellung der Messwerte im Plot wird durch errorbar() ersetzt, # um die Unsicherheiten anzeigen zu können # # In der Aufgabe 3-curve_fit muss eine Funktion ucurve_fit geschrieben werden, -# die die scipy funktion curve_fit verwendet, die aber den umgang mit den -# Unsicherheiten abstrahiert, sodass man das nicht jedes mal aufs neue machen muss. +# die die scipy Funktion curve_fit verwendet, die aber den Umgang mit den +# Unsicherheiten abstrahiert, sodass man das nicht jedes Mal aufs neue machen muss. @@ -175,7 +175,7 @@ def fit_g_cylinder(h, g, t0): h_plot = np.linspace(0.03, 0.33, 205) -# Fit Parameter für den Zylinder +# Fitparameter für den Zylinder fig, ax = plt.subplots(1, 1, layout="constrained") diff --git a/exercises-toolbox/7-git/report-example/aufgabe.txt b/exercises-toolbox/7-git/report-example/aufgabe.txt index 98d10eb4..c16906de 100644 --- a/exercises-toolbox/7-git/report-example/aufgabe.txt +++ b/exercises-toolbox/7-git/report-example/aufgabe.txt @@ -15,7 +15,7 @@ einen neuen Ordner (z.B. Beispiel-Praktikum). 2) Verschiebt den Ordner v16516 in den neuen Ordner Beispiel-Praktikum. -3) Navigiert mit dem Terminal in den neuen Ordner und intitialisiert in diesem ein Git-Repository (init). +3) Navigiert mit dem Terminal in den neuen Ordner und initialisiert in diesem ein Git-Repository (init). 4) Fügt alle Dateien zum Repository hinzu (add, commit). @@ -26,17 +26,15 @@ Repository auf Github hochladen: 6) Navigiert zu https://github.com/dashboard. Erstellt über den Button "New" ein neues Repository. Für diese Aufgabe müsst ihr dem Repository nur einen Namen geben, alle optionalen Einstellungen könnt ihr unverändert lassen. - Nach dem erstellen werden euch drei Möglichkeiten vorgeschlagen fortzufahren, da wir bereits einen + Nach dem Erstellen werden euch drei Möglichkeiten vorgeschlagen fortzufahren, da wir bereits einen Repository auf dem Computer haben wählen wir die dritte Option: - - "…or push an existing repository from the command line" - git remote add origin git@github.com:LuckyJosh/TestTestTest.git + "…or push an existing repository from the command line" + git remote add origin git@github.com:/.git git branch -M main git push -u origin main - 7) Navigiert mit dem Terminal in euer Beispiel-Praktikum Git-Repository und gebt die drei obigen - Befehle ein. + Befehle ein, am besten durch Kopieren aus dem Browser. 8) Schaut euch euer Repository auf https://github.com/ an. diff --git a/exercises-toolbox/8-all/report-example/loesung/v16516/auswertung.py b/exercises-toolbox/8-all/report-example/loesung/v16516/auswertung.py index 33a72782..9b5eced9 100644 --- a/exercises-toolbox/8-all/report-example/loesung/v16516/auswertung.py +++ b/exercises-toolbox/8-all/report-example/loesung/v16516/auswertung.py @@ -65,7 +65,7 @@ t_B = durations_ball = (ff_B - fi_B) / framerate #s -# each height was measured 3 times => calculating the mean of these measurments +# each height was measured 3 times => calculating the mean of these measurements # selecting each height once h_B = h_B.reshape(-1, 3)[:,0] t_B = t_B.reshape(-1, 3).mean(axis=1) @@ -85,7 +85,7 @@ t_C = durations_cylinder = (ff_C - fi_C) / framerate #s -# each height was measured 3 times => calculating the mean of these measurments +# each height was measured 3 times => calculating the mean of these measurements # selecting each height once h_C = h_C.reshape(-1, 3)[:,0] t_C = t_C.reshape(-1, 3).mean(axis=1) From 2b62abe8bf410910abd3eb482cee00276b40792e Mon Sep 17 00:00:00 2001 From: Joshua Luckey Date: Sun, 22 Sep 2024 20:17:22 +0200 Subject: [PATCH 48/48] add Makefiles for the report-example --- exercises-toolbox/1-python/Makefile | 8 +++++++- exercises-toolbox/8-all/report-example/Makefile-loesung | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 exercises-toolbox/8-all/report-example/Makefile-loesung diff --git a/exercises-toolbox/1-python/Makefile b/exercises-toolbox/1-python/Makefile index 661a5fc7..c0bd8ffb 100644 --- a/exercises-toolbox/1-python/Makefile +++ b/exercises-toolbox/1-python/Makefile @@ -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/ diff --git a/exercises-toolbox/8-all/report-example/Makefile-loesung b/exercises-toolbox/8-all/report-example/Makefile-loesung new file mode 100644 index 00000000..615f1166 --- /dev/null +++ b/exercises-toolbox/8-all/report-example/Makefile-loesung @@ -0,0 +1,2 @@ +all: + $(MAKE) -C loesung