diff --git a/.gitignore b/.gitignore index b931492..01a1f47 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ __pycache__/ typst/ +Hahn_gamma* diff --git a/S2/AnaMech/AM_EX5.py b/S2/AnaMech/AM_EX5.py deleted file mode 100644 index 42b4df3..0000000 --- a/S2/AnaMech/AM_EX5.py +++ /dev/null @@ -1,127 +0,0 @@ -# # Numerische Berechnung der Trajektorien des harmonischen Oszillators - -# Die Bewegung eines (gedämpften) harmonischen Oszillators wird durch die DGL zweiter Ordnung -# \begin{equation} -# \frac{d^2 x(t)}{dt^2} + 2 \gamma \frac{d x(t)}{dt} + \omega^2 x(t) = 0\tag{1} -# \end{equation} -# beschrieben. -# Um die DGL numerisch zu lösen, überführen wir sie zunächst in ein System gekoppelter DGLs erster Ordnung: -# \begin{align} -# \frac{d x}{dt} &= f\tag{2}\\ -# \frac{d v}{dt} &= g,\tag{3} -# \end{align} -# wobei $v(t) = \dot{x}(t)$ die Geschwindigkeit ist. -# Ihre erste Aufgabe ist es, diese zwei DGL zu vervollständigen (d.h. $f$ und $g$ sind zu bestimmen). -# -# Im folgenden sollen die DGLs numerisch mithilfe des Eulerverfahrens gelöst werden. -# Dazu werden die Ableitungen wie folgt diskretisiert, wobei $\Delta t$ der Wert des Zeitschritts ist, den Sie in der Simulation nutzen: -# \begin{align} -# \frac{d x}{dt} &\approx \frac{x(t+\Delta t) - x(t)}{\Delta t} \tag{4}\\ -# \frac{d v}{dt} &\approx \frac{v(t+\Delta t) - v(t)}{\Delta t}\,.\tag{5} -# \end{align} -# -# Setzt man diese Näherungen der Ableitungen in (2) bzw. (3) ein, erhält man eine Approximation für die Änderung von $x$ bzw. $v$ im aktuellen Zeitschritt durch die Beziehungen -# \begin{align} -# x(t+\Delta t) =&\ x(t) + \Delta t \, f\tag{6}\\ -# v(t+\Delta t) =&\ v(t) + \Delta t \, g\tag{7} \, . -# \end{align} -# Sie können den Code gleich für den allgemeinen Fall implementieren. -# Führen Sie aber, wie im Aufgabentext erläutert, zunächst im a)-Teil die erforderlichen Simulationen für den ungedämpften harmonischen Oszillator ($\gamma = 0$) durch, danach im b)-Teil mit dem angegebenen Wert für $\gamma$.\\ -# Berechnen und plotten Sie im Verlauf der Simulationen auch die Gesamtenergie als Funktion der Zeit, $E(t) = T(t) + V(t)$, wobei $T(t)$ die Zeitentwicklung der kinetischen Energie und $V(t)$ die potenzielle Energie als Funktion der Zeit ist. -# (Sie können annehmen, dass die Masse des Oszillators $m=1$ ist.) - -# In[ ]: - - -# Hilfreiche Pakete -import numpy as np -import matplotlib.pyplot as plt -import math - -# Konstanten -from scipy.constants import g - -# Sinnvolle Konstanten -x0 = 1 -v0 = 0 -omega0 = 1 -gamma = 0 -dt = 1e-2 # Kleiner Zeitschritt -tmax = 20 # Max time for the algorithm to terminate - -# Initial values -x_t = [x0] -x_t_exact = [x0] -v_t = [v0] -v_t_exact = [v0] -T_t = [0.5*v0*v0] -V_t = [0.5*omega0*omega0*x0*x0] -E_t = [T_t+V_t] - -# exakter Wert der Energie: -E_exact = E_t[0] -Ediff_t = [0] - -# Implementation of the Euler-Algorithm -for _ in range(int(tmax // dt)): - f = ??? - x = x_t[-1] + f * dt # Calc new position - v = ??? # calc new velocity - x_t.append(x) - v_t.append(v) - - x_exact = ??? - v_exact = ??? - x_t_exact.append(x_exact) - v_t_exact.append(v_exact) - - T = ??? - V = k/2 * x^2 * - E = T + V - T_t.append(T) - V_t.append(V) - E_t.append(E) - Ediff_t.append(E-E_exact) - - - -# TIPP: Zum erstellen mehrerer Plots auf einmal, siehe z.B.: -# https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/subplot.html - -kwargs = {'c':'b'} -font_kwargs = {'fontsize':14} -times = np.arange(0,len(x_t))*dt -abs_max = max(x_t, key=abs) - -fig,ax = plt.subplots(1,4,figsize=(10,5)) - -#actual plots -ax[0].plot(times,x_t,**kwargs) -ax[1].plot(x_t,v_t,**kwargs) -ax[2].plot(times,T_t,label = "T") -ax[2].plot(times,V_t,label = "V") -ax[2].plot(times,E_t,label = "E = T+V") -ax[3].plot(times,Ediff_t,label = "Fehler in der Energie") - -#style changes -ax[0].set_xlim(0,len(x_t)*dt) -ax[0].set_ylim(-abs_max,abs_max) -ax[0].set_xlabel("t",**font_kwargs) -ax[0].set_ylabel("$x(t)$",**font_kwargs) - -ax[1].set_xlabel("$x(t)$",**font_kwargs) -ax[1].set_ylabel("$v(t)$",**font_kwargs) - -ax[2].set_xlim(0,len(x_t)*dt) -ax[2].set_ylim(-abs_max,abs_max) -ax[2].set_xlabel("t",**font_kwargs) -ax[2].set_ylabel("Energies",**font_kwargs) - -ax[2].set_xlim(0,len(x_t)*dt) -ax[2].set_ylim(-abs_max,abs_max) -ax[2].set_xlabel("t",**font_kwargs) -ax[2].set_ylabel("Differenz",**font_kwargs) - -plt.legend() -plt.show() - diff --git a/S2/AnaMech/other/Hahn_AM_EX5.py b/S2/AnaMech/other/Hahn_AM_EX5.py new file mode 100644 index 0000000..85a910e --- /dev/null +++ b/S2/AnaMech/other/Hahn_AM_EX5.py @@ -0,0 +1,114 @@ +# # Numerische Berechnung der Trajektorien des harmonischen Oszillators + +# Hilfreiche Pakete +import numpy as np +import matplotlib.pyplot as plt +import math + +# Konstanten +from scipy.constants import g + +# Sinnvolle Konstanten +def run_sim(gamma = 0, dt = 1e-2): + x0 = 1 + v0 = 0 + omega0 = 1 + tmax = 20 # Max time for the algorithm to terminate + + # Initial values + x_t = [x0] + x_t_exact = [x0] + v_t = [v0] + v_t_exact = [v0] + T_t = [0.5*v0*v0] + V_t = [0.5*omega0*omega0*x0*x0] + E_t = [T_t[0]+V_t[0]] + + # exakter Wert der Energie: + E_exact = E_t[0] + Ediff_t = [0] + + # Implementation of the Euler-Algorithm + for i in range(int(tmax // dt)): + f = v_t[-1] + x = x_t[-1] + f * dt # Calc new position + + # Change this for the damped one + #v = v_t[-1] - dt * omega0 ** 2 * x_t[-1] # undamped + v = v_t[-1] + dt * ( -2 * gamma * v_t[-1] - omega0 ** 2 * x_t[-1]) # damped (general) + + x_t.append(x) + v_t.append(v) + + # Q: Wofuer werden die exacten Werte gebraucht wenn sich die + # exacte Energie nicht aendert? + x_exact = x0 * np.exp(-gamma * i * dt) * np.cos(omega0 * i * dt) + v_exact = -omega0 * x0 * np.exp(-gamma * i * dt) * np.sin(omega0 * i * dt) + + x_t_exact.append(x_exact) + v_t_exact.append(v_exact) + + # calculate the energy based on current velocity and position + T = 1/2 * v ** 2 + V = 1/2 * omega0 ** 2 * x ** 2 + E = T + V + T_t.append(T) + V_t.append(V) + E_t.append(E) + Ediff_t.append(E-E_exact) + + + + # TIPP: Zum erstellen mehrerer Plots auf einmal, siehe z.B.: + # https://matplotlib.org/3.1.1/gallery/subplots_axes_and_figures/subplot.html + + kwargs = {'c':'b'} + font_kwargs = {'fontsize':14} + times = np.arange(0,len(x_t))*dt + abs_max = max(x_t, key=abs) + + fig,ax = plt.subplots(1,4,figsize=(18,7)) + + #actual plots + ax[0].plot(times,x_t,**kwargs) + ax[0].plot(times,x_t_exact,'r--', label="exakt") # add exact values to plot + ax[1].plot(x_t,v_t,**kwargs) + ax[1].plot(x_t_exact,v_t_exact,'r--') # add exact values to plot + ax[2].plot(times,T_t,label = "T") + ax[2].plot(times,V_t,label = "V") + ax[2].plot(times,E_t,label = "E = T+V") + ax[3].plot(times,Ediff_t,label = "Fehler in der Energie") + + #style changes + ax[0].set_xlim(0,len(x_t)*dt) + ax[0].set_ylim(-abs_max,abs_max) + ax[0].set_xlabel("t",**font_kwargs) + ax[0].set_ylabel("$x(t)$",**font_kwargs) + + ax[1].set_xlabel("$x(t)$",**font_kwargs) + ax[1].set_ylabel("$v(t)$",**font_kwargs) + + ax[2].set_xlim(0,len(x_t)*dt) + ax[2].set_ylim(-abs_max,abs_max) + ax[2].set_xlabel("t",**font_kwargs) + ax[2].set_ylabel("Energies",**font_kwargs) + + ax[2].set_xlim(0,len(x_t)*dt) + ax[2].set_ylim(-abs_max,abs_max) + ax[2].set_xlabel("t",**font_kwargs) + ax[2].set_ylabel("Differenz",**font_kwargs) + + # Generate the legend for all subplots + plt.legend(handles=[ax[0].lines[0], ax[0].lines[1], ax[1].lines[0], ax[1].lines[1], ax[2].lines[0], ax[2].lines[1], ax[2].lines[2], ax[3].lines[0]], loc='upper right') + + plt.tight_layout() # Make sure the legend doesn't cover any plot + + plt.savefig(f"Hahn_gamma={gamma};dt={dt}.png") + +for dt in [1e-2, 1e-3, 1e-4]: + run_sim(0, dt) + +for gamma in [0.1, 1, 1.2]: + run_sim(gamma, 1e-4) + + diff --git a/S2/AnaMech/other/shell.nix b/S2/AnaMech/other/shell.nix new file mode 100644 index 0000000..5aa68a6 --- /dev/null +++ b/S2/AnaMech/other/shell.nix @@ -0,0 +1,18 @@ +let + pkgs = import {}; +in pkgs.mkShell { + packages = [ + (pkgs.python3.withPackages (python-pkgs: with python-pkgs; [ + pandas + numpy + seaborn + matplotlib + setuptools + scipy + uncertainties + pillow + sympy + requests + ])) + ]; +} diff --git a/S2/CWR/pdfs/Uebung1.pdf b/S2/CWR/pdfs/Uebung1.pdf new file mode 100644 index 0000000..827761d Binary files /dev/null and b/S2/CWR/pdfs/Uebung1.pdf differ diff --git a/S2/ExPhyII/VL/ExIIVL3.typ b/S2/ExPhyII/VL/ExIIVL3.typ new file mode 100644 index 0000000..c92d514 --- /dev/null +++ b/S2/ExPhyII/VL/ExIIVL3.typ @@ -0,0 +1,62 @@ +#import "../preamble.typ": * + +#show: conf.with(num: 3) + += Wiederholung + +Es wurde das Coulomb'sche Gesetz wiederholt und auf das Gedankenexperiment eingegangen, welche Ladung entstehen wuerde wenn man jedem Atom eines Metallblockes ein Elektron wegnehmen wuerde. +bla \ +sf + += Experimente + +- *Drahtfigur (aus Papier)*, wobei die Papierstreifen sich mit der gleichen Ladung aufladen und sich so gegenseitig abstossen + +- *Das Elektroskop* ist ein Instrument zum Nachweis von Ladungen + +- *Seifenblasentennis*\ + Es wirkt eine abstossende Kraft zwischen gleichen Ladungen. + +- *Ping-Pong*\ + Erstes Experiment zur Demonstration von Ladungsuebertragung. Es wirkt Influenz und Ladungstransport. \ + +- *Ladungstransport mit Kelvin'schen Wassertropfgenerator*\ + Hier werden Ladungen ueber geladene Wassertropfen transportiert. \ + +- *Visualisierung von Feldlinien* \ + Ein Plattenkondensator erzeugt ein Elektrisches Feld zwischen den beiden Platten. Diese Feldlinien koennen durch Staub (welcher zum Dipol wird) sichtbar gemacht werden. + + + + +== 1.2. Das Elektrische Feld $arrow(E)$ + +Bringe Testladung $q_2 $ in die Naehe von $q_1 $, Wechselwirkung kann mit $arrow(F)_(c) $ +beschrieben werden. Wocher wissen die Ladungen voneinander? + +$==>$ Ladungen veraendern den Raumum sich. Diese erzeugen ein elektrisches Feld $arrow(E)$ (Unabhaengig von der Anwesenheit von $q_2 $). + +Testladung $q + q_2 = q$. + +Elektrisches Feld + +$ + arrow(E):= (arrow(F)_(n) ) / (q) = (q_1) / (4 pi epsilon_0 ) (arrow(r)) / (r^2 ) \ + [E]= N/C = V/m \ + ==> "Feldlinien bilden ein Vektorfeld" +$ + +Als Konvention beginnen die Feldlinien bei positiven und enden bei negativen Ladungen + +Die Kraft, welche das E-Feld auf eine Ladung $q$ an $arrow(r)$ ausuebt ist duch $arrow(F)= q arrow(E) (arrow(r))$ gegeben. \ +Das Elektrische Feld gibt sich zu (Ladung $q$ erzeugt ein E-Feld) $ +arrow(E)= (1) / (4 pi epsilon_0 ) q_1 (arrow(r)) / (r^2 ). $ + +Feldlinien dienen als Hilfsmittel zur Veranschaulichung von Vektorfeldern. +- Die Richung des Feldes ist durch Tangenten an der Feldlinie angegeben +- Spezialfaelle sind das homogene $arrow(E)= arrow(E) (t)$ und das stationaere Feld $arrow(E)= arrow(E) (arrow(r))$ + +Betrag der Felder wird durch die Dichte der Feldlinien angegeben. + +Zeichnung eines Dipolfeldes. + diff --git a/S2/ExPhyII/pdfs/ExIIVL3.pdf b/S2/ExPhyII/pdfs/ExIIVL3.pdf new file mode 100644 index 0000000..bc6ee96 Binary files /dev/null and b/S2/ExPhyII/pdfs/ExIIVL3.pdf differ diff --git a/S2/ExPhyII/pdfs/ExPhy2_Uebung_02.pdf b/S2/ExPhyII/pdfs/ExPhy2_Uebung_02.pdf new file mode 100644 index 0000000..b094b75 Binary files /dev/null and b/S2/ExPhyII/pdfs/ExPhy2_Uebung_02.pdf differ diff --git a/S2/ExPhyII/preamble.typ b/S2/ExPhyII/preamble.typ index fc568d5..da265ee 100644 --- a/S2/ExPhyII/preamble.typ +++ b/S2/ExPhyII/preamble.typ @@ -16,3 +16,5 @@ // load the document body } + +