für mein Physikpraktikum soll ich ein Liniendiagramm aus meinen gemessenen Daten erstellen. Im coden hab ich leider nicht viel Erfahrung und bin ein wenig am Verzweifeln, weil mein Code nicht funktioniert und ich habe keine Ahnung, wie ich das korrigieren soll.
Hoffenltich könnt ihr mit weiterhelfen.
Code: Alles auswählen
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
import pandas as pd
#########################
# lineare Funktion zur Anpassung [durch Ihre Funktion ersetzen]
#########################
def func(x,a,b):
return a * x + b
#########################
# Listen für Daten auswerten
#########################
df = pd.read_csv("Daten.txt", sep=" ", decimal=",")
x = np.array(df['x'].to_list(),dtype = float)
y = np.array(df['y'].to_list(),dtype = float)
y_unsicherheit = np.array(df['y_unsicherheit'].to_list(),dtype = float)
#########################
# Fit
#########################
popt, pcov = curve_fit(func, xdata = x, ydata = y)
# Drucken der Anpassungsergebnisse
print("\nOptimale Werte für die Parameter", popt)
print("Die geschätzte Kovarianz von popt.\n", pcov)
# Drucken der angepassten Ergebnisse
print("\nPassungsfunktion: y = a*x + b")
print("Ergebnisse:")
print("a = %f +/- %f"%(popt[0],np.sqrt(pcov[0][0])))
print("b = %f +/- %f"%(popt[1],np.sqrt(pcov[1][1])))
#########################
# Daten und Anpassungsergebnisse darstellen
#########################
plt.plot(x,y)
# Plotten Sie das Anpassungsergebnis
#[Ersetzen Sie die Beschriftung entsprechend Ihrer Anpassungsfunktion].
plt.plot(x, func(x, *popt), 'g--', label='Fit')
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.show()
Das sind folgende Daten aus der Daten.txt Datei:
x y y_unsicherheit
404.66 1.708 1.03
407.78 1.701 1.03
453.85 1.688 1.03
491.6 1.667 1.03
546.07 1.66 1.03
576.96 1.658 1.03
579.07 1.657 1.03
690.72 1.649 1.03
708.19 1.643 1.03
Ich hoffe, ih könnt mir helfen.
Liebe Grüße