Файл: Общие методы моделирования равномерно распределенных случайных чисел.docx
Добавлен: 17.10.2024
Просмотров: 17
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Блок схема алгоритма
Реализация на С++
floatuniformity()// тестравнораспределенность
{
_int64 frequency[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
float v = 0;
for (int i = 0; i < n; i++)
frequency[number[i]]++;
for (int i = 0; i < 10; i++)
{
v = v + ((frequency[i] - n * 0.1)*(frequency[i] - n * 0.1)) / (n * 0.1);
}
cout << v << endl;
return v;
}
Вывод
Была написана функция на языке С++, при помощи которой были протестированы генераторы равномерно распределенных случайных чисел методом «Проверка частот».В результате тестирования генераторов, было обнаружено, что все генераторы успешно справились с задачей.
Проверка генератора равномерно распределенных случайных чисел «Тестом серий»
Цель работы
Целью работы является тестирование генератора равномерно распределенных случайных чисел «Тестом серий».
Ход работы
В тесте серий проверяется равномерность и независимость пар, следующих друг за другом случайных чисел. Для этого подсчитывается, сколько раз встретилась, каждая пара при . Величины и могут принимать любые значения от 0 до . Затем применяется критерий с числом степеней свободы , и с вероятностью
№ теста | Смешанный конгруэнтный | Квадратныйконгруэнтный | С++ | Pascal |
1 | 4.528(сл. подоз.) | 1,456(неудовл.) | 6,32(удовл.) | 0,528(неудовл.) |
2 | 2.896(подозрит.) | 3,6(сл. подоз.) | 5,008(сл. подоз.) | 0,368(неудвол.) |
3 | 4.4(сл. подоз.) | 4,848(сл. подоз.) | 2,816(подозрит.) | 2,448(подозрит.) |
4 | 3.44(сл. подоз.) | 2,32(подозрит.) | 1,936(неудовл.) | 0,496(неудовл.) |
5 | 1.232(неудовл.) | 1,36(неудовл.) | 1,488(неудовл.) | 2,512(подозрит.) |
6 | 6.432(удовл.) | 4(сл. подоз.) | 2,512(подозрит.) | 3,568(сл. подоз.) |
7 | 2,32(подозрит.) | 1,792(неудовл.) | 0,592(неудовл.) | 1,712(неудовл.) |
8 | 5,04(сл.подоз.) | 2,128(подозрит.) | 0,240(неудовл.) | 1,088(неудовл.) |
9 | 2,832(подозрит.) | 2,32(подозрит.) | 0,752(неудовл.) | 2,88(подозрит.) |
10 | 1,328(неудовл.) | 1,984(неудовл.) | 0,656(удовл.) | 0,944(неудовл.) |
11 | 2,224(подозрит.) | 8,368(удовл.) | 1,36(неудовл.) | 2,08(подозрит.) |
12 | 4,816(сл. подоз.) | 2,736(подозрит.) | 4,672(сл. подоз.) | 0,672(неудовл.) |
13 | 2,704(подозрит.) | 2,304(подозрит.) | 1,648(неудовл.) | 1,648(неудовл.) |
14 | 1,872(неудовл.) | 5,92(удовл.) | 6,096(удовл.) | 0,944(неудовл.) |
15 | 7,328(удовл.) | 4,656(сл. подоз.) | 0,56(неудовл.) | 5,824(удовл.) |
16 | 5,712(сл. подоз.) | 0,544(неудовл.) | 3,504(сл. подоз.) | 1,168(неудовл.) |
17 | 4,192(сл. подоз.) | 1,472(неудовл.) | 3,056(подозрит.) | 2,768(подозрит.) |
18 | 3,392(сл. подоз.) | 2,704(подозрит.) | 2,544(подозрит.) | 4,496(сл. подоз.) |
19 | 1,552(неудовл.) | 1,744(неудовл.) | 1,712(неудовл.) | 1,104(неудовл.) |
20 | 2(неудовл.) | 1,776(неудовл.) | 0,72(неудовл.) | 3,232(сл. подоз.) |
21 | 4,08(сл. подоз.) | 0,912(неудовл.) | 3,568(сл. подоз.) | 1,008(неудовл.) |
22 | 2,288(подозрит.) | 5,776(сл. подоз.) | 3,312(подозрит.) | 3,088(подозрит.) |
23 | 1,488(неудовл.) | 1,456(неудовл.) | 3,28(подозрит.) | 3,136(подозрит.) |
24 | 1,84(неудовл.) | 5,488(сл. подоз.) | 0,912(неудовл.) | 3,408(сл. подоз.) |
25 | 4,56(сл. подоз.) | 5,008(сл. подоз.) | 0,32(неудовл.) | 0,832(неудовл.) |
26 | 3,68(сл. подоз.) | 3,056(подозрит.) | 9,52(удовл.) | 3,776(сл. подоз.) |
27 | 0,848(неудовл.) | 4,944(сл. подоз.) | 2,992(подозрит.) | 1,84(неудовл.) |
28 | 2,512(подозрит.) | 2,688(подозрит.) | 6,576(удовл.) | 6,192(удовл.) |
29 | 4,464(сл. подоз.) | 6,192(удовл.) | 2,752(подозрит.) | 4,64(сл. подоз.) |
30 | 9,968(удовл.) | 3,568(сл. подоз.) | 3,872(сл. подоз.) | 1,68(неудовл.) |
Блок схема алгоритма
Реализация на С++
float series() // тест серий
{
_int64 frequency2[10][10] = {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } };
float v = 0;
for (int i = 0; i < n-1; i++)
frequency2[number[i]][number[i+1]]++;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
v = v + ((frequency2[i][j] - n * 0.01)*(frequency2[i][j] - n * 0.01)) / (n * 0.01);
}
}
cout << v << endl;
return v;
}
Вывод
Быланаписана функция на языке С++, при помощи которой были протестированы генераторы равномерно распределенных случайных чисел методом «Серий».В результате тестирования генераторов, было обнаружено, что наиболее «чисто» тест серий проходит генератор,построенный на Смешанном конгруэнтном методе.
Сравнительный анализ результатов тестирования генераторов равномерно распределенных случайных чисел различными тестами
Смешанный конгруэнтный.
№ | Тест на равномерность (частотный тест) | Тест серий |
1 | 4.94 (сл. подоз.) | 4.528(сл. подоз.) |
2 | 5.44(сл. подоз.) | 2.896(подозрит.) |
3 | 7.36(удовл.) | 4.4(сл. подоз.) |
4 | 17.04 (сл. подоз.) | 3.44(сл. подоз.) |
5 | 3.82(сл. подоз. | 1.232(неудовл.) |
6 | 9.96(удовл.) | 6.432(удовл.) |
7 | 5.18(сл. подоз.) | 2,32(подозрит.) |
8 | 7.70(удовл.) | 5,04(сл.подоз.) |
9 | 8.20(удовл.) | 2,832(подозрит.) |
10 | 11.79(сл. подоз.) | 1,328(неудовл.) |
11 | 4.26(сл. подоз.) | 2,224(подозрит.) |
12 | 9.40(удовл.) | 4,816(сл. подоз.) |
13 | 4.80(сл. подоз.) | 2,704(подозрит.) |
14 | 8.40(удовл.) | 1,872(неудовл.) |
15 | 13.88(сл. подоз.) | 7,328(удовл.) |
16 | 11.07(удовл.) | 5,712(сл. подоз.) |
17 | 11.72(сл. подоз.) | 4,192(сл. подоз.) |
18 | 14.88(сл. подоз.) | 3,392(сл. подоз.) |
19 | 5.00(сл. подоз.) | 1,552(неудовл.) |
20 | 5.78(сл. подоз.) | 2(неудовл.) |
21 | 5.72(сл. подоз.) | 4,08(сл. подоз.) |
22 | 8.37(удовл.) | 2,288(подозрит.) |
23 | 13.66(сл. подоз.) | 1,488(неудовл.) |
24 | 5.58(сл. подоз.) | 1,84(неудовл.) |
25 | 12.17(сл. подоз.) | 4,56(сл. подоз.) |
26 | 15.04(сл. подоз.) | 3,68(сл. подоз.) |
27 | 6.26(удовл.) | 0,848(неудовл.) |
28 | 9.36(удовл.) | 2,512(подозрит.) |
29 | 3.96(сл. подоз.) | 4,464(сл. подоз.) |
30 | 16.68(сл. подоз.) | 9,968(удовл.) |
Квадратный конгруэнтный
№ | Тест на равномерность (частотный тест) | Тест серий | Покер-тест | Тест Коллекционера |
1 | 9.36(удовл.) | 1,456(неудовл.) | 52,943(неудовл.) | 0,906(неудовл.) |
2 | 5.22(сл. подоз.) | 3,6(сл. подоз.) | 7,262(удовл.) | 5,69(сл. подоз.) |
3 | 9.84(удовл.) | 4,848(сл. подоз.) | 4,084(сл. подоз.) | 0,668(неудовл.) |
4 | 2.58(подозрит.) | 2,32(подозрит.) | 4,435(сл. подоз.) | 2,781(подозрит.) |
5 | 22.02(неудовл.) | 1,36(неудовл.) | 3,271(подозрит.) | 3,071(подозрит.) |
6 | 4.16(сл. подоз.) | 4(сл. подоз.) | 1,703(неудовл.) | 2,506(подозрит.) |
7 | 8.7(удовл.) | 1,792(неудовл.) | 8,925(удовл.) | 0,522(неудовл.) |
8 | 1.84(неудовл.) | 2,128(подозрит.) | 3,942(сл. подоз.) | 4,489(сл. подоз.) |
9 | 14.56(сл. подоз.) | 2,32(подозрит.) | 6,554(удовл.) | 0,601(неудовл.) |
10 | 4.64(сл. подоз.) | 1,984(неудовл.) | 1,888(неудовл.) | 1,356(неудовл.) |
11 | 7.08(удовл.) | 8,368(удовл.) | 4,646(сл. подоз.) | 0,592(неудовл.) |
12 | 8.42(удовл.) | 2,736(подозрит.) | 13,079(сл. подоз.) | 1,379(неудовл.) |
13 | 11.46(сл. подоз.) | 2,304(подозрит.) | 0,906(неудовл.) | 48,576(неудовл.) |
14 | 6.12(удовл.) | 5,92(удовл.) | 1,633(неудовл.) | 49,269(неудовл.) |
15 | 5.08(сл. подоз.) | 4,656(сл. подоз.) | 5,198(сл. подоз.) | 0,592(неудовл.) |
16 | 15.82(сл. подоз.) | 0,544(неудовл.) | 3,307(подозрит.) | 1,389(неудовл.) |
17 | 5.5(сл. подоз.) | 1,472(неудовл.) | 3,538(сл. подоз.) | 10,323(удовл.) |
18 | 6.68(удовл.) | 2,704(подозрит.) | 5,837(сл. подоз.) | 0,824(неудовл.) |
19 | 7.14(удовл.) | 1,744(неудовл.) | 5,867(сл. подоз.) | 7,506(удовл.) |
20 | 5(сл. подоз.) | 1,776(неудовл.) | 3,161(подозрит.) | 3,871(сл. подоз.) |
21 | 12.78(сл. подоз.) | 0,912(неудовл.) | 7,873(удовл.) | 21,187(подозрит.) |
22 | 11.76(сл. подоз.) | 5,776(сл. подоз.) | 4,087(сл. подоз.) | 3,724(сл. подоз.) |
23 | 3.32(подозрит.) | 1,456(неудовл.) | 2,903(подозрит.) | 0,705(неудовл.) |
24 | 9.12(удовл.) | 5,488(сл. подоз.) | 2,602(подозрит.) | 6,132(удовл.) |
25 | 2.5(подозрит.) | 5,008(сл. подоз.) | 4,646(сл. подоз.) | 4,361(сл. подоз.) |
26 | 9.92(удовл.) | 3,056(подозрит.) | 2,979(подозрит.) | 7,641(удовл.) |
27 | 7.44(удовл.) | 4,944(сл. подоз.) | 9,417(удовл.) | 15,852(сл. подоз.) |
28 | 11.28(удовл.) | 2,688(подозрит.) | 2,139(подозрит.) | 0,290(неудовл.) |
29 | 8.92(удовл.) | 6,192(удовл.) | 55,800(неудовл.) | 3,151(подозрит.) |
30 | 2.84(подозрит.) | 3,568(сл. подоз.) | 1,650(неудовл.) | 10,669(удовл.) |