Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka. Metody Komputerowe w Technice



Podobne dokumenty
Zaawansowane algorytmy i struktury danych

Algorytmy i struktury danych. Wykład 4

Przykładowe zadania z teorii liczb

Spacery losowe generowanie realizacji procesu losowego

Dr inż. Robert Wójcik, p. 313, C-3, tel Katedra Informatyki Technicznej (K-9) Wydział Elektroniki (W-4) Politechnika Wrocławska

0 --> 5, 1 --> 7, 2 --> 9, 3 -->1, 4 --> 3, 5 --> 5, 6 --> 7, 7 --> 9, 8 --> 1, 9 --> 3.

Sieci Mobilne i Bezprzewodowe laboratorium 2 Modelowanie zdarzeń dyskretnych

Technologie Informacyjne

Wybrane zagadnienia teorii liczb

Algorytm Euklidesa. Największy wspólny dzielnik dla danych dwóch liczb całkowitych to największa liczba naturalna dzieląca każdą z nich bez reszty.

Estymacja parametrów w modelu normalnym

Kongruencje twierdzenie Wilsona

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

7. Estymacja parametrów w modelu normalnym( ) Pojęcie losowej próby prostej

Algorytm. a programowanie -

WYMAGANIE EDUKACYJNE Z MATEMATYKI W KLASIE II GIMNAZJUM. dopuszczającą dostateczną dobrą bardzo dobrą celującą

2.8. Algorytmy, schematy, programy

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

Wykład 4. Określimy teraz pewną ważną klasę pierścieni.

Wymagania edukacyjne z matematyki klasa II technikum

Kształcenie w zakresie podstawowym. Klasa 2

Próbny egzamin maturalny z matematyki Poziom rozszerzony

Zadania do samodzielnego rozwiązania

Twierdzenie Eulera. Kongruencje wykład 6. Twierdzenie Eulera

METODY ROZWIĄZYWANIA RÓWNAŃ NIELINIOWYCH

Algorytm. Krótka historia algorytmów

Liczby pseudolosowe. #include <stdio.h> #include <stdlib.h> int main() { printf("%d\n", RAND_MAX); return 0; }

Metody numeryczne Wykład 4

Następnie przypominamy (dla części studentów wprowadzamy) podstawowe pojęcia opisujące funkcje na poziomie rysunków i objaśnień.

Modelowanie komputerowe

do instrukcja while (wyrażenie);

1 Podstawy c++ w pigułce.

Luty 2001 Algorytmy (7) 2000/2001

Wstęp do teorii niepewności pomiaru. Danuta J. Michczyńska Adam Michczyński

Technologie informacyjne - wykład 12 -

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

HISTOGRAM. Dr Adam Michczyński - METODY ANALIZY DANYCH POMIAROWYCH Liczba pomiarów - n. Liczba pomiarów - n k 0.5 N = N =

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Podstawy systemów kryptograficznych z kluczem jawnym RSA

WYMAGANIA EDUKACYJNE Z MATEMATYKI W KLASIE II W PUBLICZNYM GIMNAZJUM NR 2 W ZESPOLE SZKÓŁ W RUDKACH

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

PRZYKŁADY ZADAŃ MATURALNYCH Z MATEMATYKI NA POSZCZEGÓLNE STANDARDY DLA WYBRANYCH TREŚCI PROGRAMOWYCH Z POZIOMU PODSTAWOWEGO I ROZSZERZONEGO

Lekcja 3: Pierwsze kroki z Pythonem. Pętle

Wprowadzenie do analizy korelacji i regresji

Zajęcia nr. 3 notatki

( ) Arkusz I Zadanie 1. Wartość bezwzględna Rozwiąż równanie. Naszkicujmy wykresy funkcji f ( x) = x + 3 oraz g ( x) 2x

Funkcje wymierne. Jerzy Rutkowski. Działania dodawania i mnożenia funkcji wymiernych określa się wzorami: g h + k l g h k.

Znaleźć wzór ogólny i zbadać istnienie granicy ciągu określonego rekurencyjnie:

CZEŚĆ PIERWSZA. Wymagania na poszczególne oceny,,matematyka wokół nas Klasa III I. POTĘGI

Generowanie ciągów pseudolosowych o zadanych rozkładach przykładowy raport

Język ludzki kod maszynowy

Kodowanie i kompresja Streszczenie Studia Licencjackie Wykład 15, Kryptografia: algorytmy asymetryczne (RSA)

Osiągnięcia ponadprzedmiotowe

6. Liczby wymierne i niewymierne. Niewymierność pierwiastków i logarytmów (c.d.).

Cw.12 JAVAScript w dokumentach HTML

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Rozdział 1 PROGRAMOWANIE LINIOWE

PRZEDMIOTOWY SYSTEM OCENIANIA PROSTO DO MATURY KLASA 1 ZAKRES PODSTAWOWY

EGZAMIN MATURALNY W ROKU SZKOLNYM 2014/2015

Wykład z Technologii Informacyjnych. Piotr Mika

KURS MATURA ROZSZERZONA część 1

0 + 0 = 0, = 1, = 1, = 0.

WYMAGANIA Z MATEMATYKI NA POSZCZEGÓLNE OCENY KLASYFIKACYJNE DLA UCZNIÓW KLAS TRZECICH. Sposoby sprawdzania wiedzy i umiejętności uczniów

WYMAGANIA EDUKACYJNE Z MATEMATYKI DLA KLASY III

ROZKŁAD MATERIAŁU DLA KLASY I LICEUM I TECHNIKUM (ZAKRES PODSTAWOWY I ROZSZERZONY) A WYMAGANIA PODSTAWY PROGRAMOWEJ

Rozkład materiału a wymagania podstawy programowej dla I klasy czteroletniego liceum i pięcioletniego technikum. Zakres rozszerzony

Aproksymacja funkcji a regresja symboliczna

3.Funkcje elementarne - przypomnienie

Uwaga. 1. Jeśli uczeń poda tylko rozwiązania ogólne, to otrzymuje 4 punkty.

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Materiał ćwiczeniowy z matematyki Poziom podstawowy Styczeń Klucz odpowiedzi do zadań zamkniętych oraz schemat oceniania

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

