我试图在Matlab中生成三角形概率分布,但没有成功。我使用公式http://en.wikipedia.org/wiki/Triangular_distribution。在Matlab中生成三角形分布
n = 10000000;
a = 0.2;
b = 0.7;
c = 0.5;
u = sqrt(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);
直方图看起来像这样:
看起来不像很多三角形给我的。有什么问题?我在滥用rand(n)
?
那真是愚蠢的我。谢谢! – Superbest 2012-02-11 16:59:42
两种制服的总和是迄今为止最简单的方法。但是,您也可以反转CDF,只需要一个rand调用,但数学稍微多一点。 – 2012-02-11 17:41:58
是的,两套制服的总和是最简单的,但它对于对称的三角形分布只是有用的。 topicstart中的代码允许任何三角形形状。顺便说一句,我相信你仍然可以通过使用逻辑索引来优化该代码,以消除循环.. – 2012-02-11 19:29:18