Pytanie w sprawie probability, plot, matlab, histogram – Jak stworzyć wykres gęstości matrycy 3D MATLAB?

1

Mam problem z tworzeniem funkcji gęstości połączenia z danych. To, co mam, to rozmiary kolejki z magazynu jako dwa wektory zapisane jako:

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

Następnie używam funkcji hist3 do utworzenia histogramu 3D. Oto co otrzymuję:http://dl.dropbox.com/u/709705/hist-plot.png

Chcę, aby oś Z była znormalizowana, tak aby przechodziła z [0 1].

Jak mogę to zrobić? A może ktoś ma świetnyMatlab gęstości złącza funkcja w magazynie?

To jest podobne (Jak narysować funkcję gęstości prawdopodobieństwa w MatLab?) ale w 2D.

Chcę mieć 3Dx:ask queue, y:bid queue, z:probability.

Byłoby bardzo wdzięczne, gdyby ktoś mógł mi w tym pomóc, ponieważ uderzyłem tutaj o ścianę.

Twoja odpowiedź

3   odpowiedź
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>

Jeśli „zintegrujesz” to otrzymasz 1.

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

otem za pomocą hist3

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

pomysł polegałby na ich normalizacji za pomocą:

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

ale nie mogę znaleźć miłego sposobu na późniejsze spiskowanie ich do histogramu (możesz użyćbar3(N), ale myślę, że etykiety osi będą musiały być ustawione ręcznie).

Rozwiązanie, które skończyłem, polega na modyfikacji koduhist3. Jeśli masz do tego dostęp (edit hist3) to może działać dla ciebie, ale nie jestem pewien, jaka jest sytuacja prawna (potrzebujesz licencji na zestaw narzędzi statystycznych, jeśli skopiujesz hist3 i sam go zmodyfikujesz, to prawdopodobnie nie jest legalne).

W każdym razie znalazłem miejsce, w którym dane są przygotowywanesurf wątek. Istnieją 3 macierze odpowiadające x, yi z. Tuż przed obliczeniem zawartości matrycy z (wiersz 256) wstawiłem:

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

który normalizuje macierz zliczeń.

Ostatecznie po narysowaniu histogramu można ustawić limity osi za pomocą:

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

Jeśli to konieczne.

To jeden ze sposobów, aby to zrobić! I to działa! Groot
2

które skończyło się na:

(data_x i data_y są wartościami, które chcesz obliczyć na hist3)

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

To dało mi wykres gęstości wspólnej w 3D. Które można sprawdzić, obliczając całkę na powierzchni za pomocą:

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

Kiedy zmiennakrok przechodzi do zera zmiennejintegralOverDensityPlot idzie do 1.0

Mam nadzieję, że to komuś pomoże!

Powiązane pytania