WYMAGANIA EDUKACYJNE Z MATEMATYKI DLA KLASY 7SP. V. Obliczenia procentowe. Uczeń: 1) przedstawia część wielkości jako procent tej wielkości;

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

Osiągnięcia ponadprzedmiotowe

PLAN WYNIKOWY PROSTO DO MATURY KLASA 1 ZAKRES PODSTAWOWY

1. Liczby wymierne. x dla x 0 (wartością bezwzględną liczby nieujemnej jest ta sama liczba)

1 Wprowadzenie do algorytmiki

Ataki na RSA. Andrzej Chmielowiec. Centrum Modelowania Matematycznego Sigma. Ataki na RSA p. 1

WHILE (wyrażenie) instrukcja;

W rachunku prawdopodobieństwa wyróżniamy dwie zasadnicze grupy rozkładów zmiennych losowych:

Maria Romanowska UDOWODNIJ, ŻE... PRZYKŁADOWE ZADANIA MATURALNE Z MATEMATYKI

MATEMATYKA Z PLUSEM DLA KLASY VII W KONTEKŚCIE WYMAGAŃ PODSTAWY PROGRAMOWEJ. programowej dla klas IV-VI. programowej dla klas IV-VI.

Przykładowe rozwiązania

1. Znajdowanie miejsca zerowego funkcji metodą bisekcji.

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

1 Macierz odwrotna metoda operacji elementarnych

Wykład 1. Na początku zajmować się będziemy zbiorem liczb całkowitych

EGZAMIN MATURALNY 2011 INFORMATYKA

Instytut Fizyki Politechniki Łódzkiej Laboratorium Metod Analizy Danych Doświadczalnych Ćwiczenie 3 Generator liczb losowych o rozkładzie Rayleigha.

Przedmiotowy system oceniania wraz z określeniem wymagań edukacyjnych klasa druga zakres rozszerzony

w analizie wyników badań eksperymentalnych, w problemach modelowania zjawisk fizycznych, w analizie obserwacji statystycznych.

PLAN WYNIKOWY DLA KLASY DRUGIEJ POZIOM PODSTAWOWY I ROZSZERZONY. I. Proste na płaszczyźnie (15 godz.)

Algorytmy i złożoności Wykład 5. Haszowanie (hashowanie, mieszanie)

1. Liczby naturalne, podzielność, silnie, reszty z dzielenia

5. Rozwiązywanie układów równań liniowych

Instytut Politechniczny Państwowa Wyższa Szkoła Zawodowa. Diagnostyka i niezawodność robotów

lekcja 8a Gry komputerowe MasterMind

Propozycje rozwiązań zadań otwartych z próbnej matury rozszerzonej przygotowanej przez OPERON.

Transkrypt:

Opole, dn. 17 grudnia 2006 Politechnika Opolska Wydział Elektrotechniki, Automatyki i Informatyki Kierunek: Informatyka Metody Komputerowe w Technice Temat: Generatory liczb losowych algorytmy z wykorzystaniem S-funkcji w programie MATLAB Autor: Dawid Najgiebauer Informatyka w elektroenergetyce, rok 2006/07, sem. VII, (Śr. g. 12.50) Prowadzący: dr inż. R. Stanisławski Ocena:... Uwagi:... O P O L E 2 0 0 6

Spisy 2 1. Spisy 1.1. Spis treści 1. Spisy... 2 1.1. Spis treści... 2 1.2. Spis tabel... 2 1.3. Spis równań... 3 1.4. Spis rysunków... 3 1.5. Spis zawartości załączonej płyty CD... 4 2. Opis tematu... 5 2.1. Założenia... 5 2.2. Znaczenie liczb losowych... 5 3. Opis badanych generatorów liczb losowych... 6 3.1. Generator liniowy i afiniczny... 6 3.2. Generator inwersyjny... 7 3.3. Generator reszt potęgowych... 8 3.4. Metoda eliminacji von Neumanna... 9 4. Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji... 13 4.1. Generator afiniczny... 13 4.2. Generator inwersyjny... 14 4.3. Generator reszt potęgowych... 15 4.4. Metoda eliminacji von Neumanna... 16 5. Badanie i testowanie generatorów... 19 5.1. Generator afiniczny... 19 5.2. Generator inwersyjny... 20 5.3. Generator reszt potęgowych... 22 5.4. Metoda eliminacji von Neumanna... 24 6. Wnioski z testowania generatorów... 27 7. Bibliografia... 28 1.2. Spis tabel Tabela 3.1. Przykładowy wynik działania generatora afinicznego z parametrami a=5, b=1 i M=16.... 7 Tabela 3.2. Przykładowy ciąg generatora inwersyjnego dla a=5, b=1 i M=17... 8 Tabela 3.3. Przykładowy ciąg uzyskany z generatora BBS, dla p=11 i q=11 oraz s=5.... 9 Tabela 3.4. Przykładowy ciąg po zastosowaniu filtra von Neumanna... 11 Tabela 4.1. Zdefiniowane funkcje rozkładu generatora Neumanna... 17 Tabela 5.1. Tabela zależności długości okresu generatora inwersyjnego od parametrów równania... 21

