在MATLAB中叠加两个图

时间:2019-12-12 03:36:01

标签: matlab plot histogram probability probability-density

我有两个RV,一个unifrom和一个高斯,我想叠加他们的PDF。 (直方图)。我正在尝试保持功能,但它不起作用,因为它仅显示第二个图。我是MATLAB新手,所以将不胜感激

% MATLAB R2019a
% Setup
N = [1:5 10 20 40];
LB = 0;
UB = 3;
n = 10000;

% Generate random variates
X = LB + (UB - LB)*rand(max(N),n);
Sn = cumsum(X); 

mu = 1.5;
sigma = .75;
S_1 = mu + sigma.*randn(n, 1)

hist1= histogram(Sn(1,:),'Normalization','pdf','EdgeColor', 'blue', 'FaceColor',  'blue')
hold on
hist2 = histogram(S_1(:), 'EdgeColor', 'green', 'FaceColor',  'green', 'FaceAlpha', 0.2);

1 个答案:

答案 0 :(得分:0)

tl; dr:带有和不带有统计信息工具箱的多种方法。


该方法无需使用足够大的样本量即可凭直方图凭经验估计PDF。

方法1:使用概率分布对象(需要统计信息工具箱)
您可以直接使用probability density functions (PDFs)来绘制probability distribution objects,这使您可以利用makedist()pdf()函数。

X 〜均匀( a b )的PDF是从pdf(pdX,x)获得的,其中x包含您要在其中评估PDF的随机变量 X 的域(支持)中的值。

% MATLAB R2019a
% Setup
a = 0;          % lowerbound for X ~ Uniform(a,b)
b = 3;          % upperbound for X
mu = 1.5;       % mean for Y ~ Normal(mu,sigma)       E[Y] = mu
sigma = 0.75;   % standard dev                        sqrt(Var(Y)) = sigma

% Create distributions
pdX = makedist('Uniform',a,b);                        X ~ Uniform(a,b)
pdY = makedist('Normal',mu,sigma);                    Y ~ Normal(mu,sigma)


step = 0.1;
Domain = -2:step:5;               % Useful for plotting

% Plot
figure, hold on
plot(Domain,pdf(pdX,Domain),'b-','DisplayName','Uniform(0,3)')      % Plot pdf for X
plot(Domain,pdf(pdY,Domain),'k-','DisplayName','Normal(1.5,0.75)')  % Plot pdf for Y
legend('show')

Plot showing the PDFs for the Uniform(0,3) and Normal(1.5,0.75) random variables.


方法2:使用normpdf() (需要统计信息工具箱)
您可以使用

轻松实现统一分发的pdf
fXh =@(x) 0*(x<a) + (1/(b-a))*(a<=x & x<=b) + 0*(b<x);   % pdf for Uniform(a,b)

,无需任何工具箱。

然后使用语法为normpdf(x,mu,sigma)的内置normpdf()函数(需要Statistics工具箱)。

您得到相同的结果。

figure, hold on
plot(Domain,fXh(Domain),'b-','DisplayName','Uniform(0,3)')
plot(Domain,normpdf(Domain,mu,sigma),'k-','DisplayName','Normal(1.5,0.75)')
legend('show')

方法3:不需要工具箱

Normal distribution (Gaussian)实施PDF,该PDF仅具有一个术语,因为它是不受限制的。这样可以避免使用“统计”工具箱。

X Y 的PDF分别从fXh(Domain)fYh(Domain)获得。

fYh =@(x) (1/(sigma*sqrt(2*pi)))*exp(-0.5*((x-mu)/sigma).^2);  % pdf for Normal(mu,sigma)

% Plot
figure, hold on
plot(Domain,fXh(Domain),'b-','DisplayName','Uniform(0,3)')
plot(Domain,fYh(Domain),'k-','DisplayName','Normal(1.5,0.75)')
legend('show')