Frage an matlab, histogram, probability, plot – Wie erstelle ich ein 3D-Fugendichtediagramm MATLAB?

1

Ich habe ein Problem mit der Erstellung einer Verbindungsdichtefunktion aus Daten. Ich habe Warteschlangengrößen aus einem Bestand als zwei Vektoren gespeichert als:

<code>X = [askQueueSize bidQueueSize];
</code>

Ich benutze dann die Hist3-Funktion, um ein 3D-Histogramm zu erstellen. Das bekomme ich:http://dl.dropbox.com/u/709705/hist-plot.png

Ich möchte, dass die Z-Achse so normalisiert wird, dass sie von [0 1] abweicht.

Wie mache ich das? Oder hat jemand eine tolleFugendichte Matlab Funktion auf Lager?

Das ist ähnlich (Wie zeichnet man eine Wahrscheinlichkeitsdichtefunktion in MatLab?) aber in 2D.

Was ich will, ist 3D mitx:ask queue, y:bid queue, z:probability.

Würde mich sehr freuen, wenn mir jemand dabei helfen könnte, weil ich hier drüben gegen eine Wand gestoßen bin.

Deine Antwort

3   die antwort
2

rtige Lösung, mit der ich gelandet bin:

(data_x und data_y sind Werte, die Sie bei hist3 berechnen möchten)

<code>x = min_x:step:max_x; % axis x, which you want to see
y = min_y:step:max_y; % axis y, which you want to see

[X,Y] = meshgrid(x,y); *%important for "surf" - makes defined grid*

pdf = hist3([data_x , data_y],{x y}); %standard hist3 (calculated for yours axis)
pdf_normalize = (pdf'./length(data_x)); %normalization means devide it by length of 
                                         %data_x (or data_y)
figure()
surf(X,Y,pdf_normalize) % plot distribution
</code>

Dies gab mir die Fugendichtedarstellung in 3D. Was überprüft werden kann, indem das Integral über der Oberfläche berechnet wird mit:

<code>integralOverDensityPlot = sum(trapz(pdf_normalize));
</code>

Wenn die VariableSchritt geht die Variable auf NullintegralOverDensityPlot geht zu 1.0

Hoffe das hilft jemandem!

3

dies zu tun. Sie können die Histogrammzählungen mit hist3 zurückholen

<code>[N C] = hist3(X);
</code>

und die Idee wäre, sie mit zu normalisieren:

<code>N = N / sum(N(:));
</code>

Aber ich finde keine gute Möglichkeit, sie anschließend wieder in ein Histogramm zu zeichnenbar3(N), aber ich denke, die Achsenbeschriftungen müssen manuell eingestellt werden).

Die Lösung, die ich gefunden habe, besteht darin, den Code von zu ändernhist3. Wenn Sie Zugang dazu haben (edit hist3) dann mag dies für dich funktionieren, aber ich bin mir nicht sicher, wie die rechtliche Situation ist (du brauchst eine Lizenz für die Statistik-Toolbox, wenn du hist3 kopierst und selbst modifizierst, ist dies wahrscheinlich nicht legal).

Wie auch immer, ich habe den Ort gefunden, an dem die Daten für asurf Handlung. Es gibt 3 Matrizen, die x, y und z entsprechen. Kurz bevor der Inhalt der z-Matrix berechnet wurde (Zeile 256), habe ich Folgendes eingefügt:

<code>n = n / sum(n(:));
</code>

was die Zählmatrix normalisiert.

Sobald das Histogramm gezeichnet ist, können Sie die Achsengrenzen wie folgt festlegen:

<code>xlim([0, 1]);
</code>

wenn erforderlich.

Das ist eine Möglichkeit, es zu tun! Und es funktioniert! Groot
0

<code>[bins centers] = hist3(X); % X should be matrix with two columns
c_1 = centers{1};
c_2 = centers{2};
pdf = bins / (sum(sum(bins))*(c_1(2)-c_1(1)) * (c_2(2)-c_2(1)));
</code>

Wenn Sie dies "integrieren", erhalten Sie 1.

<code>sum(sum(pdf * (c_1(2)-c_1(1)) * (c_2(2)-c_2(1))))
</code>

Verwandte Fragen