Previous Page  16 / 25 Next Page
Information
Show Menu
Previous Page 16 / 25 Next Page
Page Background

Генератор равномерных случайных величин по технологии полного вихревого массива

ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. Приборостроение. 2017. № 2

101

груэнтный параметр

a

проходит все возможные значения в интервале

1,

3

N

c шагом

4.

±

В этом случае обращение к функции настройки выглядит как

SetA(0.0, 1.0)

.

Далее представлен программный код, позволяющий настраивать генератор

на различные значения

w

,

x0

,

a1b

,

a2e

. Конгруэнтный параметр

c

проходит все

нечетные значения из интервала

1,

1

N

, начиная с единицы и заканчивая

справа от

1.

N

Установка параметра

c

задается с помощью функции

SetC()

. Как

было показано, первое число можно задать непосредственно, а следующие чис-

ла — по константе

c

. Технология вихря на полных последовательностях все рав-

но обеспечит все неповторяющиеся числа в каждой новой последовательности.

Итак, для примера в следующей программе:

4,

w

=

2 16,

w

N

= =

1,

a1b

=

13.

a2e

=

С каждым значением

5,9,1,13

a

=

конгруэнтная константа

=

1,3,5,7,9,11,13,15.

c

Имена

P020403

и

cP020403

выбраны произвольно.

using nsDeonYuliTwist28DA; // класс вихревого генератора

namespace P020403

{ class P020403

{ static void Main(string[] args)

{ cDeonYuliTwist28DA CT = new cDeonYuliTwist28DA();

CT.SetW(4);

CT.SetA(0.0, 1.0); // полный диапазон для a

CT.SetC(0.0, 1.0); // полный диапазон для c

CT.Start();

Console.WriteLine("w = {0} N = {1}", CT.w, CT.N);

Console.WriteLine("a1b = {0} a1e = {1}",

CT.a1b, CT.a1e);

Console.WriteLine("a2b = {0} a2e = {1}",

CT.a2b, CT.a2e);

Console.WriteLine("cb = {0} ce = {1}",

CT.cb, CT.ce

);

int k = 0; // номер последовательности

int NN = 0; // количество случайных величин

for (int nw = 0; nw < CT.w; nw++)

for (int nt = 0; nt < CT.N; nt++)

for (int na = 1; na <= 4; na++)

for (int nc = 1; nc <= 8; nc++)

{ Console.Write("k={0,4} | ", ++k);

for (int i = 0; i < CT.N; i++)

{ Console.Write("{0,3}", CT.Next());

NN++;

}

Console.WriteLine(" a={0,2} c ={1,2}",

CT.a, CT.c);

if (k % 250 == 0) Console.ReadKey();

}

Console.WriteLine("Finish");

Console.WriteLine("NN = {0}", NN);

Console.ReadKey();

}

}

}