WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Dichtebestimmung von Scatter3

 

gecko
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2014, 10:18     Titel: Dichtebestimmung von Scatter3
  Antworten mit Zitat      
Hey Leute,

ich bin Matlab Anfängerin und habe da ein kleines Problem.
Ich habe eine Kurve (s.Bild) und möchte gerne die Menge an Punkten in meinem 3d-Raum sinnvoll bestimmen. Also die Dichte.
Da es sehr viele Werte sind habe ich mir gedacht ich unterteile den Raum in viele kleine Würfel und bestimme dann die Anzahl an Punkten pro Würfel.
Leider weiß ich nicht wie das funktioniert.
Ich habe auch schon überlegt ein Histogramm zu verwenden, jedoch weiß ich nicht wie ich das mit mehr als 2 Vektoren anstelle.
Ich hoffe jemand hat eine Idee.

Beispiel.jpg
 Beschreibung:

Download
 Dateiname:  Beispiel.jpg
 Dateigröße:  112.64 KB
 Heruntergeladen:  492 mal
Private Nachricht senden Benutzer-Profile anzeigen


gecko
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2014, 18:39     Titel:
  Antworten mit Zitat      
Hat keiner eine Idee? Wie kann ich es denn schaffen, dass ich in einem hist3 auf der Z-Achse nicht die Häufigkeit sondern mir eine beliebige Anzahl von Werten aussuchen kann?
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 05.03.2014, 10:42     Titel:
  Antworten mit Zitat      
Hallo,

deine Idee klingt doch ganz gut und nicht so schwierig umzusetzen. Was hast du denn bisher probiert und was hat nicht geklappt? Eine Implementierung mit notfalls 3 ineinandergeschachtelten for-Schleifen über den Raum ODER mit einer Schleife über die Daten und 3 find Befehlen für die 3 Raumrichtungen sollte doch eigentlich recht schnell zum Ziel führen.

Wie willst du das Ergebnis visualisieren? Eine Möglichkeit wäre beispielsweise in jedem der kleinen Würfel (eher Quader) einen Kreis zu plotten, die Größe oder die Farbe des Kreises kann dann die "Dichte" jedes einzelnen Würfels kodieren.

Also, woran scheitert es?

Viele Grüße,
Nras.
Private Nachricht senden Benutzer-Profile anzeigen
 
gecko
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 25.02.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2014, 16:31     Titel:
  Antworten mit Zitat      
Hi,
also ich habe bis jetzt einfach den hist3(X,bins) Befehl verwendet. Dabei wird X durch meine Kräfte in x-und y-Richtung beschrieben. Ich würde da auch noch meine Kräfte in z-Richtung mit reinnehmen können. Also so, dass auf der z-Achse nicht die Höhe der Bins aufgezeigt wird sondern die Kraft in z-Richtung. Die Größe der Bins kann ich mir dann ja mit bincounts ausgeben lassen.
Ich habe das mal angehangen, wie das jetzt bei mir aussieht.
Dein Vorschlag hört sich wirklich gut an. Da ich aber totale Anfängerin bin, habe ich keine eine wie so eine Schleife aussehen muss.

beispiel1.jpg
 Beschreibung:

Download
 Dateiname:  beispiel1.jpg
 Dateigröße:  94.89 KB
 Heruntergeladen:  448 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 05.03.2014, 17:06     Titel:
  Antworten mit Zitat      
Hallo,

im eindimensionalen Fall kann man das schnell so hinschreiben.
Code:
x = randn(100,1);

% Bin definieren
nBins = 10;                                     % Bin Anzahl
dx = (max(x)-min(x))/nBins;                     % Bin Breite
binCenters = min(x)+((0:nBins-1) + 0.5)*dx;     % Mitte der nBins Bins
binUpperEdges = binCenters + 0.5*dx;            % Obere Kante der Bins

freq = zeros(nBins,1);
for i = 1:length(x)
    bin = find(x(i) <= binUpperEdges,1,'first');% passendes Bin finden
    freq(bin) = freq(bin)+1;                    % dort ein Element zählen
end
 

Das ist vermutlich nicht der eleganteste Weg, um hist() halbwegs nachzubauen, aber Du kannst das dann leicht auf 3 Dimensionen erweitern. Da brauchst du dann noch bins in y und z-Richtung, freq müsste eine 3D-Matrix werden und du brauchst noch 2 find-Befehle.

Danach musst du nur noch den Plot anpassen. Das lässt sich dann nicht mehr so darstellen. Du brauchst dann vermutlich entweder die Größe des Symbols, das du an die Stelle (x,y,z) in deinem 3D Raum plotten willst, oder die Farbe, um die Information über die gefundene Dichte noch hineinzugriegen. Hier geht das noch so:
Code:
figure
plot(x,ones(size(x)),'.')
hold on
bar(binCenters,freq/length(x))


Viele Grüße,

Edit: Ich habe es dann doch mal gestestet: obiger Code liefert zumindest schon mal das gleiche, wie
Code:
[a,b] = hist(x,nBins)

Das ist schon mal ein gutes Zeichen Smile.

Edit2: Hier ist ein Video, wie man die Schleife über die vielen Datenpunkte sogar durch eine Schleife über die wenigen Bins ersetzen kann, sofern du da Lust zu verspürst. find() wird auch nicht benötigt und wird durch logische Abfragen und Indexing getauscht. Wenn du diese Operation also sehr oft ausführst, würde sich vielleicht ein Blick auf dieses Video lohnen.
http://blogs.mathworks.com/videos/2....._tid=Blog_Videos_Category

Nras.
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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.