|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Iskander Sagen 2:5030/1186.2 17 May 2001 19:18:29 To : Alex Baskakov Subject : Re теория вероятности -------------------------------------------------------------------------------- AB> Как сгенерировать некое случайное событие по экспоненциальному AB> (показательному) закону распределния, если известно что оно во AB> времени в среднем повторяется через 50 минут? AB> AB> Пусть плотность распределния f(x)=k*exp(-k*x); AB> Функция распределения F(x)=1-exp(-k*x); Я не помню точно как, но помню что тебе нужно. Метод обратрых функций. 1) аходишь х из функции распределения, т.е. обратную функцию. У тебя вроде так. x = log(1-F(x))/(-k) 2) Подставляешь вместо F(x) случайную величину распределённую равномерно в промежутке [0,1]. Это и есть твой рэнд. F(x)=rand()/(double)MAXRAND копи/пасте x = log(1-rand()/(double)MAXRAND)/(-k) Полученный х - это и есть требуемая СВ расперделённая по нужной ФРВ. Вообще-то где я только не встречал метод обратных ф-ций. Так что если не веришь знаниям двухлетней давности, то поищи в справочниках сам. AB> AB> Тогда матожидание M=50, M=1/k -> k=1/50; AB> AB> AB> Имеем некий масштаб времени в минутах: AB> for(minutes=0; minutes<MAXMINUTES; minutes++) { AB> // ??? AB> } AB> AB> Что вставить? Hаверное надо как-то через квази-равномерное rand() AB> распределние? :) Подскажите плиз. :) AB> AB> Может быть так: AB> AB> double F(int x) { AB> return 1-exp(-k*x); AB> } AB> AB> AB> for(x=0; x<MAXMINUTES; x++) { AB> if (rand()/32767.0<F(x)) { AB> generate(); AB> x=0; AB> } AB> } А этот метод, который ты показал, какоё-то дядька с известным именем до тебя уже изобрёл (если ты ходишь на лекции по теории вероятности/статистич. моделирование, то должен знать его), используется, когда совсем плохо. До скоpого. --- DVMedit V0.818b * Origin: (2:5030/1186.2) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/39190A804DD0.html, оценка из 5, голосов 10
|