Liniendiagramm mit Unsicherheiten

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,

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()
Bei return wird mir eine Fehlermeldung angezeigt.
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
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Und diese Fehlermeldung beschreibt auch eindeutig, was dort nicht stimmt.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Apfelstruedel
User
Beiträge: 8
Registriert: Samstag 19. November 2022, 14:11

Ich hab nur leider keine Ahnung, wie ich die korrigieren kann. Wir haben eine halbstündige Einführung in Python bekommen. Das reicht bei mir leider nicht aus, um die Fehler zu erkennen und dann dementsprechend zu korrigieren...
Sirius3
User
Beiträge: 18276
Registriert: Sonntag 21. Oktober 2012, 17:20

Alles was zu einem Block (hier einer Funktion) gehört, muss einheitlich eingerückt sein, das sagt dir die Fehlermeldung
Apfelstruedel
User
Beiträge: 8
Registriert: Samstag 19. November 2022, 14:11

ok, und wie muss ich das dann jetzt korrekt einrücken, dass ich keine Fehlermeldungmehr bekomme
Apfelstruedel
User
Beiträge: 8
Registriert: Samstag 19. November 2022, 14:11

Hab's herausgefunden. Vielen Dank :D
karolus
User
Beiträge: 144
Registriert: Samstag 22. August 2009, 22:34

Zeile 19 bis 21 kannst du einfacher haben:

Code: Alles auswählen

df = pd.read_csv("Daten.txt", sep=" ", decimal=".")

x = df['x']
y = df['y']
y_unsicherheit = df['y_unsicherheit']
Wenn du tatsächlich ( wie in den hier gezeigten Rohdaten ) Dezimalpunkte statt, Dezimalkommas hast, soltest du das in Zeile 17 so angeben, oder weglassen weil Dezimalpunkte ja der Default sind.
Antworten