нормальный закон распределения
От: Me_ Россия  
Дата: 30.11.05 11:28
Оценка:
как сделать из равномерно распределенной последовательности случайных чисел нормально распределенную?

К примеру для показательного распределени: 1/L * ln(1/x), где — х — равномерно-рас. сл. величина, а L — интенсивность
Re: нормальный закон распределения
От: Sergey A. Sablin Россия http://www.elecard.com
Дата: 30.11.05 11:59
Оценка: 2 (1)
Здравствуйте, Me_, Вы писали:

Me_>как сделать из равномерно распределенной последовательности случайных чисел нормально распределенную?


Me_>К примеру для показательного распределени: 1/L * ln(1/x), где — х — равномерно-рас. сл. величина, а L — интенсивность


Стандартное нормальное распределение:

n = sqrt(-2.0 * log(x)) * cos(2.0 * PI * x), где x — равномерно распределен в [0,1].

для нормального со средним M и дисперсией D:

M + sqrt(D) * n
Сергей.
Re[2]: нормальный закон распределения
От: Me_ Россия  
Дата: 30.11.05 12:54
Оценка:
Здравствуйте, Sergey A. Sablin, Вы писали:

SAS>Стандартное нормальное распределение:


SAS>n = sqrt(-2.0 * log(x)) * cos(2.0 * PI * x), где x — равномерно распределен в [0,1].


SAS>для нормального со средним M и дисперсией D:


SAS>M + sqrt(D) * n



Корень из минус двух?
Re[3]: нормальный закон распределения
От: Дьяченко Александр Россия  
Дата: 30.11.05 12:58
Оценка: 1 (1)
Здравствуйте, Me_, Вы писали:

Me_>Здравствуйте, Sergey A. Sablin, Вы писали:


SAS>>Стандартное нормальное распределение:


SAS>>n = sqrt(-2.0 * log(x)) * cos(2.0 * PI * x), где x — равномерно распределен в [0,1].


SAS>>для нормального со средним M и дисперсией D:


SAS>>M + sqrt(D) * n



Me_>Корень из минус двух?


логорифм при x в интервале (0; 1) отрицательный.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Re: нормальный закон распределения
От: sch  
Дата: 30.11.05 13:28
Оценка: 2 (2) -1
Если бы я задался целью сделать самый настоящий генератор (псевдо) случайных чисел с нормальным распределением, то я бы взял десять разных генераторов случайных чисел и суммировал бы их вывод:

float get_normal_rand() {
return (get_rand_1() + get_rand_2() + ... + get_rand_n()) / n;
}

Re[2]: нормальный закон распределения
От: LelicDsp Россия  
Дата: 30.11.05 13:43
Оценка:
Здравствуйте, sch, Вы писали:


sch>Если бы я задался целью сделать самый настоящий генератор (псевдо) случайных чисел с нормальным распределением, то я бы взял десять разных генераторов случайных чисел и суммировал бы их вывод:


не знаю, за что человеку влепили минус, но это действительно на практике самый хороший алгоритм. Его прелесть в том, что даже если на входе не абсолютно равномерное распределение (например выход обычного сишного rand()), то на выходе все равно будет нормальное.

PS. Я предпочитаю брать 12 отсчетов
Re[2]: нормальный закон распределения
От: kfmn Россия  
Дата: 30.11.05 13:57
Оценка:
Здравствуйте, sch, Вы писали:


sch>Если бы я задался целью сделать самый настоящий генератор (псевдо) случайных чисел с нормальным распределением, то я бы взял десять разных генераторов случайных чисел и суммировал бы их вывод:


sch>float get_normal_rand() {

sch> return (get_rand_1() + get_rand_2() + ... + get_rand_n()) / n;
sch>}

sch>


Да, точно, это из центральной предельной теоремы следует.

Только если get_rand возвращает величину, равномерно распреденную от 0 до 1, то матожидание будет 1/2, а дисперсия 1/12/n, т.е. надо еще сдвинуть и отмасштабировать.

Именно поэтому LelicDsp пишет про 12 чисел:
(get_rand_1() + get_rand_2() + ... + get_rand_12())-6
вот это будет то, что нужно.

Или, если 12 кому-то мало, то
(get_rand_1() + get_rand_2() + ... + get_rand_48())/2-12
Re[2]: нормальный закон распределения
От: kfmn Россия  
Дата: 30.11.05 14:04
Оценка:
Здравствуйте, Sergey A. Sablin, Вы писали:

SAS>Стандартное нормальное распределение:


SAS>n = sqrt(-2.0 * log(x)) * cos(2.0 * PI * x), где x — равномерно распределен в [0,1].


Это неправда!!!!

Из двух случайных величин x и y, независимых и равномерно распределенных в [0,1] получаются 2 независимые величины со стандартным нормальным распределением:

n1 = sqrt(-2.0 * log(x)) * sin(2.0 * PI * y)
n2 = sqrt(-2.0 * log(x)) * cos(2.0 * PI * y)

А из одной случайной величины — не получится, разве что уравнение с erf решать...
Re[3]: нормальный закон распределения
От: Me_ Россия  
Дата: 30.11.05 14:27
Оценка:
Здравствуйте, kfmn, Вы писали:

K>Только если get_rand возвращает величину, равномерно распреденную от 0 до 1, то матожидание будет 1/2, а дисперсия 1/12/n, т.е. надо еще сдвинуть и отмасштабировать.


K>Именно поэтому LelicDsp пишет про 12 чисел:

K>(get_rand_1() + get_rand_2() + ... + get_rand_12())-6
K>вот это будет то, что нужно.

K>Или, если 12 кому-то мало, то

K>(get_rand_1() + get_rand_2() + ... + get_rand_48())/2-12


что-то она слишком нормальная получается в этом случае, можно как-нибудь увеличить дисперсию до единицы?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.