ich habe ein kleines Problem mit meinem Code, bzw. mit meinem Datensatz.
Wenn ich den Datensatz hochlade und mir den Graphen anzeigen lasse, habe ich die Fit Linie und die des Datensaztes, die nicht mal ansatzweise mit den eingegebenen Daten übereinstimmen. Ich habe es auch mit einer anderen Datei versucht, da lief alles Reibungslos, nur ich verstehe nicht wo genau mein Fehler ist. Eine Fehlermeldung bekomme ich auch nicht. Ich hab auch die Unsicherheit verändert, aber das ändert leider auch nichts. Hoffentlich könnt ihr mir weiterhelfen.
Liebe Grüße
Daten:
x y y_unsicherheit
0 2.49 0
1 2.43 0
2 2.37 0
3 2.31 0
4 2.27 0
5 2.23 0
6 2.2 0
7 2.19 0
8 2.17 0
der Datensatz funktioniert reibungslos:
x y y_unsicherheit
10 0.436 0.1
15 0.611 0.1
20 0.959 0.1
30 1.221 0.1
39.9 1.745 0.1
Code:
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("A3.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,sigma=y_unsicherheit)
# 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.errorbar(x,y,y_unsicherheit)
# Plotten Sie das Anpassungsergebnis
#[Ersetzen Sie die Beschriftung entsprechend Ihrer Anpassungsfunktion].
plt.plot(x, func(x, *popt), 'g--', label='Fit')
plt.xlabel("n")
plt.ylabel("ln(U)")
plt.legend()
plt.show()