我在为三角分布绘制CDF时遇到了一些错误;我可以使用Generating a Triangular distribution in 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
我可能会想念一些东西,但是为什么下面的内容不会呢?y = hist(x,100);cdf = cumsum(y);plot(cdf)
[使用Probability Distribution Objects,makedist()
和makedist()
功能,通过统计信息工具箱中的pdf()
,这变得非常容易。
方法1:使用概率分布对象(需要统计工具箱)pdf()
可从cdf()
获得。用cdf()
获得probability density function (PDF)。
pdf(pd,X)
cumulative distribution function (CDF)
方法2:分析公式您也可以为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')
和。