2017-04-15 3 views
0

Ich frage mich, ob mir jemand einen Weg zeigen könnte, mehrere Gaußkurven an einen Datensatz mit 6 Peaks anzupassen (Daten stammen von einem Beugungsmuster eines Kupfergoldlegierungskristalls). Die Art und Weise, wie ich im Moment arbeite, beinhaltet die Verwendung von mehreren Gaußschen Gleichungen, die addiert werden, was bedeutet, dass ich bei der Kurvenanpassung mehrere Werteschätzungen geben muss.Kurvenanpassung einer Summe von Gauß'schen an 6 Peaks

+0

Versuchen Sie, google nach "nonlinear curve fitted python" zu suchen. – Craig

+0

Sie können ein Gaussian Mixture Model (GMM) zu Ihren Daten hinzufügen, aber beachten Sie, dass es nicht unbedingt eine Anpassung findet, die Sie erwarten. Siehe sklearn.mixture.GaussianMixture –

+1

Sie könnten lmfit nützlich finden. Siehe https://lmfit.github.io/lmfit-py/builtin_models.html#example-3-fitting-multiple-peaks-and-using-prefixes zum Beispiel, das 2 Gaussian und einen exponentiellen Zerfall anpasst. Es sollte einfach sein, auf mehr Gaussiane zu erweitern. –

Antwort

0

Ich habe erfolgreich einen genetischen Algorithmus verwendet, um Fehlerraum zu suchen und erste Parameterschätzer für scipy Levenberg-Marquardt nichtlinearen Löser zu finden. Die neuesten Versionen von scipy enthalten jetzt den genetischen Algorithmus Differential Evolution, den ich verwendet habe. Es wird ein wenig experimentieren mit einem zuvor angepassten Datensatz, um Dinge wie Populationsgröße oder genetische Crossover-Strategie zu optimieren, aber dann sollten Sie eine Möglichkeit für den Computer haben, auf diese Weise erste Parameterschätzer zu finden. Es dauert eine Weile zu laufen, also lassen Sie es über Nacht gehen, aber es kann automatisiert werden.