pавномеpное и ноpмальное pаспpеделение
- From
- Evgenij Masherov (2:5020/175.2)
- To
- Dmitriy Kozlov
- Date
- 2002-10-24T21:33:10Z
- Area
- RU.ALGORITHMS
From: "Evgenij Masherov" <EMasherow@nsi.ru>
Thu Oct 17 2002 22:36, Dmitriy Kozlov wrote to All:
DK> интеpесyют алгоpитмы полyчения сабжа.
Равномерное распределение продуцируется любым стандартным генератором
случайных чисел. Его нужно только привести к желаемому интервалу.
Общий подход к получению любого желаемого распределения состоит во взятии от
равномерно (0;1) распределенного числа обратной функции распределения. К
сожалению, для нормального обратная функция не выражается аналитически и
сложно вычисляется. Поэтому применяются специальные методы.
1. Центральная предельная теорема. Согласно ней сумма достаточно большого
числа случайных чисел будет приближаться к нормальному распределению (точная
формулировка требует введения понятия семиинварианты и пр. и есть во всех
курсах теорвера). Часто берут 12 равномерных на (0;1) случайных чисел. Вычитая
из их суммы 6, получим число с распределением, близким к нормальному с нулевым
средним и единичной дисперсией (волшебное 12 появилось потому, что при менее
10 от нормального далеко, более 20 существенного улучшения не дает, а выбор
именно 12 позволяет обойтись без поправочных коэффициентов). При необходимости
улучшить качество приближения к нормальному - можно использовать поправочный
полином Тичроу (Тейчроева), приведенный у Кнута.
A1 = 3.949846138;
A3 = 0.252408784;
A5 = 0.076542912;
A7 = 0.008355968;
A9 = 0.029899776;
SUM=0.0
do I=1, 12
call RANDOM_NUMBER(RAND)
SUM=SUM+RAND
enddo
R=(SUM-6.0)/4.0;
R2=R*R
Gauss=((((A9*R2+A7)*R2+A5)*R2+A3)*R2+A1)*R
2. Полярный метод.
Генерируется два числа Х1 и Х2, также равномерные на (0;1). Если сумма их
квадратов S=X1^2+X2^2 больше единицы - берутся два новых, иначе вычисляется
Q=sqrt(-2*ln(S)/S)
Y1=X1*Q
Y2=X2*Q
При этом получаются два (независимых!) нормально (0;1) распределенных числа
3. Метод, приводимый во втором томе Кнута. Сам я не реализовывал.
Евгений Машеров АКА СанитарЖеня
--- ifmail v.2.15dev5
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)