Beispiel 1: Schwach gedämpfter Oszillator
Problemstellung
Ein Masse-Feder-System mit \(m = 1\,\text{kg}\) , \(k = 100\,\text{N/m}\) und \(c = 2\,\text{Ns/m}\) wird aus der Ruhelage um \(x_0 = 0.1\,\text{m}\) ausgelenkt und dann losgelassen. Bestimmen Sie die Bewegung des Systems.
Lösung
Zunächst berechnen wir die charakteristischen Parameter: \[
\omega_0 = \sqrt{\frac{k}{m}} = \sqrt{\frac{100}{1}} = 10\,\text{rad/s}
\]
\[
\gamma = \frac{c}{2m} = \frac{2}{2 \cdot 1} = 1\,\text{s}^{-1}
\]
Da \(\gamma = 1 < \omega_0 = 10\) , liegt schwache Dämpfung vor. Die gedämpfte Frequenz ist: \[
\omega_\mathrm{d} = \sqrt{\omega_0^2 - \gamma^2} = \sqrt{100 - 1} = \sqrt{99} \approx 9.95\,\text{rad/s}
\]
Die allgemeine Lösung für schwache Dämpfung lautet: \[
x(t) = A e^{-\gamma t} \cos(\omega_\mathrm{d} t + \phi)
\]
Mit den Anfangsbedingungen \(x(0) = 0.1\) und \(\dot{x}(0) = 0\) ergibt sich aus \(\dot{x}(0) = -A(\gamma\cos\phi + \omega_\mathrm{d}\sin\phi) = 0\) die Bedingung \(\tan\phi = -\gamma/\omega_\mathrm{d} \approx -0.1\) , also \(\phi \approx -0.1\) und \(A = x(0)/\cos\phi \approx 0.1005\,\text{m}\) . Da die Dämpfung schwach ist (\(\gamma \ll \omega_0\) ), gilt in guter Näherung: \[
A \approx 0.1\,\text{m}, \quad \phi \approx 0
\]
Die Lösung ist daher näherungsweise: \[
x(t) \approx 0.1 e^{-t} \cos(9.95t)\,\text{m}
\]
Code
import numpy as np
import matplotlib.pyplot as plt
# Parameter
m = 1.0 # kg
k = 100.0 # N/m
c = 2.0 # Ns/m
omega_0 = np.sqrt(k/ m)
gamma = c/ (2 * m)
omega_d = np.sqrt(omega_0** 2 - gamma** 2 )
# Anfangsbedingungen
x0 = 0.1 # m
v0 = 0.0 # m/s
# Zeit
t = np.linspace(0 , 5 , 1000 )
# Lösung
x = x0 * np.exp(- gamma * t) * np.cos(omega_d * t)
# Einhüllende
envelope_upper = x0 * np.exp(- gamma * t)
envelope_lower = - x0 * np.exp(- gamma * t)
plt.figure(figsize= (7 , 4 ))
plt.plot(t, x, 'b-' , linewidth= 2 , label= '$x(t)$' )
plt.plot(t, envelope_upper, 'r--' , linewidth= 1.5 , alpha= 0.7 , label= 'Einhüllende' )
plt.plot(t, envelope_lower, 'r--' , linewidth= 1.5 , alpha= 0.7 )
plt.axhline(y= 0 , color= 'k' , linestyle= '-' , linewidth= 0.5 )
plt.xlabel('Zeit $t$ (s)' , fontsize= 12 )
plt.ylabel('Auslenkung $x(t)$ (m)' , fontsize= 12 )
plt.title('Schwach gedämpfter Oszillator' , fontsize= 14 )
plt.grid(True , alpha= 0.3 )
plt.legend(fontsize= 11 )
plt.show()
Beispiel 2: Stark gedämpfter Oszillator
Problemstellung
Dasselbe System wie oben, aber mit erhöhter Dämpfung \(c = 30\,\text{Ns/m}\) .
Lösung
Die charakteristischen Parameter sind: \[
\omega_0 = 10\,\text{rad/s}, \quad \gamma = \frac{30}{2} = 15\,\text{s}^{-1}
\]
Da \(\gamma = 15 > \omega_0 = 10\) , liegt starke Dämpfung vor. Die Lösungen der charakteristischen Gleichung sind: \[
\lambda_{1,2} = -\gamma \pm \sqrt{\gamma^2 - \omega_0^2} = -15 \pm \sqrt{225 - 100} = -15 \pm \sqrt{125}
\]
\[
\lambda_1 \approx -3.82, \quad \lambda_2 \approx -26.18
\]
Die allgemeine Lösung lautet: \[
x(t) = C_1 e^{\lambda_1 t} + C_2 e^{\lambda_2 t}
\]
Mit den Anfangsbedingungen \(x(0) = 0.1\) und \(\dot{x}(0) = 0\) ergibt sich nach Einsetzen: \[
x(t) = 0.117 e^{-3.82t} - 0.017 e^{-26.18t}\,\text{m}
\]
Code
import numpy as np
import matplotlib.pyplot as plt
# Parameter für starke Dämpfung
m = 1.0
k = 100.0
c = 30.0
omega_0 = np.sqrt(k/ m)
gamma = c/ (2 * m)
# Charakteristische Werte
lambda1 = - gamma + np.sqrt(gamma** 2 - omega_0** 2 )
lambda2 = - gamma - np.sqrt(gamma** 2 - omega_0** 2 )
# Anfangsbedingungen
x0 = 0.1
v0 = 0.0
# Koeffizienten aus Anfangsbedingungen
C2 = (v0 - lambda1* x0)/ (lambda2 - lambda1)
C1 = x0 - C2
# Zeit
t = np.linspace(0 , 2 , 1000 )
# Lösung
x = C1 * np.exp(lambda1 * t) + C2 * np.exp(lambda2 * t)
plt.figure(figsize= (7 , 4 ))
plt.plot(t, x, 'b-' , linewidth= 2 , label= '$x(t)$' )
plt.axhline(y= 0 , color= 'k' , linestyle= '-' , linewidth= 0.5 )
plt.xlabel('Zeit $t$ (s)' , fontsize= 12 )
plt.ylabel('Auslenkung $x(t)$ (m)' , fontsize= 12 )
plt.title('Stark gedämpfter Oszillator (Kriechfall)' , fontsize= 14 )
plt.grid(True , alpha= 0.3 )
plt.legend(fontsize= 11 )
plt.show()
Beispiel 3: Kritisch gedämpfter Oszillator
Problemstellung
Das System mit kritischer Dämpfung \(c = 2\sqrt{mk} = 2\sqrt{1 \cdot 100} = 20\,\text{Ns/m}\) .
Lösung
Für kritische Dämpfung gilt: \[
\gamma = \frac{20}{2} = 10\,\text{s}^{-1} = \omega_0
\]
Die charakteristische Gleichung hat eine Doppelwurzel \(\lambda = -\gamma = -10\) . Die allgemeine Lösung lautet: \[
x(t) = (C_1 + C_2 t) e^{-\gamma t}
\]
Mit den Anfangsbedingungen \(x(0) = 0.1\) und \(\dot{x}(0) = 0\) ergibt sich: \[
C_1 = 0.1, \quad C_2 = \gamma C_1 = 1
\]
Die Lösung ist: \[
x(t) = (0.1 + t) e^{-10t}\,\text{m}
\]
Code
import numpy as np
import matplotlib.pyplot as plt
# Parameter für kritische Dämpfung
m = 1.0
k = 100.0
c_crit = 2 * np.sqrt(m* k)
omega_0 = np.sqrt(k/ m)
gamma = c_crit/ (2 * m)
# Anfangsbedingungen
x0 = 0.1
v0 = 0.0
C1 = x0
C2 = v0 + gamma* x0
# Zeit
t = np.linspace(0 , 1 , 1000 )
# Lösung
x_crit = (C1 + C2* t) * np.exp(- gamma* t)
plt.figure(figsize= (7 , 4 ))
plt.plot(t, x_crit, 'b-' , linewidth= 2 , label= 'Kritische Dämpfung' )
plt.axhline(y= 0 , color= 'k' , linestyle= '-' , linewidth= 0.5 )
plt.xlabel('Zeit $t$ (s)' , fontsize= 12 )
plt.ylabel('Auslenkung $x(t)$ (m)' , fontsize= 12 )
plt.title('Kritisch gedämpfter Oszillator (aperiodischer Grenzfall)' , fontsize= 14 )
plt.grid(True , alpha= 0.3 )
plt.legend(fontsize= 11 )
plt.show()
Beispiel 4: Vergleich der Dämpfungsregime
Wir vergleichen alle drei Regime mit denselben Anfangsbedingungen.
Code
import numpy as np
import matplotlib.pyplot as plt
m = 1.0
k = 100.0
omega_0 = np.sqrt(k/ m)
# Anfangsbedingungen
x0 = 0.1
v0 = 0.0
t = np.linspace(0 , 2 , 1000 )
# Schwache Dämpfung
c_under = 2.0
gamma_under = c_under/ (2 * m)
omega_d = np.sqrt(omega_0** 2 - gamma_under** 2 )
x_under = x0 * np.exp(- gamma_under* t) * np.cos(omega_d* t)
# Kritische Dämpfung
c_crit = 2 * np.sqrt(m* k)
gamma_crit = c_crit/ (2 * m)
C1_crit = x0
C2_crit = v0 + gamma_crit* x0
x_crit = (C1_crit + C2_crit* t) * np.exp(- gamma_crit* t)
# Starke Dämpfung
c_over = 30.0
gamma_over = c_over/ (2 * m)
lambda1 = - gamma_over + np.sqrt(gamma_over** 2 - omega_0** 2 )
lambda2 = - gamma_over - np.sqrt(gamma_over** 2 - omega_0** 2 )
C2_over = (v0 - lambda1* x0)/ (lambda2 - lambda1)
C1_over = x0 - C2_over
x_over = C1_over * np.exp(lambda1* t) + C2_over * np.exp(lambda2* t)
plt.figure(figsize= (7 , 4 ))
plt.plot(t, x_under, 'b-' , linewidth= 2 , label= 'Schwache Dämpfung ($ \\ gamma < \\ omega_0$)' )
plt.plot(t, x_crit, 'r-' , linewidth= 2 , label= 'Kritische Dämpfung ($ \\ gamma = \\ omega_0$)' )
plt.plot(t, x_over, 'g-' , linewidth= 2 , label= 'Starke Dämpfung ($ \\ gamma > \\ omega_0$)' )
plt.axhline(y= 0 , color= 'k' , linestyle= '-' , linewidth= 0.5 )
plt.xlabel('Zeit $t$ (s)' , fontsize= 12 )
plt.ylabel('Auslenkung $x(t)$ (m)' , fontsize= 12 )
plt.title('Vergleich der Dämpfungsregime' , fontsize= 14 )
plt.grid(True , alpha= 0.3 )
plt.legend(fontsize= 10 )
plt.show()
Beispiel 5: Resonanzkurve
Wir betrachten einen schwach gedämpften Oszillator unter harmonischer Anregung und untersuchen die Amplitude als Funktion der Anregungsfrequenz.
Parameter
\[
m = 1\,\text{kg}, \quad k = 100\,\text{N/m}, \quad c = 2\,\text{Ns/m}, \quad F_0 = 10\,\text{N}
\]
Die Amplitude der stationären Schwingung ist: \[
A(\omega) = \frac{F_0/m}{\sqrt{(\omega_0^2 - \omega^2)^2 + (2\gamma\omega)^2}}
\]
Code
import numpy as np
import matplotlib.pyplot as plt
m = 1.0
k = 100.0
c = 2.0
F0 = 10.0
omega_0 = np.sqrt(k/ m)
gamma = c/ (2 * m)
# Frequenzbereich
omega = np.linspace(0.1 , 20 , 1000 )
# Amplitude
A = (F0/ m) / np.sqrt((omega_0** 2 - omega** 2 )** 2 + (2 * gamma* omega)** 2 )
# Resonanzfrequenz
omega_res = np.sqrt(omega_0** 2 - 2 * gamma** 2 )
A_res = (F0/ m) / np.sqrt((omega_0** 2 - omega_res** 2 )** 2 + (2 * gamma* omega_res)** 2 )
plt.figure(figsize= (7 , 4 ))
plt.plot(omega, A, 'b-' , linewidth= 2 )
plt.axvline(x= omega_0, color= 'r' , linestyle= '--' , linewidth= 1.5 , alpha= 0.7 , label= f'Eigenfrequenz $ \\ omega_0 = { omega_0:.1f} $ rad/s' )
plt.axvline(x= omega_res, color= 'g' , linestyle= '--' , linewidth= 1.5 , alpha= 0.7 , label= f'Resonanzfrequenz $ \\ omega_ {{ res }} = { omega_res:.1f} $ rad/s' )
plt.plot(omega_res, A_res, 'go' , markersize= 8 )
plt.xlabel('Anregungsfrequenz $ \\ omega$ (rad/s)' , fontsize= 12 )
plt.ylabel('Amplitude $A( \\ omega)$ (m)' , fontsize= 12 )
plt.title('Resonanzkurve des gedämpften Oszillators' , fontsize= 14 )
plt.grid(True , alpha= 0.3 )
plt.legend(fontsize= 10 )
plt.xlim([0 , 20 ])
plt.show()
Die Resonanzkurve zeigt das Maximum der Amplitude bei der Resonanzfrequenz. Bei schwacher Dämpfung liegt diese nahe der Eigenfrequenz. Je stärker die Dämpfung, desto breiter und flacher wird das Resonanzmaximum.
Neben der Amplitude ist auch der Phasengang \(\varphi(\omega)\) aufschlussreich, der in Abbildung 6 für verschiedene Dämpfungen dargestellt ist. Bei \(\omega = \omega_0\) beträgt die Phasenverschiebung unabhängig von der Dämpfung genau \(\pi/2\) — bei Resonanz hinkt die Antwort der Anregung also um eine Viertelperiode hinterher.
Code
import numpy as np
import matplotlib.pyplot as plt
m = 1.0
k = 100.0
omega_0 = np.sqrt(k/ m)
# Frequenzbereich
omega = np.linspace(0.1 , 20 , 1000 )
plt.figure(figsize= (7 , 4 ))
for c, farbe in [(2.0 , 'b' ), (6.0 , 'r' ), (14.0 , 'g' )]:
gamma = c/ (2 * m)
# Phase korrekt auf [0, pi] entfaltet
phi = np.arctan2(2 * gamma* omega, omega_0** 2 - omega** 2 )
plt.plot(omega, phi, farbe, linewidth= 2 ,
label= f'$ \\ gamma = { gamma:.0f} $ s$^ {{ -1 }} $' )
plt.axvline(x= omega_0, color= 'k' , linestyle= '--' , linewidth= 1.5 , alpha= 0.7 ,
label= f'$ \\ omega_0 = { omega_0:.0f} $ rad/s' )
plt.axhline(y= np.pi/ 2 , color= 'k' , linestyle= ':' , linewidth= 1 , alpha= 0.7 )
plt.plot(omega_0, np.pi/ 2 , 'ko' , markersize= 8 )
plt.yticks([0 , np.pi/ 4 , np.pi/ 2 , 3 * np.pi/ 4 , np.pi],
['0' , '$ \\ pi/4$' , '$ \\ pi/2$' , '$3 \\ pi/4$' , '$ \\ pi$' ])
plt.xlabel('Anregungsfrequenz $ \\ omega$ (rad/s)' , fontsize= 12 )
plt.ylabel('Phasenverschiebung $ \\ varphi( \\ omega)$' , fontsize= 12 )
plt.title('Phasengang des gedämpften Oszillators' , fontsize= 14 )
plt.grid(True , alpha= 0.3 )
plt.legend(fontsize= 10 )
plt.xlim([0 , 20 ])
plt.show()