Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Исходники Форум Информер Страны мира
   Математика    >>    randmeth
   
 
 Реализация pазличных cлучайных величин на Паcкале   Тимур Казимиров 28.02.1995

Пять методов формирования случайных чисел с исходниками



1k 
 

Hello Dmitry! Wednesday February 22 1995 23:35, Yuri Lapkin wrote to Dmitry Bystrov: DB>> А не подcкажите как cделать генеpатоp cлучайных чиcел ноpмального DB>> pаcпpеделения. Пожалуйста: 1> Точный обратный метод Бокса-Маллера. При этом генерируется пара нормированных (мат.ожидание=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; 2> Метод Марсальи-Брея. Более быстрый за счет исключения вычислений синусов и косинусов. 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; 3> Стандартный метод. Основан на центральной предельной теореме. Требует много времени на генерацию 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; 4> Метод Тичроу. По сути дела это просто модифицированный 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 найдется по формуле: N := M + NN * STD. P.P.S. Если нужны генераторы других законов распределения, то пиши - найду. Удачи, Timur --- GoldED 2.50.A0204+