Gnuplot fittet Gaussfunktion nicht an Datensatz

Rexus

Lt. Commander
Registriert
Mai 2006
Beiträge
1.401
Hi,

ich habe einen Satz Messdaten und möchte da mit gnuplot 'ne Gaußfunktion dranfitten.
Was mache ich falsch und wieso bekomme ich den unten stehenden Error beim Fit?

Meine Datei: Daten.gnu
Code:
f(x)=norm(x)
g(y)=norm(y)
h(z)=norm(z)

fit	f(x) "1" using 1:2 via x
fit	g(y) "2" using 1:2 via y
fit	h(z) "3" using 1:2 via z

plot 	"1" notitle,\
	f(x) lc rgb "red" with lines title "Plotname1",\ 
	"2" notitle,\
	g(y) lc rgb "green" with lines title "Plotname2",\ 
	"3" notitle,\
	h(z) lc rgb "blue" with lines title "Plotname"
	
set autoscale

(Ja, die Dateien mit den Daten heißen 1,2,3 und haben 2 Spalten.)

Der Errror:

Code:
gnuplot> load "Daten.gnu"


 Iteration 0
 WSSR        : 12734             delta(WSSR)/WSSR   : 0
 delta(WSSR) : 0                 limit for stopping : 1e-05
 lambda	  : 0

initial set of free parameter values

x               = 1.00501
         Singular matrix in Givens()

gnuplot>
 
Ich blick da nich sofort durch aber willst du nicht

3 Funktionen eines Parameters herausfinden? f(t), g(t), h(t)
und nicht drei Funktionen dreierlei parameter?
 
Hi,

danke für deine ANtwort (Auch im anderen Thread).

Nein, ich denke nicht, dass ich das will. Bei der Standard-Binomialverteilung ist der Exponent der einzige Parameter der "läuft".
Die Sache ist halt, dass ich 3 Datensätze habe die unabhängig voneinander aufgezeichnet worden sind und die alle durch je eine Gauß-Funktion angenähert werden sollen. Der Grund weshalb alle 3 Fit-Funktionen/3 Plot-Befehle in einer Datei stehen, ist weil ich alles auf einem Bild haben möchte. Auch wenn ich 2 Funktionen rausnehme oder wenn ich überall die Variable x wähle (dann wäre aber f(x)=g(x)=h(x), was ich ja nicht will) kommt die oben genannte Fehlermeldung raus. :)

Natürlich habe ich auch probiert die Standardnormalverteilung "auszuschreiben" statt einfach nur das eingespeicherte "norm(x)" zu verwenden, es kommt aber der selbe Fehler.
Ich weiß nicht, wo Gnuplot jetzt ein Problem hat.
 
Gnuplot ist beim fitten auch manchmal etwas zickig. Ich hab' dir mal 3 Gaußverteilte Messreihen angefügt und ein Skript, dass für alle 3 einen Fit erstellt.

Gerade bei Normalverteilungen ist es wichtig, den Mittelwert, Standardabweichung und so Späße wie 'nen Offset relativ genau zu 'erraten'. :freak:

Außerdem packt es das Programm nicht, wenn die Parameter krass verschiedene Größenordnungen haben (z.B. ein Parameter ~10, ein anderer im Bereich ~10^7), dann muss man die Potenz eben gleich in die Fitfunktion packen.

Ich hoffe, das Beispiel hilft dir weiter!

Grüße,

Giessl


Edit: Was mir gerade noch auffällt:

Rexus schrieb:
Code:
fit	f(x) "1" using 1:2 via x
fit	g(y) "2" using 1:2 via y
fit	h(z) "3" using 1:2 via z

Wieso fittest du 'via x'? Da sollte eigentlich ein freier Parameter stehen.
 

Anhänge

Zuletzt bearbeitet:
Danke für eure Antworten, Leute.

Ihr habt natürlich Recht. Gestern war absolut nicht mein Tag und da stand ich wohl mächtig auf'm Schlauch. x sollte wirklich nicht der Fitparameter sein, sondern eher die Varianz und Standardabweichung, wenn ich mir die Gaußßfunktion so anschaue.
Vielleicht probiere ich es nachher, eher aber morgen nochmal.

