简体   繁体   中英

Triangular distributed random variates (PDF and CDF) in MATLAB

I am facing some error to plot the CDF for Triangular distribution; I can plot the histogram using Generating a Triangular distribution in MATLAB , but how do I plot the 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

I probably miss something, But why won't the following do? y=hist(x,100); cdf=cumsum(y); plot(cdf)

This is made significantly easier with Probability Distribution Objects in the Statistics toolbox using the makedist() , pdf() , and cdf() functions.

Method 1: Using probability distribution objects (requires Statistics Toolbox)
The probability density function (PDF) is available from pdf(pd,X) . The cumulative distribution function (CDF) is obtained with 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


Method 2: Analytical formulas
You can also use the known analytical formulas (closed form) for the Triangular distribution and directly plot the PDF and CDF that way.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM