Peakfitting mit scipy.optimize

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
gh0stsh3ll
User
Beiträge: 5
Registriert: Sonntag 17. November 2019, 17:45

Hey Community,
da ich zur Auswertung u.a. die Position des Maximums benötige, lasse ich via scipy optimize einen fit anfertigen. Hierzu verwende ich aktuell eine Gaussian funktion:

Code: Alles auswählen

def Gauss(x, intensity, maximum, width):
    return 100 - (intensity * np.exp(-(x - maximum) ** 2 / (2 * width ** 2)))

Code: Alles auswählen

def fit_Gauss(x, y, initvals):
    return curve_fit(Gauss, x, y, p0=initvals)
Bild

Wie ihr sehen könnt, ist der fit nicht optimal. Speziell die Postion des Maximums ist sehr weit off, was für die weitere Auswertung gravierend ist.
Jemand eine Idee, welche Funktion sich besser anfitten lässt?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich bin kein grosser Experte auf diesem Gebiet - aber was mir auffaellt ist, dass deine Daten weiter rechts eine deutliche Verformung zeigen. Das wird das Fitting negativ beeinflussen, denn sowas minimiert ja ueblicherweise irgendwelche quadratischen Fehler oder so. Ggf. kannst du das iterativ machen: erstmal das aktuelle Fitting, und dann zB nochmal nur mit Werten aus dem Bereich einer Standardabweichung um den gefundenen (wenn auch nicht idealen) Mittelwert fitten. Oder es gibt Verfahren, die anders gewichten, also zB hoehere Werte (oder niedrigere) staerker.
Sirius3
User
Beiträge: 18271
Registriert: Sonntag 21. Oktober 2012, 17:20

Deine Funktionen sind keine Gauss. Daher passt auch der Fit nicht. Wenn Du das Maximum sucht, warum nimmst du dann nicht das Maximum? Oder sowas wie https://docs.scipy.org/doc/scipy/refere ... idths.html
Antworten