Habe woanders schon gelesen, dass man gnuplot da am besten ein bisschen auf die Sprünge hilft. Aber ich mein, wenn ich wüsste wie die Funktion zum Fitten aussieht, bräuchte ich ja gnuplot nicht um es zu berechnen. :D Gibt es da ein anderes Programm, dass dafür super geeignet ist? Oder hilft da nur "Ausprobieren" mit gnuplot?
 
Naja, ich hab' mich am Anfang meines Studiums auch gegen Gnuplot geweigert, wenn man sich allerdings ein bisschen dran gewöhnt hat ist es doch recht 'mächtig', 'ne wirkliche - kostenfreie - Alternative ist mir noch nicht untergekommen und mit z.B. Matlab habe ich persönlich keine besseren Ergebnisse bekommen. (Auch wenn Matlab sicherlich seine Stärken nicht beim plotten von Funktionen/Messreihen hat.)

Eine Alternative zum guten Raten fällt mir auch nicht wirklich ein. Aber gerade die Amplitude, den Mittelwert und einen etwaigen Offset kann man schon recht genau ablesen. Bleibt also noch die Standardabweichung mit der man ein bisschen rumspielen muss, geht aber auch mit ein bisschen Übung.

Wenn das alles nicht hinhaut, könntest du noch für den Mittelwert und die Amplitude einen einfachen Parabelfit (ich erinnere mich dunkel, dass Gnuplot damit besser klar kommt) machen und den eben recht genau auf den Peak einschränken. Für die Standardabweichung kannst du die Fitfunktion ein bisschen anpassen und sie dann über die 'Full Width At Half Maximum' überschlagsmäßig bestimmen. Ich glaube - daher ist das Folgende ohne Gewähr, dass das auch mit der Fitfunktion die ich oben im Beispiel hatte ganz gut hinhaut und habe dir mal 'ne kleine Nebenrechnung für das Beispiel angehängt.

Damit solltest du eigentlich alle Parameter zügig ganz gut abschätzen können. :)

Grüße,

Giessl
 

Anhänge

  • fwhm.jpg
    fwhm.jpg
    78,4 KB · Aufrufe: 344
Zuletzt bearbeitet:
Hi,

vielen Dank für die Mühe und die Erklärung. :) Mir ist so langsam klar geworden, was gnuplot eigentlich von mir will.
Fakt ist: Ich habe die Fits hingekriegt. Es gibt aber in den Peaks so'n paar Werte die ausschlagen, doch leider kann ich am a- und/oder b-Wert deines Fits so viel drehen, wie ich will: Die Parameter die mir der Fit ausgibt sind praktisch immer die selben. Vermutlich wäre die Abweichung vom "Bauch" unten an der Funktion zu krass, wenn der Fit 'nen noch höheren Peak hat.

Mit der Standardabweichung bin ich ein wenig verwirrt. Ich komme für den ersten Fit (in rot) und den c-Wert den mir gnuplot ausgibt auf eine Standardabweichung von 8, das könnte auch hinkommen wenn man vom Maximalwert der eingelesenen Daten (der ja ungleich des Maximalwerts der Gaußfunktion ist?) ausgeht, ansonsten finde ich die 8 etwas zu klein.
Für den a-Wert bekomme ich (wieder rote Gerade) ungefähr 30 raus, aber da steckt die Standardverteilung ja auch drin (siehe Formel 1/(sqrt(2*pi)*sigma)=a. Wenn ich hier die Standardabweichung berechne, komme ich lediglich auf 0.013, was aber so gar nicht passt.
Gibt's da 'ne Erklärung für, weshalb ich für die Berechnung der Standardabweichung nicht auch den Vorfaktor der e-Fkt. nutzen darf?

Angehängt ist der Plot des ersten Fits.
 

Anhänge

  • gauss.png
    gauss.png
    4,8 KB · Aufrufe: 387

Ähnliche Themen

Zurück
Oben