|
|||
Скачать Реализация pазличных cлучайных величин на Паcкале
28.02.1995 Точный обратный метод Бокса-Маллера.При этом генерируется пара нормированных (мат.ожидание=0, ст.отклонение=1) нормальных чисел из двух стандартных случайных чисел. Procedure Normal (var Num1, Num2: Real); Const PI = 3.14159; Var R1, R2: Real; Begin R1 := Random; R2 := Random; Num1 := -2 * LN (R1) * COS (2 * PI * R2); Num2 := -2 * LN (R1) * SIN (2 * PI * R2); End; Метод Марсальи-Брея.Более быстрый за счет исключения вычислений синусов и косинусов. Procedure Normal (var Num1, Num2: Real); Var R1, R2: Real; S: Real; Begin Repeat R1 := 2 * Random - 1; R2 := 2 * Random - 1; S := SQR (R1) + SQR (R2); Until (S < 1); S := SQRT ((-2 * LN (S)) / S); Num1 := R1 * S; Num2 := R2 * S; End; Стандартный метод.Основан на центральной предельной теореме. Требует много времени на генерацию 12-ти случайных чисел. Hедостатком также является плохое соответствие теории за пределами мат.ож. = 2 * стд.откл. Procedure Normal (var Num: Real); Var S: Real; i: 1..12; Begin S := 0; For i := 1 To 12 Do S := S + Random; Num := S - 6; End; Метод Тичроу.По сути дела это просто модифицированный 3), однако точность метода повышается до мат.ож. = 3 * стд.откл. Procedure Normal (var Num: Real); Const C1 = 0.029899776; C2 = 0.008355968; C3 = 0.076542912; C4 = 0.252408784; C5 = 3.949846138; Var S: Real; i: 1..12; Begin S := 0; For i := 1 To 12 Do S := S + Random; S := SQR ((S - 6) / 4); Num := ((((C1 * S + C2) * S + C3) * S + C4) * S + C5) * S; End; P.S. В заключение хочу сказать, что если ты получил нормализованное нормальное
число, то получить нормальное число с заданными характеристиками не представляет
никакого труда: предположим, что M - требуемое мат. ожидание, STD - требуемое
стандартное отклонение, а NN - нормализованное нормальное число. Тогда требуемое
нормальное число N найдется по формуле: | |||
© 2009–2024 Russian Pascal Developer Network.
Техническая площадка: ISBIZ Хостинг |