Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Verkaufe 2 Matlab Bücher

Fachkräfte:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Überlagerte Normalverteilung

 

Kn3ipnt3rrorist
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.11.16
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 03.03.2020, 13:13     Titel: Überlagerte Normalverteilung
  Antworten mit Zitat      
Moin,

Folgendes Problem:

Ich habe Histogrammdaten aus einem Bildverarbeitungsprogramm (ImageJ) in folgender Form:

erste spalte bin start, in dem die startwerte der einzelnen Auswertungsintevalle stehen
zweite spalte count, in dem die Anzahl der PIxel stehen, die in den einzelnen bins gelandet sind


Im Endeffekt handel es sich um 2 verschiedene Stoffe, die in einem Tomogramm aufgenommen wurden. ICh möchte nun separat für beide Stoffe aus dem Tomogramm die Mittelwerte und Standardabweichung für die zugehörigen Grauwerte bestimmen. jemand eine AHnung wie ich das direkt uas den Daten gewinnen kann?

Im Anhang befindet sich ein Beispielhistogramm und eine csv Datei mit den zugehörigen Daten.

Vielen lieben Dank!

Benni

berlagerte_Normalverteilung.fig
 Beschreibung:
Plot der Histogrammdaten

Download
 Dateiname:  berlagerte_Normalverteilung.fig
 Dateigröße:  19.98 KB
 Heruntergeladen:  23 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 21.145
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.03.2020, 14:10     Titel:
  Antworten mit Zitat      
Hallo,

in erster Näherung: im lokalen Minimum in der Mitte die Daten trennen und jeweils eine Normalverteilung anpassen.

Wenn man es genau haben möchte, könnte man das als Optimierungsproblem angehen, mit den zu optimierenden Größen Mittelwerte, Standardabweichung und, soweit nicht bekannt, Prozentsatz des einen Stoffes gegenüber dem anderen Stoff.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Kn3ipnt3rrorist
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.11.16
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 03.03.2020, 17:45     Titel:
  Antworten mit Zitat      
OKi danke schonmal, hab's jetzt auch erstmal aufgetrennt.

Hättest du für die 2. Lösung irgendwie nen Ansatz? ALs Optimierung wäre schon besser, die Histogramme sind nicht immer so eineindeutig, sondern gehen teilweise ineinander über, siehe Anhang

Viele Grüße, Benni

berlagerte_Normalverteilung_nicht_ideal.fig
 Beschreibung:

Download
 Dateiname:  berlagerte_Normalverteilung_nicht_ideal.fig
 Dateigröße:  18.5 KB
 Heruntergeladen:  25 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 21.145
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.03.2020, 18:11     Titel:
  Antworten mit Zitat      
Hallo,

du brauchst eine Funktion, die einen Vektor, der die genannten 5 Parameter enthält, entgegennimmt. Dann muss auf einem Gitter die theoretische Verteilung mit zwei normpdf-Aufrufen erstellt werden.

lsqcurvefit dürfte gut geeignet sein.
Als Startwerte kannst du z.B. die Ergebnisse der ersten Methode verwenden.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Kn3ipnt3rrorist
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.11.16
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 04.03.2020, 16:01     Titel:
  Antworten mit Zitat      
Moin,

Ich habe das jetzt so implementiert

Code:

xdata=M(:,1);
ydata=M(:,2);
fun=@(x,xdata)((((1/(sqrt(2*pi*x(1).^2)))*exp(-(((xdata-x(2)).^2)/(2*(x(1).^2)))))+((1/(sqrt(2*pi*x(3).^2)))*exp(-((xdata-x(4)).^2)/2*(x(3).^2)))));
x0 = [360  1557 493 3200];
x = lsqcurvefit(fun,x0,xdata,ydata);
 


Problem a: er korrigiert aus x immer nur die ersten beiden Werte, die 2. lässt er stehen egal wie ich sie setze und

Problem b: er korrigiert sie immer nur minimal um den Wert der in x0 voreingestellt ist, selbst wenn die fernab der Realität liegen.

als Funktion habe ich jetzt sozusagen nur 2 Normalverteilungen addiert. Ist das so möglich oder liegt da schon der Fehler?


Als Abbruchkriterium gibt er folgendes aus:
Code:
lsqcurvefit stopped because the final change in the sum of squares relative to
its initial value is less than the default value of the function


Danke schonmal im Voraus und für die gegebenen Ratschläge Smile


edit:

Meine gesuchten Variablen in x sind sigam1, mu1, sigma2 und mu2 in der Reihenfolge
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 21.145
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.03.2020, 16:32     Titel:
  Antworten mit Zitat      
Hallo,

ein paar Dinge fallen mir auf:
* die Skalierung im Plot sind absolute Zahlen. Du müsstest also die Skalierung deiner PDFs geeignet anpassen, sonst passt das überhaupt nicht zusammen
* wenn du die Statistics and Machine Learning Toolbox hast, würde ich normpdf verwenden, z.B. normpdf(xdata, x(2), x(1)) statt des länglichen ersten Teils im Function Handle
* wenn nicht je 50% von den beiden Stoffen kommen, dann würde ich auch die Häufigkeit der Stoffe noch als Unbekannte mit reinnehmen, also insgesamt:

Code:
N * ( x(5) * normpdf(xdata, x(2), x(1)) + (1-x(5)) * normpdf(xdata, x(4), x(3)) )

mit Startwert z.B. 0.5 für x(5).

N ist entweder schon die Anzahl der Messungen oder sollte zumindest in der Größenordnung sein. Das müsste ich mir noch genauer überlegen. Im Zweifelsfall mache aus N ein x(6) ;)

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Kn3ipnt3rrorist
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 01.11.16
Wohnort: Dresden
Version: ---
     Beitrag Verfasst am: 04.03.2020, 18:06     Titel:
  Antworten mit Zitat      
Ok, schaut besser aus. Jedenfalls ohne Konzentrationen. Mal zum Vergleich, x1 ist die Lösung der Berchnung wenn ich x(5) aus deinem Beispiel rauslasse, und x2 ist das ergebniss für x(5)=0.4 als Startwert

Code:

x1=[1.208243891369379e+02,7.202097601645262e+02,1.330761148329484e+02,3.655485458685765e+03,5.802485484560204e+07]
x2=[1.140967048222565e+04,-6.129554072089329e+03,3.878970365666846e+02,3.729728152301339e+03,-36.209993125278440,2.700786640065983e+07]
 


Das erste ergebniss sieht auch von den Mittelwerten ganz gut aus, nur die Standardabweichungen schauen mir sehr eng aus.

Zitat:
* die Skalierung im Plot sind absolute Zahlen. Du müsstest also die Skalierung deiner PDFs geeignet anpassen, sonst passt das überhaupt nicht zusammen


den part verstehe ich nicht ganz. welcher Plot?^^

Grüße Benni
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 21.145
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.03.2020, 18:24     Titel:
  Antworten mit Zitat      
Hallo,

in den Figures, die du zur Verfügung gestellt hast.
Eine PDF ist ja so normalisiert, dass die Fläche darunter 1 ist. Das ist bei der Figure definitiv nicht der Fall.

Du kannst bei den Parametern auch untere und obere Schranken angeben. Beispielsweise können Varianzen nicht negativ sein, und die Mittelwerte sollten zumindest mal im Intervall der Beobachtungen bleiben. x(5) sollte zwischen 0 und 1 sein.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2020 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.