Untitled
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()