1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

Нужна помощь

Тема в разделе "Свободное общение", создана пользователем Duplus, 8 дек 2007.

Статус темы:
Закрыта.
  1. Duplus

    Duplus Гость

    Подскажите, очень нужно.
    У меня есть генератор случайных чисел, который выдает числа в интервале [0 1] с равномерным распределением. Точнее, у меня есть не сам генератор, а набор чисел, которые он выдает.
    А мне нужен набор чисел, который подчиняется некоторому неравномерному распределению f(x). Как мне получить из набора равномерно распределенных чисел, другой набор с распределением f(x)?
    Вроде бы должно быть не сложно, просто меня заклинило)))
    Заранее спасибо)
     
  2. Azrael

    Azrael Гость

    Для: Duplus
    Конкретнее, пожалуйста, скажите хотябы вид функции. для нормального распределения f(x) ~ N(мат.ожидание, среднеквадратическое отклонение) можно сделать так: задать x=0, к нему раз 12 прибавить случайное число из диапазона [0, 1], отнять 6.
    после этого к мат.ожиданию прибавляешь x*среднеквадратическое отклонение и получаешь случайную величину с нормальным распределением.
     
  3. Duplus

    Duplus Гость

    проблема в том, что надо это делать для любой функции f(x), какая только придет в голову. На другом форуме мне ответили вот так:

    "все это хорошо, когда можно просто вычислить обратную от функции распределения
    если ее вычислить сложно, то можно сделать по-другому: кидать точку x в [a,b] , где нужны события, и принимать ее, только если другое (следующее) случайное число меньше f(x) (в предположении, что max f(x) = 1, иначе ее надо нормировать). эффективность может оказаться невелика, особенно, если есть пик, зато это просто сделать для любой f(x) (если, конечно, вы знаете, где она достигает максимального значения"

    осталось только разобраться))
    большое спасибо!
     
  4. Azrael

    Azrael Гость

    Для: Duplus

    Сначала определитесь, дана ли Вам функция распределения случайной величины (как правило
    обозначается F(x)) или плотности распределения f(x).

    Сделайте проще: возьмите некоторый отрезок a <= x <= b. Разбейте его на несколько частей (чем больше - тем точнее будет соответствие полученного распределения заданному.
    Если Вам задана функция плотности распределения f(x) - рассчитайте вероятности p1, p2, ..., pn по центрам отрезков, нормируйте, чтобы в сумме p1+p2+...+pn = 1, расположите эти вероятности на отрезке [0,1], возьмите случайную величину, распределенную равномерно, определите, к какому отрезку относится (границы [ax, bx)) и возьмите опять же случайную величину, распределенную равномерно из этого отрезка (преобразуйте из случ. величины в отрезке [0,1])

    Если же задана начальная F(x), то получить f(x) далеко не всегда возможно (нужно дифференцировать F(x))
    Про пики функции F(x) Вас похоже обманули, т.к. F(x) - неубывающая ;)
    Нормирование функции... одно из свойств F(x): существует предел (x -> минус бесконечность) = 0 и существует предел (x -> плюс бесконечность) = 1.
    Опять же, разбейте отрезок на несколько интервалов, чем больше интервалов, тем ближе будет к заданному распределению и рассчитать вероятность попадания в интервал P(a <= x <= B ) = F(B ) - F(a).
    А дальше действуйте так же как и в первом случае.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей