Graph nicht korrekt angezeigt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Apfelstruedel
User
Beiträge: 8
Registriert: Samstag 19. November 2022, 14:11

Hallo,

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()
simplesimon
User
Beiträge: 11
Registriert: Samstag 3. Dezember 2016, 21:50

Wenn die Fehler der y-Werte 0 sind, darf der Vektor y_unsicherheit nicht übergeben werden.
Die Programmzeile muss dann lauten:
popt, pcov = curve_fit(func, xdata = x, ydata = y, sigma=None)
Apfelstruedel
User
Beiträge: 8
Registriert: Samstag 19. November 2022, 14:11

Ich hab auch schon versucht, die Unsicherheiten zu verändern. Der Graph wird trotzdem nicht korrekt ausgegeben. Das Problem hab ich mit dem und nem anderen Datensatz.
Bei allen anderen funktioniert es einwandfrei, nur ich sehe keinen Unterschied bei den Daten..
Mit sigma=None, bekomme ich eine Null Linie angezeigt und nicht den Graph
Antworten