0

我在绘制三角形分布的 CDF 时遇到了一些错误;我可以使用在 MATLAB 中生成三角形分布来绘制直方图,但是如何绘制 CDF?

n = 10000; %Random number 
a = 0.26; %Min 
b = 0.46; %Max
c = 0.35; %Mode 
u = rand(n, 1); 
x = zeros(n, 1);
for i = 1:n   
    U = u(i);   
    if U < (c-a)/(b-a);    
        X = a + sqrt(U*(b-a)*(c-a)); 
    else       
        X = b - sqrt((1-U)*(b-a)*(b-c));  
    end    
    x(i) = X; 
end 
hist(x,100)

if a <= x && a <=c
  cdf = (x-a)^2/12
elseif c <= x && x <= b
  cdf = 1-(b-x)^2/4
end

if 0 <= p && p <= 0.75
  INV = a+2*sqrt(3*p);
elseif 0.75 <= p && p <= 1
  INV = b-2*sqrt(1-p)
end
4

2 回答 2

0

我可能会错过一些东西,但是为什么以下不做呢?y=hist(x,100); cdf=cumsum(y); 情节(cdf)

于 2012-08-12T06:33:39.947 回答
0

使用统计工具箱中的概率分布对象makedist()使用、pdf()cdf()函数,这一点变得非常容易。

方法 1:使用概率分布对象(需要 Statistics Toolbox)
概率密度函数 (PDF)可从pdf(pd,X). 累积分布函数 (CDF)通过获得cdf(pd,X)

% MATLAB R2019a
% Setup
a = 0;   % lowerbound
m = 5;   % mode 
b = 12;  % upperbound
pd = makedist('Triangular',a,m,b)     % Create probability distribution object

X = a:0.1:b;                          % domain of X   (useful for plotting)

figure
s(1) = subplot(1,2,1)
    plot(X,pdf(pd,X))
s(2) = subplot(1,2,2)
    plot(X,cdf(pd,X))
sgtitle('X ~ Triangular(a,m,b)')

ylabel(s(1),'PDF')
ylabel(s(2),'CDF')

三角分布 PDF 和 CDF


方法 2:解析公式
您还可以使用已知的解析公式(封闭形式)来绘制三角形分布,并以此方式直接绘制PDFCDF

于 2019-12-12T00:11:54.733 回答