Spisy 3 1.3. Spis równań Równanie 3.1. Równanie generatora liniowego... 6 Równanie 3.2. Równanie generatora afinicznego.... 6 Równanie 3.3. Równanie generatora inwersyjnego.... 7 Równanie 3.4. Równanie inwersyjnego dzielenia modulo... 7 Równanie 3.5. Wzór generatora BBS.... 8 Równanie 3.6. Uogólniony wzór generatora potęgowego reszt.... 9 1.4. Spis rysunków Rysunek 3.1. Porównanie histogramu otrzymanych liczb losowych z wykresem zadanej funkcji w zależności od liczby losowań... 10 Rysunek 3.2. Histogram rozkładu liczb losowych uzyskanych algorytmem Neumanna... 12 Rysunek 4.1. Wygląd okna "S-Funtion Builder" oraz jego parametry.... 13 Rysunek 4.2. Schemat oraz przykładowe parametry i wyniki dla generatora afinicznego... 14 Rysunek 4.3. Schemat oraz przykładowe wyniki generatora inwersyjnego... 15 Rysunek 4.4. Schemat oraz wyniki symulacji generatora reszt potęgowych.... 16 Rysunek 4.5. Schemat i przykładowe wyniki wykorzystywany w badaniu generatora Neumanna.... 18 Rysunek 5.1. Wykres zależności kolejnych liczb ciągu generatora afinicznego dla a=5, b=1, M=16... 19 Rysunek 5.2. Wykres zależności długości okresu od parametrów a i b przy stałym M=16... 19 Rysunek 5.3. Histogram liczb uzyskanych z generatora afinicznego przy parametrach a=5, b=1, M=16... 20 Rysunek 5.4. Histogram liczb uzyskanych z generatora afinicznego przy parametrach a=3, b-3, M=16 (nie maksymalny okres)... 20 Rysunek 5.5. Wykres zależności kolejnych liczb pseudolosowego ciągu dla generatora inwersyjnego przy parametrach a=3, b=7 i M=17.... 21 Rysunek 5.6. Wykres zależności długości okresu od parametrów generatora inwersyjnego.... 21 Rysunek 5.7. Histogram ciągu pseudolosowego uzyskanego generatorem inwersyjnym przy parametrach a=3, b=4, M=17.... 22 Rysunek 5.8. Histogram ciągu pseudolosowego uzyskanego generatorem inwersyjnym przy parametrach a=3, b=5, M=17 (nie maksymalny okres)... 22 Rysunek 5.9. Histogram liczb ciągu pseudolosowego uzyskanego z generatora potęgowego reszt przy parametrach p=11, q=11, s=25 oraz w=2, przy analizie ostatniej cyfry dziesiętnej... 23 Rysunek 5.10. Histogram liczb ciągu pseudolosowego uzyskanego z generatora potęgowego reszt przy parametrach p=11, q=11, s=25 oraz w=2, przy analizie reszt z dzielenia przez 4.... 23 Rysunek 5.11. Histogram liczb ciągu pseudolosowego uzyskanego z generatora potęgowego reszt przy parametrach p=307, q=311, s=25 oraz w=2, przy analizie ostatniej cyfry dziesiętnej... 23 Rysunek 5.12. Zależność kolejnych liczb pseudolosowych w generatorze potęgowym reszt przy parametrach p=307, q=311, s=25 oraz w=2, przy analizie ostatniego bitu (reszta z dzielenia przez 2)... 24 Rysunek 5.13. Histogram otrzymanych wyników generatora potęgowego reszt przy parametrach p=307, q=311, s=25 oraz w=2, przy analizie ostatniego bitu (reszta z dzielenia przez 2).... 24 Rysunek 5.14. Wykres kolejnych liczb pseudolosowych uzyskiwanych po zastosowaniu filtra Neumanna... 25 Rysunek 5.15. Histogram otrzymanych liczb pseudolosowych w wyniku zastosowania filtru von Neumanna dla 40 liczb wyjściowych... 25 Rysunek 5.16. Histogram otrzymanych liczb pseudolosowych w wyniku zastosowania filtru von Neumanna dla 10 000 liczb wyjściowych... 26

Spisy 4 1.5. Spis zawartości załączonej płyty CD Katalog/plik docs\generatory liczb losowych.doc docs\generatory liczb losowych.pdf matlab\inwersyjny.mdl matlab\liniowy.mdl matlab\neumann.mdl matlab\potegowy.mdl matlab\src\ Opis Dokumentacja projektu w formacie MS Word Dokumentacja projektu w formacie Adobe Acrobat (PDF) Dokument modułu SIMULINK programu MATLAB 6.5 R13 zawierający wykonanie generatora inwersyjnego (p. 4.2) Dokument modułu SIMULINK programu MATLAB 6.5 R13 zawierający wykonanie generatora afinicznego (p. 4.1) Dokument modułu SIMULINK programu MATLAB 6.5 R13 zawierający wykonanie generatora z wykorzystaniem filtru Neumanna (p. 4.4) Dokument modułu SIMULINK programu MATLAB 6.5 R13 zawierający wykonanie generatora potęgowego reszt (p. 4.3) Katalog z kompletnymi źródłami oraz skompilowanymi przez program MATLAB 6.5 R13 plikami wykorzystanymi w badaniach nad generatorami; nazwy z kodami źródłowymi w C wykorzystanych S-Funkcji znajdują się w plikach gen_<nazwa>.c, gdzie <nazwa> wskazuje na rodzaj generatora.

Opis tematu 5 2. Opis tematu Przedmiotem pracy jest scharakteryzowanie, analiza i implementacja za pomocą S-funkcji w programie MATLAB czterech algorytmów generatorów liczb losowych: - generator liniowy, - generator inwersyjny, - potęgowy generator reszt, - metoda eliminacji von Neumanna 2.1. Założenia Należy opracować algorytmy realizujące zadane generatory przy użyciu języka programowania C/C++ z wykorzystaniem programu do analizy matematycznej MATLAB. Program ten pozwala na złożone i sekwencyjne obliczenia zadanych wzorów z wykorzystaniem czytelnych schematów blokowych przy użyciu modułu SIMULINK. Można w nim realizować m.in. układy dyskretne, jakimi są generatory liczb losowych. Ponadto program MATLAB umożliwia badania statystyczne rozkładów i generowanie wykresów, dzięki którym będzie można zbadać poprawność działania oraz skuteczność opracowanych generatorów. Choć program posiada własne wbudowane komponenty generatorów liczb losowych a także przekształceń matematycznych układów dyskretnych, to jednak ze względu na temat pracy należy skorzystać z możliwości wykorzystania zewnętrznych funkcji napisanych w języku C/C++, które mogą współpracować z modułem SIMULINK. 2.2. Znaczenie liczb losowych W otaczającym nas świecie wiele zjawisk zachodzi w sposób zupełnie, lub w znacznym stopniu, losowy. Czasami Przebieg danego procesu jest uzależniony od tak wielu parametrów, że w uproszczeniu można przyjąć, iż zachodzi od w sposób przypadkowy. W celu ułatwienia obserwacji i analizy takich procesów powstał dział matematyki, zajmujący się statystyką i pozwalający próbować opisać dane zjawisko przy użyciu prawdopodobieństwa. Zjawiska takie zachodzą m.in. w fizyce (np. zderzanie się i rozchodzenie cząstek gazu lub cieczy), przyrodzie a także matematyce (np. rozkład liczb pierwszych w ciągu liczb naturalnych, który do dziś dnia nie udało opisać się przy użyciu żadnego deterministycznego równania). W celu ułatwienia modelowania lub symulacji zjawisk, które zachodzą stochastycznie, podjęto próby matematycznego opisu generowania liczb losowych, przy minimalnym nakładzie obliczeń. Choć natura matematyki sprawia, że nie można przy użyciu stałych wzorów uzyskać liczb całkowicie losowych, dlatego mówi się o losowości wtedy, gdy ciąg liczb jest niemożliwy do zapisania za pomocą algorytmu w postaci krótszej od niego samego. Na podstawie takiego ciągu nie można stworzyć żadnych reguł, które pozwalałyby odtworzyć ten ciąg bez znajomości wszystkich jego wyrazów. Wadą jest przy użyciu tych samych założeń i parametrów otrzymywanie za każdym razem identycznego ciągu, którego wszystkie wyrazy są powiązane ze sobą. Dlatego mówimy o tzw. ciągach pseudolosowych, które jednak w wielu sytuacjach można traktować jako ciąg liczb losowych. Własności te w świecie techniki i komputerów są szeroko wykorzystywane, poza wspomnianymi wcześniej sytuacjami, w dziedzinie kryptografii. Poza tym, liczby losowe przydają się także do badań statystycznych (losowanie próby), w tym ekonomicznych, społecznych, marketingowych, medycznych, naukowych itp. Można przy ich użyciu modelować zjawiska, które wyłącznie obciążone elementem losowości mogą pomóc w analizie skomplikowanego procesu. Liczby losowe stosowane są także przy kreowaniu sztucznej inteligencji oraz wirtualnych światów w grach stwarzając w ten sposób wrażenie realizmu.

