2016-12-01 1 views
0

Я пытаюсь пробовать 1000 чисел из распределения с заданной плотностью, которая равна f (x) = (1/3) * X^2 между -1 < x < 2. Пока у меня это есть, гистограмма, это явно неправильно, но я думаю, что пойду в правильном направлении. Любая помощь относительно того, как я могу это исправить, будет очень признательна.Использование метода отклонения для выборки с заданной функцией плотности?

X=rand(0,1000); Y=rand(1,10000); 
a=-1; 
b=2; 
c=2; 
f = (1/3).*X.^2; 

for i = 1:length(X) 
while(Y(i) > f) 
    U = rand; V = rand; 
    X(i) = a+(b-a)*U; 
    Y(i) = c*V; 
end 

end 
hist(X); 
X 
+1

Возможно, это ошибка? Первая строка должна быть «X = rand (1,1000);»? – mpaskov

+0

@mpaskov Я думаю, что сработало! Спасибо огромное! –

+0

Как я упоминал ранее, максимальное значение 'f' достигается при 2 и равно 4/3. Если вы установили 'c' на 4/3, ваша выборка была бы более эффективной. –

ответ

-1

Образцы образцов из произвольного распределения на самом деле довольно просты. Вам нужно только сделать две вещи: 1) найти CDF (путем интеграции PDF) и 2) найти обратную сторону CDF. Затем вы просто рисуете образцы из равномерного распределения (используя rand()) и сопоставляете это значение с инверсией CDF. В вашем случае вы получите

y = rand (1e6, 1); x = nthroot ((9 * c - 1), 3); hist (x, 1000)

+0

Извините, что означает – Daniel

+0

y = rand (1e6, 1); x = nthroot ((9 * y - 1), 3); hist (x, 1000) – Daniel

+0

Вы ответили на связанный, но не заданный напрямую вопрос. В вашем коде отсутствует отказ. –

Смежные вопросы