{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"# Computergestützte Datenauswertung\n",
"**Institut für Experimentelle Teilchenphysik (ETP)**
\n",
"**Institut für Theorie der Kondensierten Materie (TKM)**
\n",
"Prof. Dr. Ulrich Husemann (ETP)
\n",
"Dr. Thorsten Chwalek (ETP), Dr. Andreas Poenicke (TKM)
\n",
"[ILIAS-Seite zum Kurs](https://ilias.studium.kit.edu/ilias.php?baseClass=ilrepositorygui&ref_id=2627198)
\n",
"Sommersemester 2025 – Blatt 0
\n",
"\n",
"---"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Dieses \"nullten\" Übungsblatt ist ein Angebot für Sie, sich mit der Arbeitsumgebung für den Kurs *Computergestützte Datenauswertung* (CgdA) vertraut zu machen und gegebenenfalls mit Ihren Tutor:innen Schwierigkeiten zu besprechen. Die Arbeitsumgebung besteht aus *Jupyter*-Notebooks und der Programmiersprache *Python*, wie Sie sie im Kurs *Programmieren und Algorithmen* (PuA) kennengelernt haben. *Jupyter*-Notebooks und *Python* werden auch im physikalischen Praktikum ab dem 3. Fachsemester eingesetzt. Wenn Sie mit dieser Arbeitsumgebung bereits vertraut sind, können Sie dieses Übungsblatt einfach überspringen. \n",
"\n",
"Zunächst noch einige ergänzende Worte zu der Umgebung:
\n",
"Die Umgebung, in der Sie hier arbeiten, wird als *Jupyter*-Notebook bezeichnet. \n",
"*Jupyter*-Notebooks sind Dateien vom Typ *.ipynb*, die sowohl erklärenden Text und Grafiken als auch Anweisungen für den Computer in unterschiedlichen Programmiersprachen enthalten. In CgDA sind dies das intuitive *Markdown*-Format für Texte und die Programmiersprache *Python*. Eingaben im $\\LaTeX$-Format, z. B. zur komfortablen und grafisch ansprechenden Gestaltung von Formeln, werden ebenfalls unterstützt. \n",
"\n",
"*Jupyter*-Notebooks können mit unterschiedlichen Programmen editiert und ausgeführt werden. Wenn Sie aus PuA bereits eine Arbeitsumgebung mit einer *Python*-Installation und dem Quelltexteditor *Visual Studio Code* (VS Code) besitzen, können Sie diese für CgDA weiter verwenden. Um ein *Jupyter*-Notebook ausführen zu können, muss die Extension *Jupyter* in VS Code installiert sein, die dann auf eine existierende *Python*-Installation zugreift. Beim Öffnen eines Notebooks muss einmalig ein installierter Python-Kernel ausgewählt werden.\n",
"\n",
"Alternativ bietet *JupyterLab* eine interaktive Browser-Schnittstelle mit einer (einfachen) Entwicklungsumgebung für Anweisungen. Wenn Ihre *Python*-Installation *JupyterLab* beinhaltet, können Sie einen Server lokal starten. Ansonsten haben Sie Zugriff auf den neuen landesweiten Service *bwJupyter*.\n",
"Die *JupyterLab*-Oberfläche lässt sich zwar komplett mit der Maus bedienen, viel effizienter ist es allerdings, nach einiger Eingewöhnung die Tastatur zu benutzen. \n",
"Eine kleine Liste an Tastenkürzeln (genannt \"*Jupyter*-Shortcuts\") ist hier - als Tabelle im *Markdown*-Format:\n",
"\n",
" Modus | Befehl | Aktion |\n",
":-----------------|:------------------|:--------------------------------------------|\n",
"**A**llgemein | `esc` | verlässt Editiermodus |\n",
" A | `enter` | geht in Editiermodus | \n",
"**E**ditiermodus | `shift` + `enter` | führt Zelle aus und geht zur nächsten |\n",
" E | `ctrl` + `enter` | führt Zelle aus |\n",
"**K**ommandomodus | `d,d` | löscht aktuelle Zelle |\n",
" K | `z` | macht Zellenlöschung rückgängig |\n",
" K | `a` | fügt neue Zelle überhalb der aktuellen ein |\n",
" K | `b` | fügt neue Zelle unterhalb der aktuellen ein |\n",
" K | `m` | ändert zu Markdown |\n",
" K | `y` | ändert zu Code |\n",
"\n",
"\n",
"Durch Doppelklick in diese Zelle sehen Sie den eingegebenen Text, wenn Sie `shift` + `enter` eingeben, wird die Zelle formatiert und Sie sehen eine schön gesetzte Tabelle. \n",
"\n",
"Bitte ausprobieren! "
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# Beispiel eines Jupyter-Notebooks\n",
"\n",
"Dies ist ein Text-Block (\"Markdown\"), hier kann man formatierten Text schreiben (z.B. $\\LaTeX$), welcher dann entsprechend dargestellt wird.\n",
"\n",
"Weiter unten befinden sich mehrere Code-Blöcke (\"Code\"), darin stehen die Python-Anweisungen, welche ausgeführt werden sollen.\n",
"\n",
"Führen Sie jede Zelle des Notebooks aus ($\\blacktriangleright$), wenn alles funktioniert hat, sehen Sie am Ende den Graph einer Ihnen bereits bekannten Funktion. \n",
"Die Bedeutung der einzelnen Befehle lernen Sie noch in der Vorlesung."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Import weiterer Python-Module"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Definition einer Funktion"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"t = np.arange(0.0, 2.0, 0.01)\n",
"s = 1 + np.sin(2 * np.pi * t)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Plotten der Funktion"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fig, ax = plt.subplots()\n",
"ax.plot(t, s)\n",
"ax.set(xlabel='time (s)', ylabel='voltage (mV)', title='example')\n",
"ax.grid()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# Erste Schritte in Python\n",
"\n",
"Im Kurs *Programmieren und Algorithmen* haben Sie die weitverbreitete Programmiersprache *Python* kennengelernt.\n",
"Mit der ersten Aufgabe auf diesem Blatt sollen Sie sich mit dem Schreiben von Funktionen in *Python* vertraut machen.\n",
"Funktionen sind ein wesentlicher Bestandteil jeder modernen Programmiersprache und kommen immer üblicherweise dann zum Einsatz, wenn Sie eine Anweisung mehrfach ausführen möchten.\n",
"Die Syntax für Funktionsdefinitionen in *Python* sieht aus wie folgt:\n",
"\n",
"```python\n",
"def function_name():\n",
" \n",
" return \n",
"```\n",
"\n",
"Den `` können Sie komplett selbstständig wählen. \n",
"Bis auf einige wenige *Python*-interne Funktionennamen hat die Auswahl des Namens keinerlei Auswirkungen.\n",
"Für sich selbst oder weitere Personen, die Ihren Code irgendwann lesen, sollten Sie jedoch immer einen möglichst aussagekräftigen Namen wählen. International üblich sind Namen in englischer Sprache.\n",
"\n",
"Die `` legt alle funktionsinternen Variablen fest.\n",
"Sie können den Parametern bereits an dieser Stelle Standardwerte geben. \n",
"Diese Parameter müssen dann nicht zwingend beim Funktionsaufruf mit angegeben werden.\n",
"Definieren Sie beispielsweise `def function(a, b=2):`, dann müssen Sie beim Aufruf der Funktion mindestens den Parameter `a` angeben, wenn Sie `b` nicht angeben, hat diese Variable den Wert 2.\n",
"Beispielhafte Aufrufe:\n",
"```python\n",
"function(1)\n",
"function(1, 1)\n",
"function(1, b=1)\n",
"function(a=1, b=1)\n",
"```\n",
"\n",
"Bei `` steht der Code, den Sie in der Funktion definieren wollen.\n",
"Die Anweisung `return ` legt die Ausgabe der Funktion fest.\n",
"Sie können die `return`-Anweisung auch weglassen, wenn Ihre Funktionen keine Ausgabe benötigt."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Arbeitsanweisung:**
\n",
"Schreiben Sie selbst zwei Funktionen zur Berechnung von Fakultäten $n!$ (engl.: factorial). \n",
"Implementieren Sie hierzu die explizite und rekursive Definition der Fakultät in *Python* in der nächsten Zelle und verwenden Sie keine externen Bibliotheken zur Berechnung.\n",
"\n",
"**Hinweis zur Vorgehensweise beim Programmieren:**
\n",
"Während der Programmentwicklung empfiehlt es sich, neu eingegebenen Code regelmäßig zu testen.\n",
"Es ist auch üblich und sinnvoll, mit jeweils geeignet platzierten `print`-Befehlen zu überprüfen, ob wirklich genau das geschieht, was Sie sich vorgestellt hatten.\n",
"Es ist normal, dass *Python* Sie gelegentlich mit Fehlermeldungen konfrontiert, die auf den ersten Blick nicht immer einsichtig sind. \n",
"Korrigieren und testen Sie Ihren Code und bauen Sie Ihre Programme so schrittweise aus gut getesteten Einzelkomponenten auf, bis Sie am Ende ein zufriedenstellendes Gesamtergebnis erhalten.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Berechnung als Funktion über explizite Definition\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Berechnung über rekursive Funktion\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Überprüfen Sie Ihre Funktionsdefinitionen, indem Sie das Ergebnis der beiden Funktionen für die Werte $n=2,\\dots, 10$ ausgeben lassen."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Aufruf der Funktion innerhalb einer Schleife über die geforderten Werte\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}