|
| Дата |
|
USD/RUB | 88.6102 | BTC/USD | 37514.1272 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
07.11.2007, 18:45
|
#1
|
кодер-энтузиаст
Регистрация: 04.04.2007
Адрес: Джамайка
Сообщений: 3,381
Бабло: $447150
|
Математеки в зале есть ?
Необходимо перевести равномерное распределение в пуассоновское. Или оно не пуассоновское, я уже не помню, как оно должно называться.
Короче, есть равномерное распределение, которое мы получаем от php-функции rand(min, max). Все числа от min до max выпадают с одинаковой вероятностью. Мне же нужно, чтобы числа из начала ряда выпадали чаще, т.е. в ряду 1 ... 10 единица выпадала чаще всего, 2 - в n раз реже чем 1, 3 - в n раз реже чем 2 и т.п.
Мож кто-нить не совсем забыл чему нас учили в универах и институтах ?  Подскажите функцию.
|
|
|
07.11.2007, 19:06
|
#2
|
вьёб-мастер
Регистрация: 29.04.2007
Сообщений: 55
Бабло: $500
|
тебе надо получить ряд типа
10 9 9 8 8 8 8 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 - я заебусь этот ряд дальше писать =), как вариант нагенерить такой ряд =), а потом случайно выбирать из него значения =).
Тут вышка не надо, просто подумать какая последовательность должны быть конечной и что с ней делать потом.
__________________
Инвайты на KlikVip, GlavMed - учу учиться.
|
|
|
07.11.2007, 19:08
|
#3
|
Юниор
Регистрация: 31.07.2007
Сообщений: 26
Бабло: $920
|
Недавно вспоминал как это делается, написал функцию. На вход получает мат.ожидание $M на выходе случайное число распределенное по Пуасону с мат.ожиданием $M
PHP код:
//Для Закона пуасона мат.ожидание=дисперсии=$M
function PoissonRandomNumber($M)
{
$RandomNumber=rand(0,2147483647)/2147483647;
$Sum=0;
$Factorial=1;
for ($k=0;$k<1000;$k++)
{
if ($k>0)
{
$Factorial=$Factorial*$k;
}
$verk=(exp(-$M)*pow($M,$k))/$Factorial;
$Sum+=$verk;
if ($Sum>$RandomNumber)
{
return $k;
}
}
}
|
|
|
07.11.2007, 23:10
|
#4
|
ChefJavaProgrammierer
Регистрация: 05.04.2007
Сообщений: 1,165
Бабло: $15090
|
В общем случае:
Пусть нам надо получить случайную величину X с функцией распределения F.
Тогда
1. Существует F- на отрезке [0,1] такая ,что F-(F(x)) = x (обратная функция)
2. F-(Y) = X ,где Y случайная величина с равномерным распределением на отрезке [0,1], X случайная величина с функцией распределения F
|
|
|
07.11.2007, 23:35
|
#5
|
кодер-энтузиаст
Регистрация: 04.04.2007
Адрес: Джамайка
Сообщений: 3,381
Бабло: $447150
ТС -->
|
ТС
xoxlov, спасибо за код, примерно это и надо!
kapitoshka, очень элегантное решение, в принципе, одного его хватило бы 
zlaya ssuka, прочел три раза, ничего не понял  Видимо, это слишком общий случай 
|
|
|
08.11.2007, 00:08
|
#6
|
ChefJavaProgrammierer
Регистрация: 05.04.2007
Сообщений: 1,165
Бабло: $15090
|
Цитата:
Сообщение от medar
xoxlov, спасибо за код, примерно это и надо!
kapitoshka, очень элегантное решение, в принципе, одного его хватило бы 
zlaya ssuka, прочел три раза, ничего не понял  Видимо, это слишком общий случай 
|
для полковников.
есть у тебя X c функцией распределения F(х). например F(x) = arctg(x)/pi + 1/2
тогда берем y = rand(0, 1000000)/1000000
x = tg((y-1/2)*pi) <- обратная функция, F-
x - случайная величина с требуемым распределением F
если совсем плохо - функция распределения
|
|
|
08.11.2007, 00:54
|
#7
|
кодер-энтузиаст
Регистрация: 04.04.2007
Адрес: Джамайка
Сообщений: 3,381
Бабло: $447150
ТС -->
|
ТС
Так понятнее.
Но проблема уже решена.
|
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
|