我試圖在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