histogram of Bivariate Normal distribution plot

조회 수: 9 (최근 30일)
Giovanni Curiazio
Giovanni Curiazio 2023년 3월 20일
답변: Yash 2023년 11월 16일
I have values from a monte carlo simulation. now i am supposed to plot the results using a bivariate gaussian.
Since it is experimental data on a specific topic, i was given the empirical formula of the PDF(x,y):
and this is the plot I should get( obviously it will be different depending on my data):
I don't understand how to implement the plot
This is the part of the code where I calculate STD, means:
N=1000
x=detriti_coord(:,1); %along-track direction Gaussian
y=detriti_coord(:,2); %cross-track direction Gaussian
mu_x=mean(x);
mu_y=mean(y);
sigma_x= sqrt(1/N*sum((x-mu_x).^2))
sigma_y= sqrt(1/N*sum((y-mu_y).^2))
Delta_x= x-mu_x;
Delta_y= y-mu_y;
rho_xy= sum(Delta_x.*Delta_y)/(N*sigma_x*sigma_y);

답변 (1개)

Yash
Yash 2023년 11월 16일
Hi Giovanni,
I understand that you are facing issues while making a 3 dimensional histogram of a PDF function.
Since you have clearly mentioned that you are facing issues in the implementation of the plot, I am assuming that your calculations are correct. From the problem statement, it seems that you want to plot the histograms of x and y values from the experimental data.
To achieve this, you can use the "hist3" function. You can refer the to the documentation for "hist3"at the following link: https://www.mathworks.com/help/stats/hist3.html.
If you want to plot the rho_xy as well with the histogram, you can use the "surf" function. You can refer the to the documentation for "surf" at the following link: https://www.mathworks.com/help/matlab/ref/surf.html
Note that to show both the plots in the same axes, you need to use "hold on".
I am using random values to show an example:
x = randi(10, 100, 1); %100*1 matrix of random doubles ranging from 0 to 10
y = randi(10, 100, 1);
hist3([x y]);
hold on
arraySize = 100;
sigma = 50;
x1 = linspace(0,10,arraySize); %100 points between 0 to 10
[X,Y] = meshgrid(x1,x1); %setting up for the x and y axis for the surf plot
z = fspecial("gaussian", arraySize, sigma); % gaussian distribution
z = z*(3/max(z,[],'all')); % scaling from 0 to 3
ans = 3
surf(X,Y,z);
hold off
Hope this helps!

카테고리

Help CenterFile Exchange에서 Histograms에 대해 자세히 알아보기

제품


릴리스

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by