Opis badanych generatorów liczb losowych 6 3. Opis badanych generatorów liczb losowych Już w przeszłości zauważono potrzebę istnienia liczb losowych. Pierwszym sposobem uzyskania liczby losowej była tablica z zapisanymi liczbami losowymi. Tablice takie tworzono w oparciu o obserwowane zjawiska lub przeprowadzane badania statystyczne. Następnie generowano takie liczby wykorzystując np. tablice logarytmiczne, które poddawano przekształceniom. Współcześnie bada się metody algorytmiczne, które wykorzystują wzory matematyczne oraz zależności pomiędzy kolejnymi liczbami. Wadą tej metody jest powtarzalność, a w przypadku prostych algorytmów pewna przewidywalność. Dlatego wciąż trwają badania nad zmniejszeniem przewidywalności wyników, dzięki czemu możemy otrzymywać ciągi pseudolosowe znacznie lepiej imitujące losowość. 3.1. Generator liniowy i afiniczny Otrzymywanie liczb o równomiernym rozkładzie prawdopodobieństwa jest ważnym elementem generatorów liczb losowych. Dzięki takim liczbom możliwe jest otrzymywanie kolejnych ciągów liczb także o zadanym rozkładzie prawdopodobieństwa. Celem takiego generatora jest uzyskanie ciągu liczb całkowitych z przedziału [0;M] w taki sposób, by wszystkie liczby występowały z jednakowym prawdopodobieństwem oraz by częstotliwość występowania liczb z każdego z podprzedziałów tego przedziału była w przybliżeniu jednakowa w czasie. Do osiągnięcia tych celów do dziś najczęściej wykorzystywanym jest generator liniowy. Kolejne liczby losowe są obliczane przy wykorzystaniu wzoru rekurencyjnego: Równanie 3.1. Równanie generatora liniowego. X n+ 1 = ( a X ) mod M n 1 Potrzebnymi parametrami jest określenie warunku początkowego (X 0 ) oraz współczynnika a a także M, które definiuje zakres maksymalny uzyskiwanych liczb. Zarówno X 0 jak i a muszą być z przedziału [1;M-1]. We wzorze 3.1 można zauważyć pewną niepożądaną cechę w przypadku, gdy któryś z wyrazów osiągnie wartość 0 (czyli wynikiem iloczynu wyrazu poprzedniego i wartości a będzie wartość równa wartości M), generator przestanie tworzyć kolejne liczby. Z tego względu stworzono pewne uogólnienie generatora liniowego jest generator afiniczny, który opisany jest wzorem: Równanie 3.2. Równanie generatora afinicznego. X n+ 1 = ( a X n + b) mod M, gdzie 0 < a, b < M Okres obu przedstawionych generatorów zależy od wartości parametrów równania i opisują twierdzenia: 1. Jeżeli M = 2 m, dla m 3, to maksymalny okres generatora liniowego wynosi N = 2 m-2, gdy a 3 mod 8 lub a 5 mod 8. 2. Jeżeli M jest liczbą pierwszą, to generator liniowy posiada okres maksymalny równy M, gdy a jest pierwiastkiem pierwotnym M. 2 Przykładowymi parametrami generatora afinicznego, który wygeneruje wszystkie liczby z zakresu, niech będą M=16, a=5 i b=1. Wyrazem początkowym niech będzie dowolna liczba. Dla takich parametrów uzyskujemy ciąg: 1 Wyrażenie x mod y oznacza uzyskiwanie reszty z dzielenia liczby x przez liczbę y. 2 Każda liczba m taka, że m mod N jest generatorem grupy cyklicznej G(N) (zbiór wszystkich reszt mod N, jest pierwiastkiem pierwotnym liczby N.

Opis badanych generatorów liczb losowych 7 Tabela 3.1. Przykładowy wynik działania generatora afinicznego z parametrami a=5, b=1 i M=16. X 0 = 0 X 1 = (5 X 0 +1) mod 16 = 1 mod 16 = 1 X 2 = (5 X 1 +1) mod 16 = 6 mod 16 = 6 X 3 = (5 X 2 +1) mod 16 = 31 mod 16 = 15 X 4 = (5 X 3 +1) mod 16 = 76 mod 16 = 12 X 5 = (5 X 4 +1) mod 16 = 61 mod 16 = 13 X 6 = (5 X 5 +1) mod 16 = 66 mod 16 = 2 X 7 = (5 X 6 +1) mod 16 = 11 mod 16 = 11 X 8 = (5 X 7 +1) mod 16 = 56 mod 16 = 8 X 9 = (5 X 8 +1) mod 16 = 41 mod 16 = 9 X 10 = (5 X 9 +1) mod 16 = 46 mod 16 = 14 X 11 = (5 X 10 +1) mod 16 = 71 mod 16 = 7 X 12 = (5 X 11 +1) mod 16 = 36 mod 16 = 4 X 13 = (5 X 12 +1) mod 16 = 21 mod 16 = 5 X 14 = (5 X 13 +1) mod 16 = 26 mod 16 = 10 X 15 = (5 X 14 +1) mod 16 = 51 mod 16 = 3 X 16 = (5 X 15 +1) mod 16 = 16 mod 16 = 0 3.2. Generator inwersyjny Generator inwersyjny także zalicza się do grupy generatorów o rozkładzie równomiernym, lecz w przeciwieństwie do liniowego, otrzymywane liczby są nieliniowe. Kolejne liczby ciągu uzyskuje się ze wzoru: Równanie 3.3. Równanie generatora inwersyjnego. X n+ 1 ( ax = b 1 n + b)mod M dla X dla X n n > 0, = 0 Gdzie X -1 oznacza inwersję dzielenia modulo, którą liczy się ze wzoru: Równanie 3.4. Równanie inwersyjnego dzielenia modulo. X 1 = c, gdzie : ( c X )mod M = 1 Liczba M musi być liczbą pierwsza. Maksymalny okres takiego generatora, przy odpowiednim doborze współczynników a i b może być równy M-1. Przeanalizujmy przykładowy ciąg z parametrami M=17, a=5 i b=1. Wyrazem początkowym niech będzie dowolna liczba.

Opis badanych generatorów liczb losowych 8 Tabela 3.2. Przykładowy ciąg generatora inwersyjnego dla a=5, b=1 i M=17. X 0 = 0 X 1 = b = 1 X 2 = (5 1+1) mod 17 = 6 mod 17 = 6 X 3 = (5 3+1) mod 17 = 16 mod 17 = 16 X 4 = (5 16+1) mod 17 = 81 mod 17 = 13 X 5 = (5 4+1) mod 17 = 21 mod 17 = 4 X 6 = (5 13+1) mod 17 = 66 mod 17 = 15 X 7 = (5 8+1) mod 17 = 41 mod 17 = 7 X 8 = (5 5+1) mod 17 = 26 mod 17 = 9 X 9 = (5 2+1) mod 17 = 11 mod 17 = 11 X 10 = (5 14+1) mod 17 = 71 mod 17 = 3 X 11 = (5 6+1) mod 17 = 31 mod 17 = 14 X 12 = (5 11+1) mod 17 = 56 mod 17 = 5 X 13 = (5 7+1) mod 17 = 36 mod 17 = 2 X 14 = (5 9+1) mod 17 = 46 mod 17 = 12 X 15 = (5 10+1) mod 17 = 51 mod 17 = 0 3.3. Generator reszt potęgowych Przedstawione do tej pory generatory ze względu na przewidywalność eliminują ich wykorzystanie w niektórych zastosowaniach, jak na przykład w kryptografii. Pierwszym generatorem liczb losowych, który nie posiadał tej cechy, był generator BBS, który swoją nazwę zawdzięcza trzem autorom: Blum, Blum, Shub. Generowanie liczby losowej następuje w wyniku obliczania reszty kwadratowej według wzoru: Równanie 3.5. Wzór generatora BBS. X i = X 2 i 1 mod M Siła algorytmu polega na odpowiednim doborze liczby M oraz punktu startowego. Do wyliczenia wartości M w pierwszym kroku znajdujemy dwie liczby pierwsze p i q. Ze względu na swą charakterystykę (bardzo krótkie okresy) liczby te powinny być odpowiednio duże. Następnie obliczamy M mnożąc obie liczby. Punktem startowym jest liczba s taka, że jej pierwiastek kwadratowy jest liczbą względnie pierwszą 1 z M. Jeżeli liczby p i q w wyniku dzielenia przez 4 dają resztę 3, to okres generatora jest maksymalny. Jednak generatory te nie uzyskują wszystkich liczb z zadanego przedziału, stąd istotne są wyłącznie końcówki uzyskanych liczb (w założeniu ostatni bit, lecz można także przyjąć ostatnią cyfrę dziesiętną, lub przy większych wynikach więcej takich liczb). Przy takich założeniach, odróżnienie jego wyników od szumu jest bardzo trudne. Przykładowy ciąg generatora BBS pokazano poniżej. W ostatniej kolumnie znajduje się cyfra jedności uzyskanej liczby, która jest uznawana za losową. 1 Liczba względnie pierwsza z inną to taka para liczb, dla których NWD wynosi 1 (nie posiadają wspólnych dzielników poza jednością).

Opis badanych generatorów liczb losowych 9 Tabela 3.3. Przykładowy ciąg uzyskany z generatora BBS, dla p=11 i q=11 oraz s=5. X 0 = s 2 25 5 X 1 = 25 2 mod 121 = 20 0 X 2 = 20 2 mod 121 = 37 7 X 3 = 37 2 mod 121 = 38 8 X 4 = 38 2 mod 121 = 113 3 X 5 = 113 2 mod 121 = 64 4 X 6 = 64 2 mod 121 = 103 3 X 7 = 103 2 mod 121 = 82 2 X 8 = 82 2 mod 121 = 69 9 X 9 = 69 2 mod 121 = 42 2 X 10 = 42 2 mod 121 = 70 0 X 11 = 70 2 mod 121 = 60 0 X 12 = 91 2 mod 121 = 91 1 X 13 = 25 2 mod 121 = 53 3 X 14 = 53 2 mod 121 = 26 6 X 15 = 26 2 mod 121 = 71 1 X 16 = 71 2 mod 121 = 80 0 X 17 = 80 2 mod 121 = 108 8 X 18 = 108 2 mod 121 = 48 8 X 19 = 48 2 mod 121 = 5 5 X 20 = 5 2 mod 121 = 25 5 Jak widać w ostatniej kolumnie rozkład liczb z przedziału 0-9 nie jest równomierny, co może świadczyć o doborze zbyt dużej reszty względem wybranych parametrów. Pewnym uogólnieniem algorytmu BBS jest wykorzystywany m.in. w tworzeniu kodu RSA generator o dowolnej potędze: Równanie 3.6. Uogólniony wzór generatora potęgowego reszt. X i = X ω i 1 mod M Choć w przypadku generatora RSA istnieją ściśle określone zasady doboru parametrów, by odtworzenie klucza było jak najtrudniejsze, to jednak nawet bez spełnienia tychże wytycznych, algorytm spełnia swoje zadanie. 3.4. Metoda eliminacji von Neumanna Dotychczas przestawiono generatory tworzące ciągi liczb losowych o rozkładzie równomiernym. Jednak często w badaniach statystycznych konieczne jest uzyskanie ściśle określonego rozkładu prawdopodobieństwa. Algorytmem umożliwiającym uzyskanie liczb losowych o zadanym rozkładzie jest metoda eliminacji von Neumanna. Warto zaznaczyć, że algorytm ten nie jest sam w sobie generatorem, a jedynie filtrem korzystającym z liczb losowych wygenerowanych przy użyciu innych generatorów o rozkładzie równomiernym. Schemat filtracji wyników przedstawia się w następujący sposób: 1. Generujemy dwie liczby losowe R 1 i R 2 o rozkładzie równomiernym, które odpowiednio: a. R 1 należące do przedziału, w jakim chcemy uzyskać liczby losowe, b. R 2 należące do przedziału [0,1] 1 f ( R1 ) 2. Sprawdzamy, czy R2, gdzie f oznacza funkcję, wobec kształtu której chcemy otrzymać rozkład fmax prawdopodobieństwa, zaś f max jej maksymalną wartość na zadanym przedziale. 1 Przedział taki można uzyskać losując liczby z zakresu [0,N] a następnie dzieląc wynik przez N.

Opis badanych generatorów liczb losowych 10 3. Jeśli warunek w punkcie 2 jest spełniony, to przyjmujemy, że otrzymaliśmy liczbę losową X = R 1. W przeciwnym wypadku odrzucamy wynik i wracamy do punktu 1. Realizując powyższy algorytm warto, aby długości ciągów pseudolosowych dla R 1 i R 2 były różne. Algorytm ten jest prosty, lecz dla niektórych rozkładów bywa kosztowy pod względem wydajności z powodu możliwej dużej liczby odrzuceń. Warto także zaznaczyć, że im więcej losujemy liczb przy użyciu filtra von Neumanna, tym histogram coraz bardziej zbliża się do zadanego kształtu. Rysunek 3.1. Porównanie histogramu otrzymanych liczb losowych z wykresem zadanej funkcji w zależności od liczby losowań. a) 10 000 wylosowanych liczb z czego 1 500 zaakceptowanych; b) 100 000 wylosowanych liczb z czego 15 000 zaakceptowanych. Prześledźmy pokrótce działanie algorytmu Neumanna opierając się na wynikach dwóch przedstawionych już generatorów afinicznego (p. tabela 3.1) jako R 1 oraz inwersyjnego (p. tabela 3.2) dla funkcji 2sin 2 (x/2) na przedziale [0,15].

