Python Gauss Fit

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
phygirl
User
Beiträge: 16
Registriert: Sonntag 23. August 2009, 12:01

Code: Alles auswählen

from pylab import *

gaussian = lambda x: 3*exp(-(30-x)**2/20.)

data = gaussian(arange(100))

plot(data)

X = arange(data.size)
x = sum(X*data)/sum(data)
width = sqrt(abs(sum((X-x)**2*data)/sum(data)))

max = data.max()

fit = lambda t : max*exp(-(t-x)**2/(2*width**2))

plot(fit(X))

show()

Das is mein Code wie er im Moment aussieht. Und ich bekomme keine Fehlermeldungen mehr. Das Problem ist nur, das er als X-Achsen Werte nicht meine erste Spalten nimmt, sondern sie einfach sequentiell aufsteigen laesst.
Hast du dafuer vielleciht eine ERklaerung?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ist das nicht exakt der Code aus dem ersten Posting? *wunder*
Ich dachte Dein Problem war, wie Du Werte aus einer Textdatei anstelle der generierten nehmen kannst?
Welche Fehlermeldung hattest Du denn?

Zur aktuellen Frage kann ich nichts sagen, da ich kein matplotlib installiert habe hier und mich mit der Thematik nicht auskenne. Das erscheint mir aber wenih Python spezifisch zu sein...

Welches / welche Probleme willst Du denn eigentlich lösen? Sind wir mittlerweile bei zwei Problemen angekommen?
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Wie wärs mit:

Code: Alles auswählen

from pylab import *
x, data = loadtxt('data2.txt', unpack=True)
tau = sum(x*data)/sum(data)
width = sqrt(abs(sum((x-tau)**2*data)/sum(data)))

height = data.max()

fit = lambda t : height*exp(-(t-tau)**2/(2*width**2))

plot(x, fit(x))

show()
Edit: Bessere Variablennamen, um das ganze mal lesbarer zu machen.
phygirl
User
Beiträge: 16
Registriert: Sonntag 23. August 2009, 12:01

stimmt das war die falsche Datei copy/paste :oops:

neuer Versuch

Code: Alles auswählen


import numpy, asciidata, pylab, matplotlib.pyplot
import matplotlib
from pylab import *


matplotlib.rc('text', usetex = True)
gaussian = lambda x: 3*exp(-(30-x)**2/20.)

X, data = loadtxt('test.dat', unpack=True) 


plot(data)

X = arange(data.size)
x = sum(X*data)/sum(data)
width = sqrt(abs(sum((X-x)**2*data)/sum(data)))

max = data.max()

fit = lambda t : max*exp(-(t-x)**2/(2*width**2))

plot(fit(X))

show()



Mein Problem ist: Ich habe mene Daten und moechte darueber einen Gauss Fitt plotten.
Das macht das Programm jetzt. Aber wenn ich nur die Daten plotte, laeuft meine X-Achse von 8000 bis 9000.
WEnn ich jetzt aber beide uebereinander plotte laueft das ganze von 0 bis 1000. Das ist seltsam. Wird sich auch noch loesen lassen
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Code: Alles auswählen

import numpy, asciidata, pylab, matplotlib.pyplot
import matplotlib
from pylab import *


matplotlib.rc('text', usetex = True)
gaussian = lambda x: 3*exp(-(30-x)**2/20.)

X, data = loadtxt('test.dat', unpack=True)


plot(X, data)

X = arange(data.size)
x = sum(X*data)/sum(data)
width = sqrt(abs(sum((X-x)**2*data)/sum(data)))

max = data.max()

fit = lambda t : max*exp(-(t-x)**2/(2*width**2))

plot(X, fit(X))

show()
Ist eigentlich nicht so schwer...
Erklärung ist wohl eh überflüssig, hab das Gefühl, dass du über keine der Antworten wirklich sinnvoll nachgedacht hast, sonst hättest du das Problem schon längst selber lösen können.
Antworten