Я попытался создать треугольное распределение вероятности в 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
Сумма двух мундиров - самый простой способ сделать это. Однако вы также можете инвертировать CDF, для чего требуется только один вызов rand, но немного больше математики. –
Да, сумма двух мундиров проще всего, но это полезно только для симметричного треугольного распределения. Код в topicstart допускает любую треугольную форму. Кстати, я считаю, что вы все еще можете оптимизировать этот код, используя логическую индексацию, чтобы удалить цикл. –