我有两个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);
答案 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')
方法2:使用normpdf()
(需要统计信息工具箱)
您可以使用
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')