- •Отчет по лабороторной работе
- •2. Задание
- •3. Метод монте-карло
- •4. Обзор эмпирических тестов генераторов ррсч
- •1)Abcde; 2)aabcd; 3)aabbcd; 4)aaabc; 5)aaabb;6)aaaab;7)aaaaa.
- •5. Моделирование движения иглы туннельного микроскопа
- •6. Заключение
- •1. Введение………………………………………………………………………………………………………………………………………………
1)Abcde; 2)aabcd; 3)aabbcd; 4)aaabc; 5)aaabb;6)aaaab;7)aaaaa.
Затем применяют критерий хи-квадарат.
ТЕСТ ПРОВЕРКА ПЕРЕСТАНОВОК
Разделим исходную последовательность случайных чисел на n групп по t элементам в каждой: (Ujt, Ujt+1, … , Ujt+t-1), 0=j<n.
В каждой группе возможно всего t! вариантов относительного расположения чисел. Далее подсчитывается сколько раз встречается каждое конкретное относительное расположение. После этого применяется критерий хи-квадрат с числом степеней свободы v=t! и p=1/t!.
ТЕСТ "КОЛЛЕКЦИОНЕРА" ИЛИ "СОБИРАТЕЛЯ КУПОНОВ"
Пусть нам дана последовательность целых случайных чисел: Y0,Y1,…Yj, где 0=Yj<d.
Далее определяются длины сегментов Yj+1,Yj+2,…,Yj+r, необходимых для того, чтобы собрать "полный набор" целых чисел от 0 до d-1.
Пусть нам дана последовательность целых РРСЧ Y0,Y1,… , где 0=Yj<d. Этот алгоритм определяет длины последовательных сегментов по только что сформулированному правилу. По окончанию работы алгоритма в count[r] при 0=r<t находится число сегментов длины r, а в count[t] число сегментов длины =t.
Содержимое счетчиков count[d],count[d+1],…,count[t] обрабатывается с помощью критерия хи-квадрат с v=t-d+1 степенями свободы после того, как алгоритм C завершил свою работу. Соответствующие вероятности равны:
; , где dr<t.
В фигурных скобках указаны числа Стирлинга II-го рода. Их можно вычислить по формуле:
Тест "Покер-тест" в виде программы на Паскале.
(**************************************************************************)
(* "Покер-тест" или "Проверка комбинаций" *)
(* тестирует встроенный генератор РРСЧ *)
(**************************************************************************)
Program Check;
uses crt;
type Pmas=array [1..7] of integer;
const N=32000; {длина выборки}
NN=10000;
Pet:Pmas=(3024,5040,1080,0720,0090,0045,0001);{эталонная вероятность для d=10}
var i,f,MN:integer;
V,V_old,p_et:real;
Y: array [1..N] of integer; {хранит СЧ}
P: Pmas; {хранит экспериментальные частоты}
(* ф-ция определения класса-категории для каждой последовательности из 5 *)
(* чисел, где каждой категории соответствует код: *)
(* abcde все разные 1 *)
(* aabcd одна пара 2 *)
(* aabbc две пары 3 *)
(* aaabc три одного вида 4 *)
(* aaabb полный набор 5 *)
(* aaaab четыре одного вида 6 *)
(* aaaaa пять одного вида 7 *)
Function kat(j:integer):integer;
var k,l,m,n,temp:integer;
t,c:array [1..5] of integer;
begin
for k:=1 to 5 do {запомним 5 чисел в массиве т}
begin
t[k]:=y[j+k-1];
c[k]:=0;
end;
m:=1;
for k:=1 to 5 do {определим, сколько раз в массиве т}
begin {встречается то или иное число }
for l:=1 to 5 do {результат хранится в массиве с }
if t[k]=t[l] then inc(c[m]);
inc(m);
end;
{sorting C}
for k:=1 to 4 do {отсортируем массив С }
for l:=k+1 to 5 do {после чего по 5-му элементу}
if c[l]<c[k] then {можно судить о номере кате-}
begin {гории }
temp:=c[k];
c[k]:=c[l];
c[l]:=temp;
end;
{определение кода категории}
if c[5]=1 then n:=1;
if c[5]=2 then if c[3]=1 then n:=2 else n:=3;
if c[5]=3 then if c[2]=1 then n:=4 else n:=5;
if c[5]=4 then n:=6;
if c[5]=5 then n:=7;
kat:=n
end;
Begin
clrscr;
Write('Введите число экспериментов ');
Readln(MN);
While MN>0 do
begin
Writeln;
Writeln('Эксперимент №',MN);
Randomize; {заполнение массива У СЧ, }
For i:=1 to N do Y[i]:=random(10); {генерируемыми встроенным }
For i:=1 to N-4 do {исследование всех возможных}
begin
{пятерок подряд идущих чисел}
f:=kat(i);
if f=1 then inc(p[1]);
if f=2 then inc(p[2]);
if f=3 then inc(p[3]);
if f=4 then inc(p[4]);
if f=5 then inc(p[5]);
if f=6 then inc(p[6]);
if f=7 then inc(p[7]);
end;
writeln('категория число частота эталон');
writeln('все разные ',p[1]:5,' ',(p[1]/N):4:4,' ',(pet[1]/NN):4:4);
writeln('одна пара ',p[2]:5,' ',(p[2]/N):4:4,' ',(pet[2]/NN):4:4);
writeln('две пары ',p[3]:5,' ',(p[3]/N):4:4,' ',(pet[3]/NN):4:4);
writeln('три одного вида ',p[4]:5,' ',(p[4]/N):4:4,' ',(pet[4]/NN):4:4);
writeln('полный набор ',p[5]:5,' ',(p[5]/N):4:4,' ',(pet[5]/NN):4:4);
writeln('четыре одного вида ',p[6]:5,' ',(p[6]/N):4:4,' ',(pet[6]/NN):4:4);
writeln('пять одного вида ',p[7]:5,' ',(p[7]/N):4:4,' ',(pet[7]/NN):4:4);
V:=0;
for i:=1 to 7 do {считаем меру различия реального }
begin {распределения чисел в выхода }
p_et:=pet[i]/NN; {генератора и эталонного распред.}
V_old:=((p[i]-(p_et*N))*(p[i]-(p_et*N)))/(p_et*N);
p[i]:=0;
V:=V+V_old;
end;
writeln('X^2=',V:7:7);
V_old:=0;
Dec(MN);
if (MN mod 2)=0 then
begin
readkey;
clrscr;
end;
end;
end.
РЕЗУЛЬТАТ ДЛЯ ОДНОГО ИЗМЕРЕНИЯ
Введиите число экспериментов 1
Эксперимент №1
категория число частота эталон
все разные 9512 0.2973 0.3024
одна пара 16221 0.5069 0.5040
две пары 3476 0.1086 0.1080
три одного вида 2338 0.0731 0.0720
полный набор 308 0.0096 0.0090
четыре одного вида 136 0.0043 0.0045
пять одного вида 5 0.0002 0.0001
X^2=6.8061963