import numpy as np import matplotlib.pyplot as plt # ************************************************************** # lineární kongruentní generátor: # pomocí obyčejné funkce: def lcg1(modulus, a, b, seed): """Linear congruential generator function.""" # poznámka, co funkce dělá return (a * seed + b) % modulus # pomocí iterovatelné funkce (generátoru): def lcg2(modulus, a, b, seed): """Linear congruential generator.""" while True: seed = (a * seed + b) % modulus yield seed #**************************************************************** # prepare empty arrays: dim = 100000 x = np.empty(dim) y = np.empty(dim) colors = np.empty(dim) #**************************************************************** # použití obyčejné funkce: a = pow(7,5) b = 0 m = pow(2,31) - 1 N = 11 for i in range(dim): N = lcg1(m,a,b,N) x[i] = N / m N = lcg1(m,a,b,N) y[i] = N / m N = lcg1(m,a,b,N) colors[i] = N / m * 148 plt.scatter(x,y,s=0.1,c=colors) plt.show() #**************************************************************** # použití generátoru: lcg_iterator = lcg2(m,a,b,11) for i in range(dim): x[i] = lcg_iterator.__next__() / m y[i] = lcg_iterator.__next__() / m colors[i] = lcg_iterator.__next__() / m * 148 plt.scatter(x,y,s=0.1,c=colors) plt.show()