Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Model_1 / Otchet.DOC
Скачиваний:
53
Добавлен:
27.05.2013
Размер:
111.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

Соседние файлы в папке Model_1