Wie passe ich einen Gaußschen Wert an Daten in Matlab / Oktave an?

8

Ich habe eine Reihe von Frequenzdaten mit Peaks, auf die ich eine Gaußsche Kurve anpassen muss, und dann die volle Breite halbmaximal aus. Der FWHM-Teil, den ich tun kann, habe ich bereits einen Code dafür, aber ich habe Probleme, Code zu schreiben, um dem Gaussian zu passen.

Kennt irgendjemand irgendwelche Funktionen, die das für mich tun oder mir in die richtige Richtung zeigen könnten? (Ich kann die kleinsten Quadrate für Linien und Polynome verwenden, aber ich kann es nicht für Gaussians funktionieren)

Es wäre auch hilfreich, wenn es sowohl mit Octave als auch mit Matlab kompatibel wäre, da ich Octave im Moment habe, aber bis nächste Woche keinen Zugang zu Matlab bekomme.

Jede Hilfe würde sehr geschätzt werden!

    
user1806676 08.11.2012, 14:04
quelle

4 Antworten

19

Die direkte Anpassung eines einzelnen 1D-Gaußschen Signals ist ein nichtlineares Anpassungsproblem. Sie finden fertige Implementierungen hier oder hier , oder hier für 2D oder hier (wenn Sie die Statistik-Toolbox haben) (Haben Sie schon von Google gehört? :)

Wie auch immer, es könnte eine einfachere Lösung geben. Wenn Sie sicher sind, dass Ihre Daten y gut mit einem Gaußschen Wert beschrieben werden und über den gesamten x -Bereich einigermaßen gut verteilt sind, können Sie das Problem linearisieren (dies sind Gleichungen, keine Anweisungen):

%Vor%

wo die Substitutionen

%Vor%

wurden gemacht. Lösen Sie nun das lineare System Ax=b mit (das sind Matlab-Anweisungen):

%Vor%

Der Vektor x , den Sie auf diese Weise gefunden haben, ist gleich

%Vor%

, die Sie dann zurückentwickeln müssen, um den Mittelwert μ und die Standardabweichung σ zu finden:

%Vor%

Was Sie mit x(3) == R überprüfen können (es sollte nur kleine Unterschiede geben).

    
Rody Oldenhuis 08.11.2012, 14:23
quelle
2
___ antwort13290845 ___

Vielleicht haben Sie das, wonach Sie suchen? Nicht sicher über die Kompatibilität: Ссылка

Aus seiner Dokumentation:

%Vor%     
___ answer31279213 ___

Ich fand, dass die "fit" -Funktion von MATLAB langsam war, und verwendete "lsqcurvefit" mit einer Inline-Gauß-Funktion. Dies ist für die Anpassung einer Gaußschen FUNKTION. Wenn Sie nur Daten in eine Normalverteilung einpassen möchten, verwenden Sie "normfit".

Überprüfen Sie es

%Vor%     
___ qstntxt ___

Ich habe eine Reihe von Frequenzdaten mit Peaks, auf die ich eine Gaußsche Kurve anpassen muss, und dann die volle Breite halbmaximal aus. Der FWHM-Teil, den ich tun kann, habe ich bereits einen Code dafür, aber ich habe Probleme, Code zu schreiben, um dem Gaussian zu passen.

Kennt irgendjemand irgendwelche Funktionen, die das für mich tun oder mir in die richtige Richtung zeigen könnten? (Ich kann die kleinsten Quadrate für Linien und Polynome verwenden, aber ich kann es nicht für Gaussians funktionieren)

Es wäre auch hilfreich, wenn es sowohl mit Octave als auch mit Matlab kompatibel wäre, da ich Octave im Moment habe, aber bis nächste Woche keinen Zugang zu Matlab bekomme.

Jede Hilfe würde sehr geschätzt werden!

    
___ tag123matlab ___ MATLAB ist eine von MathWorks entwickelte Hochsprachen- und interaktive Programmierumgebung für numerische Berechnungen und Visualisierung. Fragen sollten entweder mit [tag: matlab] oder [tag: oktave] versehen werden, aber nicht mit beiden, es sei denn, die Frage bezieht sich explizit auf beide Pakete. Wenn Sie dieses Tag verwenden, erwähnen Sie bitte die MATLAB-Version, mit der Sie arbeiten (z. B. R2017a). ___ answer26766965 ___

Ich hatte ein ähnliches Problem. Dies war das erste Ergebnis bei Google, und einige der hier verlinkten Skripte haben meinen Matlab zum Absturz gebracht.

schließlich fand ich hier , dass Matlab eine Fit-Funktion eingebaut hat, die auch für Gauß-Benutzer geeignet ist.

sieht es so aus:

%Vor%     
___ tag123curvefitting ___ Anpassen der 1-D-Kurve an Datenpunkte, Minimieren der vordefinierten Fehler / Verlust-Funktion. ___ tag123octave ___ GNU Octave ist ein mathematisches Softwarepaket und eine Skriptsprache. Die Skriptsprache soll mit [tag: matlab] kompatibel sein, und die beiden Pakete sind fast vollständig konsistent. Die Syntax ist matrixbasiert. Octave ist in C ++ implementiert. Verwenden Sie entweder das [tag: octave] -Tag oder das [tag: matlab] -Tag, es sei denn, Ihre Frage betrifft ** beide ** Pakete. ___ tag123gaussian ___ für Probleme im Zusammenhang mit Gauß-Funktionen ___ qstnhdr ___ Wie passe ich einen Gaußschen Wert an Daten in Matlab / Oktave an? ___ answer13290854 ___

Die direkte Anpassung eines einzelnen 1D-Gaußschen Signals ist ein nichtlineares Anpassungsproblem. Sie finden fertige Implementierungen hier oder hier , oder hier für 2D oder hier (wenn Sie die Statistik-Toolbox haben) (Haben Sie schon von Google gehört? :)

Wie auch immer, es könnte eine einfachere Lösung geben. Wenn Sie sicher sind, dass Ihre Daten %code% gut mit einem Gaußschen Wert beschrieben werden und über den gesamten %code% -Bereich einigermaßen gut verteilt sind, können Sie das Problem linearisieren (dies sind Gleichungen, keine Anweisungen):

%Vor%

wo die Substitutionen

%Vor%

wurden gemacht. Lösen Sie nun das lineare System %code% mit (das sind Matlab-Anweisungen):

%Vor%

Der Vektor %code% , den Sie auf diese Weise gefunden haben, ist gleich

%Vor%

, die Sie dann zurückentwickeln müssen, um den Mittelwert μ und die Standardabweichung σ zu finden:

%Vor%

Was Sie mit %code% überprüfen können (es sollte nur kleine Unterschiede geben).

    
___
Dennis Jaheruddin 08.11.2012 14:22
quelle
1

Ich hatte ein ähnliches Problem. Dies war das erste Ergebnis bei Google, und einige der hier verlinkten Skripte haben meinen Matlab zum Absturz gebracht.

schließlich fand ich hier , dass Matlab eine Fit-Funktion eingebaut hat, die auch für Gauß-Benutzer geeignet ist.

sieht es so aus:

%Vor%     
Ohad Cohen 05.11.2014 20:57
quelle
0

Ich fand, dass die "fit" -Funktion von MATLAB langsam war, und verwendete "lsqcurvefit" mit einer Inline-Gauß-Funktion. Dies ist für die Anpassung einer Gaußschen FUNKTION. Wenn Sie nur Daten in eine Normalverteilung einpassen möchten, verwenden Sie "normfit".

Überprüfen Sie es

%Vor%     
MJRunfeldt 07.07.2015 21:03
quelle