2013-11-24 6 views
7

Ho una gaussiana bivariato ho definito come segue:Traccia un contorno del PDF normale multivariato di un dato MVN in MATLAB?

I=[1 0;0 1]; 
mu=[0,0]; 
sigma=0.5*I; 
beta = mvnrnd(mu,sigma,100); %100x2 matrix where each column vector is a variable. 

ora voglio tracciare un contorno del pdf della matrice sopra. Quello che ho fatto:

Z = mvnpdf(beta,mu,sigma); %100x1 pdf matrix 

Ora voglio tracciare un contorno della beta gaussiana bivariata. So che dovrei usare il contorno del comando ma questo richiede che Z sia una matrice quadrata. Come lo risolvo? Sono molto confuso e non sono sicuro di come tracciare il contorno del gaussiano bivariato !! QUALSIASI aiuto è molto apprezzato ..

Grazie

risposta

14

È necessario definire i x, y assi e utilizzare meshgrid (o ndgrid) per generare tutte le combinazioni di valori X, Y, sotto forma di due matrici X e Y. È quindi calcolare i valori Z (il vostro pdf gaussiana) per coloro X e Y, e la trama Z in funzione di X, Y utilizzando contour (trama di contorno), o forse surf (grafico 3D).

mu = [0,0]; %// data 
sigma = [.5 0; 0 .5]; %// data 
x = -5:.1:5; %// x axis 
y = -4:.1:4; %// y axis 

[X Y] = meshgrid(x,y); %// all combinations of x, y 
Z = mvnpdf([X(:) Y(:)],mu,sigma); %// compute Gaussian pdf 
Z = reshape(Z,size(X)); %// put into same size as X, Y 
%// contour(X,Y,Z), axis equal %// contour plot; set same scale for x and y... 
surf(X,Y,Z) %// ... or 3D plot 

Graph obtained with <code>contour(X,Y,Z), axis equal</code> Graph obtained with <code>surf(X,Y,Z)</code>

+1

Grazie mille ha funzionato perfettamente – Evan

+1

Questo codice funziona perfettamente anche in Octave, a condizione che il pacchetto di statistica viene caricato 'pkg carico statistics' :) –

Problemi correlati