Opis badanych generatorów liczb losowych 11 Tabela 3.4. Przykładowy ciąg po zastosowaniu filtra von Neumanna. R 1 R 2 R 2 /16 f (R 1 )/2 X 0 0 0 0 0 1 1 0,0625 0,229849 1 6 6 0,375 0,019915-15 16 1 0,879844-12 13 0,8125 0,078073-13 4 0,25 0,046277-2 15 0,9375 0,708073-11 7 0,4375 0,497787 11 8 9 0,5625 0,57275 8 9 11 0,6875 0,955565 9 14 3 0,1875 0,431631 14 7 14 0,875 0,123049-4 5 0,3125 0,826822 4 5 2 0,125 0,358169 5 10 12 0,75 0,919536 10 3 0 0 0,994996 3 0 1 0,0625 0-1 6 0,375 0,229849-6 16 1 0,019915-15 13 0,8125 0,879844 15 12 4 0,25 0,078073-13 15 0,9375 0,046277-2 7 0,4375 0,708073 2 11 9 0,5625 0,497787-8 11 0,6875 0,57275-9 3 0,1875 0,955565 9 14 14 0,875 0,431631-7 5 0,3125 0,123049-4 2 0,125 0,826822 4 5 12 0,75 0,358169-10 0 0 0,919536 10 3 1 0,0625 0,994996 3 0 6 0,375 0-1 16 1 0,229849-6 13 0,8125 0,019915-15 4 0,25 0,879844 15 12 15 0,9375 0,078073-13 7 0,4375 0,046277-2 9 0,5625 0,708073 2 11 11 0,6875 0,497787-8 3 0,1875 0,57275 8 9 14 0,875 0,955565 9 14 5 0,3125 0,431631 14 7 2 0,125 0,123049-4 12 0,75 0,826822 4 Jak można zauważyć na 45 kroków, algorytm zwrócił jedynie 22 liczby losowe, przy czym najczęściej odrzucał liczby znajdujące się przy minimach funkcji, a więc w okolicy wartości 0-1, 6-7 i 12-13. Histogram powyższej tabeli wraz z wykresem funkcji przedstawiono na poniższym rysunku:

Opis badanych generatorów liczb losowych 12 Rysunek 3.2. Histogram rozkładu liczb losowych uzyskanych algorytmem Neumanna.

Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 13 4. Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji Wszystkie generatory zrealizowano w oparciu o blok S-Function Builder modułu SIMULINK wykorzystując język C/C++ oraz kompilator zewnętrzny MS Visual C++ (przy użyciu polecenia mbuild setup w programie MATLAB). Każdy z generatorów wykorzystuje model próbkowania dyskretny. Do zmiany kolejnych stanów wykorzystywana jest funkcja Discrete Update zaś do wyprowadzania wyników na wyjście funkcja Outputs. Rysunek 4.1. Wygląd okna "S-Funtion Builder" oraz jego parametry. Większość schematów do badania generatorów składa się z bloku S-Funtion Builder oraz oscyloskopu (Scope) służącego do wyświetlania stanów i wyjścia To Workspace, dzięki któremu program tworzy tablicę o wskazanej nazwie w programie MATLAB z wynikami uzyskanymi z generatora. Dzięki temu możliwe jest dalsze badanie i analizowanie otrzymanych wyników. 4.1. Generator afiniczny Kluczem do generacji wyników w tym generatorze, jest linijka kodu odpowiedzialna za aktualizację stanu dyskretnego: xd[0]=fmod((*b)+xd[0]*(*a),*m); Realizuje ona dokładnie założenia algorytm generatora afinicznego (por. wzór 3.2). W funkcji wykorzystano 3 parametry pierwszy odpowiedzialny za współczynnik a, drugi odpowiedzialny za współczynnik b oraz trzeci odpowiedzialny za współczynnik M. Wyprowadzenie wartości na wyjście sprowadza się do przekazania nań stanu zmiennej xd[0].

Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 14 Rysunek 4.2. Schemat oraz przykładowe parametry i wyniki dla generatora afinicznego. Na rysunku 4.2 przedstawiono schemat oraz przykładowe wyniki z zaznaczonym okresem przy zadanych parametrach dla generatora. 4.2. Generator inwersyjny W generatorze tego typu za wyniki odpowiadają dwie funkcje w zależności od stanu poprzedniego. Oddzielnym problemem jest także poszukiwanie odwrotności modulo (czyli liczby, która przy dzieleniu przez wskazaną da w wyniku resztę równą jeden). Ten problem zrealizowano przy użyciu pętli podstawiającej kolejne wartości zmiennej i sprawdzającej resztę z dzielenia (por. wzór 3.4): for(c=1;fmod(c*xd[0],*m)!=1;c++); Pętla ta podstawia tak długo kolejne wartości zmiennej c, do czasu, aż reszta z dzielenia iloczynu stanu poprzedniego i tejże zmiennej przez zmienną M nie będzie wynosić 1. Z własności matematycznych liczba taka istnieje, dlatego nie należy obawiać się, że pętla nie osiągnie końca. Problem wyboru spośród dwóch funkcji (por. wzór 3.3) zrealizowano przy użyciu funkcji warunkowej if. Cała funkcja obliczająca kolejne pseudolosowe wartości przedstawia się następująco: if (xd[0]==0) xd[0]=*b; else { unsigned short int c; //szukanie odwrotności: for(c=1;fmod(c*xd[0],*m)!=1;c++); xd[0]=fmod(*b+c*(*a),*m); } Funkcja wykorzystuje trzy parametry, podawane w kolejności a, b i M (por. wzór 3.3). Schemat wykorzystany do badania generatora oraz wyniki dla przykładowych parametrów przedstawiono poniżej:

Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 15 Rysunek 4.3. Schemat oraz przykładowe wyniki generatora inwersyjnego. 4.3. Generator reszt potęgowych Generator ten został zbudowany w oparciu o wzór 3.6, który w zapisie w języku C przedstawia się następująco: xd[0]=fmod(pow(xd[0],*w),(*p)*(*q)); Przy realizacji tego generatora pojawił się problem inicjalizacji stanu początkowego w zależności od parametru. Dlatego dodano dodatkowe wyjście informacyjne start typu logicznego (prawda-fałsz), które wskazuje, że wynik jest poprawnym wynikiem generatora. Wyjście to jest wykorzystywane przy ustawianiu pierwszej wartości w taki sposób, że jeśli wyjście ma wartość fałsz (domyślna), to funkcja odpowiedzialna za aktualizację stanu dyskretnego inicjalizuje zmienną w następujący sposób: if (!start[0]) xd[0]=*s; Za ustawienie wyjścia start w wartość prawda odpowiedzialna jest funkcja ustawiająca stany wyjściowe. Zakłada ona, że pierwszym poprawnym stanem wyjściowym jest niezerowa wartość zmiennej stanu dyskretnego: if (xd[0]!=0) start[0]=true; Funkcja wyjściowa zwraca poza wyjściem start jeszcze dwie inne wartości: y określającą właściwą wartość pseudolosową, czyli ostatnią część obliczonej wartości (np. ostatni bit lub ostatnią wartość dziesiętną) yf pełną obliczoną wartość ciągu. Wyjście to ma charakter wyłącznie informacyjny i nie powinno być wykorzystywane jako generujące ciąg pseudolosowych liczb. Otrzymywanie reszty liczby, która to reszta pojawia się na wyjściu y, zrealizowano przy pomocy operacji dzielenia modulo: y[0]=fmod(xd[0],*r); W zależności od parametru r operacja może zwracać różne części liczby, jednocześnie określając wartość maksymalną (p. niżej). Funkcja przyjmuje 5 parametrów:

Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 16 p i q liczby, które służą do wyznaczania wartości M (por. p. 3.3). Wartości te, zgodnie z założeniami algorytmu, powinny być odpowiednio dużymi i nie różniącymi się od siebie znacznie liczbami pierwszymi. w zmienna określająca wykładnik potęgowania (por. wzór 3.6). W celu realizacji np. algorytmu BBS, wartość powinna wynosić 2. s ziarno funkcji, czyli wartość początkowa. W przypadku realizacji algorytmu BBS wartość ta powinna być kwadratem liczby s (por. p. 3.3). r zmienna określająca jak duża część reszty ma być zwracana przez funkcję. Przykładowo, jeśli chcemy otrzymywać wyłącznie ostatni bit, wartość ta powinna wynosić 2; jeśli chcemy uzyskiwać ostatnią cyfrę dziesiętną, wartość powinna wynosić 10. Dokładnie: zmienna określająca wartość dzielenia modulo liczby. Poniżej przedstawiono schemat, przykładowe wartości oraz wynik działania symulacji generatora potęgowego, wraz z zaznaczonym okresem. Górny wykres przedstawia ciąg pseudolosowych liczb będącymi resztami obliczonych liczb; dolny generowane pełne wartości. Należy zwrócić uwagę, aby przy dalszych badaniach odrzucać pierwszą wartość zera. Rysunek 4.4. Schemat oraz wyniki symulacji generatora reszt potęgowych. 4.4. Metoda eliminacji von Neumanna Przy implementacji tej metody stworzono blok oparty o dwa generatory afiniczne oraz filtra Neumanna. Dwa stany dyskretne odpowiadają za kolejne liczby obu tych generatorów. Podczas doboru parametrów (opisane poniżej) warto zwrócić uwagę, aby uzyskiwać w miarę możliwości ciągi o maksymalnych okresach, szczególnie dla pierwszego generatora. Filtrowanie oparte zostało na pętli do..while, która tak długo pobiera kolejne liczby z ciągów pseudolosowych, aż zostanie spełniony warunek określony przez algorytm. Poniżej przedstawiono założenia pętli w postaci pseudokodu:

Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 17 do { xd[0]= obliczanie kolejnej wartości pierwszego ciągu pseudolosowego r1= obliczanie wartości R1 na podstawie xd[0] (testowana wartość por. p. 3.4) xd[1]= obliczanie kolejnej wartości drugiego ciągu pseudolosowego r2= przekształcenie otrzymanej wartości xd[2] na zakres [0,1] f = obliczenie wartości funkcji w punkcie r1 } while (f<r2); Gdy pętla przerwie swoje działanie (warunek zostanie spełniony), to wartość xd[0] (po odpowiednich przekształceniach) jest przekazywana do wyjścia, jako liczba pseudolosowa o zadanym rozkładzie. Funkcja przyjmuje następujące parametry: a1, b1 współczynniki pierwszego generatora afinicznego (por. wzór 3.2), a2, b2, M2 współczynniki drugiego generatora afinicznego (por. wzór 3.2), from_val, to_val zakres dolny i górny przedziału, w którym chcemy uzyskać liczby losowe (wartości te mają wpływ na współczynnik M pierwszego generatora afinicznego w sposób następujący: M1 = to_val - from_val + 1; por. wzór 3.2), func_no pozwala na wybór jednej z odgórnie zdefiniowanych funkcji rozkładu. Podanie niezdefiniowanej wartości spowoduje zastosowanie rozkładu równomiernego, a więc zwrócenie wszystkich wylosowanych przez pierwszy generator liczb. Poniżej przedstawiono wartości, jakie może przyjąć ten parametr: Tabela 4.1. Zdefiniowane funkcje rozkładu generatora Neumanna. s, t parametry funkcji. func_no Funkcja 1 e s 2π ( x t) 1 2 2s 2 2 sin( sx) sx 2 (funkcja Gaussa) Przykładowo, jeśli chcemy otrzymać zmienne losowe wg rozkładu normalnego, to powinniśmy użyć następujących parametrów: func_no=1, s=1, t=0. Kompletny kod liczący przedstawiono poniżej: const double PI=3.141592654; double f; double r1,r2; unsigned int f_no=*func_no; do { xd[0]=fmod((*a1)*xd[0]+(*b1),(*to_val)-(*from_val)+1); r1=xd[0]+(*from_val); xd[1]=fmod((*a2)*xd[1]+(*b2),*m2); r2=(xd[1]+1)/(*m2); switch (f_no) { case 1: f=(exp(-pow(r1-(*t),2)/(2*pow(*s,2)))/ ((*s)*sqrt(2*pi)))/(exp(0)/((*s)*sqrt(2*pi))); break; case 2: if (r1==0) f=1; else f=pow(sin((*s)*r1)/((*s)*r1),2); break; default: r2=0; f=1; } } while (f<r2);

Realizacja generatorów liczb losowych w module SIMULINK programu MATLAB przy użyciu S-Funkcji 18 Poniżej przedstawiono schemat badanego generatora: Rysunek 4.5. Schemat i przykładowe wyniki wykorzystywany w badaniu generatora Neumanna.

Badanie i testowanie generatorów 19 5. Badanie i testowanie generatorów Dobry generator to taki, który tworzy sekwencje liczb własnościach liczb prawdziwie losowych. W praktyce jednak nie można udowodnić, że dany generator jest dobry. Możliwe jest za to udowodnienie, że generator jest zły (nie spełnia któregoś z testów). Pozytywne wyniki określonej liczby testów zwiększają jedynie poziom zaufania względem generatora, ale nie gwarantują jego niezawodności. Testowanie generatorów sprowadza się do spełnienia następujących własności: Zgodność rozkładu ciągu liczb z postulowanym (równomierność rozkładu), Losowość rozkładu (brak wzorca), Wzajemna niezależność (nieprzewidywalność kolejnych liczb). 5.1. Generator afiniczny Generator ten należy do grupy generatorów liniowych, stąd jego przewidywalność jest bardzo duża. Można zauważyć to na wykresie kolejnych wartości generatora: Rysunek 5.1. Wykres zależności kolejnych liczb ciągu generatora afinicznego dla a=5, b=1, M=16. Ze względu na charakter tego generatora, możliwe jest otrzymywanie wyłącznie albo rozkładu równomiernego przy maksymalnym okresie, albo rozkładu niepełnego (z brakującymi poszczególnymi elementami), jeśli okres generatora nie będzie wynosił M (por. wzór 3.2). Poniżej przedstawiono wykres zależności okresu od doboru parametrów a i b, przy stałym M. Rysunek 5.2. Wykres zależności długości okresu od parametrów a i b przy stałym M=16.

Badanie i testowanie generatorów 20 Z przedstawionego rysunku można zaobserwować, że właściwy dobór parametrów jest istotny oraz to, że interferują one razem. Dobór parametru a może doprowadzić do generowania wyłącznie jednej liczby (okres=0). Właściwy dobór parametru b może wydłużyć okres przy dobrze dobranym a. W badanym zakresie, generator osiągał maksymalny okres dla par (a,b) = (1,1), (1,3), (1,5), (5,1), (5,3), (5,5). Potwierdza się zatem fakt, że oba parametry powinny spełniać warunek a,b (3 mod 8 lub 5 mod 8) przy M będącym potęgą liczby 2, aby generator podawał wszystkie liczby z zakresu, tworząc idealny histogram rozkładu: Rysunek 5.3. Histogram liczb uzyskanych z generatora afinicznego przy parametrach a=5, b=1, M=16. Jeśli okres nie będzie maksymalnym, generator nie będzie losował danych liczb z całego zakresu. Liczby te są uzależnione od doboru parametrów. 4 3.5 3 2.5 2 1.5 1 0.5 0 0 5 10 15 Rysunek 5.4. Histogram liczb uzyskanych z generatora afinicznego przy parametrach a=3, b-3, M=16 (nie maksymalny okres). 5.2. Generator inwersyjny Jak wcześniej zostało wspomniane, generator inwersyjny powstał, by wyeliminować przewidywalny element liniowości z ciągu pseudolosowego. Porównując rezultat polecenia plot programu MATLAB rysunek 5.5 z 5.1 można zauważyć tą różnicę.