Aufgaben
Lösung zu Aufgabe 3.5
Die Amplitude des schwingungsfähigen Systems wird durch die Gleichung \[ A = A_0 \frac{f_0^2}{\sqrt{\left(f^2-f_0^2\right)^2 + \left(\frac{\delta f}{\pi}\right)^2 }} \] beschrieben. Die Kurvenanpassung liefert die folgenden Werte:
Ergebnis der Kurvenanpassung:
A0 = (0.78 +- 0.01) cm.
f0 = (0.692 +- 0.003) Hz.
delta = (0.79 +- 0.02) 1/s
Die grafische Auftragung zeigt, dass die Kurve im Rahmen der Messgenauigkeit mit den experimentellen Daten übereinstimmt.
Groessen/Loesungen/fit_resonanz.py
"""Kurvenanpassung: Resonanzkurve. """
import math
import numpy as np
import scipy.optimize
import matplotlib.pyplot as plt
# Anregungsfrequenz [Hz].
f = np.array([0.2, 0.5, 0.57, 0.63, 0.67,
0.71, 0.80, 1.00, 1.33])
# Amplitude [cm].
A = np.array([0.84, 1.42, 1.80, 2.10, 2.22,
2.06, 1.45, 0.64, 0.30])
# Fehler der Amplitude [cm].
dA = np.array([0.04, 0.07, 0.09, 0.11, 0.11,
0.10, 0.08, 0.03, 0.02])
# Definition der Funktion, die an die Messdaten angepasst
# werden soll.
def func(f, A0, f0, delta):
return A0 * f0**2 / np.sqrt(
(f**2 - f0**2)**2 + (delta * f / math.pi)**2)
# Führe die Kurvenanpassung durch.
popt, pcov = scipy.optimize.curve_fit(func, f, A,
[0.8, 0.7, 0.3], sigma=dA)
A0, f0, delta = popt
d_A0, d_f0, d_delta = np.sqrt(np.diag(pcov))
# Gib das Ergebnis der Kurvenanpassung aus.
print(f'Ergebnis der Kurvenanpassung:')
print(f' A0 = ({A0:.2f} +- {d_A0:.2f}) cm.')
print(f' f0 = ({f0:.3f} +- {d_f0:.3f}) Hz.')
print(f' delta = ({delta:.2f} +- {d_delta:.2f}) 1/s')
# Erzeuge die Figure und ein Axes-Objekt mit logarithmischer
# Skalierung.
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.set_xlabel('Anregungsfrequenz f [Hz]')
ax.set_ylabel('Amplitude A [cm]')
ax.grid()
# Plotte die angepasste Funktion mit einer hohen Auflösung.
f_fit = np.linspace(np.min(f), np.max(f), 500)
A_fit = func(f_fit, A0, f0, delta)
ax.plot(f_fit, A_fit, '-')
# Stelle die Messwerte dar.
ax.errorbar(f, A, yerr=dA, fmt='.', capsize=2)
# Zeige die Grafik an.
plt.show()