Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
1.8 kB
1
Indexable
Never
# WERONIKA SZUPLEWSKA 16905 MZ04IP1
# ###################################################################
# LAB 1 - Zadanie 1
# Zaimplementowanie w dowolnym języku programowania generatora liczb losowych o rozkładzie równomiernym (generator liniowy oparty na
# liniowych wzorach rekurencyjnych) i zbadanie jego parametrów (wartość oczekiwana, odchylenie standardowe, histogram – rozkład generowanych
# wartości) oraz zamieszczenie wyników w sprawozdaniu
# Generator liniowy:
# X(n+1) = (a1X(n) + a2X(n-1) + …. + akX(n-k+1) + c) mod m
# lub
# X(n+1) = (aX(n) + c) mod m
# Gdzie:
# a, a1, … , ak, c, m, k – ustalone liczby całkowite;
# mod – operator wyznaczania reszty z dzielenia;
# dodatkowo potrzebne są odpowiednie wartości startowe X(0), X(1), … , X(k).

import matplotlib.pyplot as plt
import numpy as np

def randomNumber(a, c, m, n, x0):
    if ( n > 1 ):
        x = (a*randomNumber(a, c, m, n-1, x0)+c)%m
        # print("X dla n = {} wynosi {}".format(n, x))
    elif ( n == 1 ):
        x = (a*x0+c)%m
        # print("X dla n = {} wynosi {}".format(n, x))
    else:
        raise ValueError("n need to be more than 0!!")
    return x

# #### P R Z Y K L A D ####################################
# X dla n = 1 wynosi 13     3(2)+7 mod 23 = 13
# X dla n = 2 wynosi 0      3(13)+7 mod 23 = 0
# X dla n = 3 wynosi 7      3(0)+7 mod 23 = 7
# X dla n = 4 wynosi 5      3(7)+7 mod 23 = 5
# X dla n = 5 wynosi 22     3(5)+7 mod 23 = 22
# #########################################################
w = []
w.append(randomNumber(a = 3, c = 7, m = 23, n = 5, x0 = 2))

print(w)

count, bins, ignored = plt.hist(w, 5, density=True)
plt.plot(bins, np.ones_like(bins), linewidth=2, color='r')
plt.show()