Cómo crear 3D de la articulación de la densidad de la trama de MATLAB?

Estoy teniendo un problema con la creación de una joint función de densidad a partir de los datos. Lo que tengo es la cola de tamaños a partir de un stock como dos vectores guardado como:

X = [askQueueSize bidQueueSize];

Yo, a continuación, utilizar la hist3-función para crear un histograma 3D. Esto es lo que obtengo:
http://dl.dropbox.com/u/709705/hist-plot.png

Lo que yo quiero es tener el eje Z normalizado, de modo que va desde [0 1].

¿Cómo puedo hacer eso? O hacer que alguien tenga una gran de la articulación de la densidad de matlab función en stock?

Esto es similar ( Cómo dibujar función de densidad de probabilidad en MatLab? ), pero en 2D.

Lo que yo quiero es 3D con x:ask queue, y:bid queue, z:probability.

Agradecería mucho si alguien me pudiera ayudar con esto, porque me ha golpeado una pared de más aquí.

InformationsquelleAutor Groot | 2012-04-12

3 Kommentare

  1. 3

    Yo no podía ver una manera sencilla de hacer esto. Usted puede obtener el histograma de la cuenta atrás de hist3 utilizando

    [N C] = hist3(X);

    y la idea sería normalizamos con:

    N = N / sum(N(:));

    pero no puedo encontrar una buena manera de trazar de nuevo a un histograma después (puede utilizar bar3(N), pero creo que las etiquetas de los ejes, deberá configurar manualmente).

    La solución que se me terminó con consiste en modificar el código de hist3. Si usted tiene acceso a este ( edit hist3 ), entonces esto puede trabajar para usted, pero no estoy muy seguro de cuál es la situación legal es (usted necesita una licencia para las estadísticas de la caja de herramientas, si copia hist3 y modificarlo, esto probablemente no es legal).

    De todos modos, he encontrado el lugar donde los datos se está preparando para una surf de la parcela. Hay 3 matrices correspondientes a x, y y z. Justo antes de que el contenido de la z de la matriz fueron calculados (línea 256), he insertado:

    n = n / sum(n(:));

    que normaliza el recuento de la matriz.

    Finalmente una vez que el histograma se representa, puede establecer los límites de los ejes con:

    xlim([0, 1]);

    si es necesario.

    • Que es una manera de hacerlo! Y funciona!
  2. 2

    Con la ayuda de un chico de mathworks foro, esta es la gran solución que terminó con:

    (data_x y data_y son los valores que se desea calcular en hist3)

    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

    Esto me dio la articulación de la densidad de la trama en 3D. Que puede ser comprobada mediante el cálculo de la integral sobre la superficie con:

    integralOverDensityPlot = sum(trapz(pdf_normalize));

    Cuando la variable paso va a cero la variable integralOverDensityPlot va a 1.0

    Espero que esto ayude a alguien!

  3. 0

    Hay una manera rápida de cómo hacer esto con hist3 función:

    [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)));

    Si «integrar» a esto usted va a obtener 1.

    sum(sum(pdf * (c_1(2)-c_1(1)) * (c_2(2)-c_2(1))))

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea