import numpy.random as rd
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt

def simul():
    U=rd.randint(1,3,10)
    x=0 
    for k in range(2,10):
        if U[k-1]==U[k-2]==U[k]:
            x=1 
    return x

def estimation(N):
    S=np.zeros(N)
    for k in range(N):
        S[k]=simul()
    return np.mean(S)
#AUTRE POSSIBILITE
def estimation2(N):
    S=10
    for k in range(N):
        S+=simul()
    return S/N

plt.close()
N = 1000
essais = [50,100,1000]
for k in range(3):
    M = np.zeros(N)
    n = essais[k]
    for i in range(N):
        X = np.zeros(n)
        for j in range(n):
            X[j] = simul()
        M[i] = np.mean(X)
    plt.subplot(1,3,k+1)
    plt.hist(M,range=(0,1),bins=50)
plt.show()

#ZEXERCICE 2
#Question 3
import numpy as np
import numpy.random as rd
import matplotlib.pyplot as plt
essais=[100,1000,10000,50000]
Yfinal=np.zeros(4)
Zfinal=np.zeros(4)
numessais=0
for N in essais:
  Y=np.zeros(1000)
  Z=np.zeros(1000)
  for i in range(1000):
    X=rd.poisson(3,size=N)
    Y[i]=np.mean(X)
    Z[i]=(N/(N-1))*np.mean((X-np.mean(X))**2)
  Yfinal[numessais]=np.abs(np.mean(Y)-3)
  Zfinal[numessais]=np.abs(np.mean(Z)-3)
  numessais+=1
print(Yfinal)
print(Zfinal)
plt.clf()
plt.ylim(-0.01,0.01)
plt.plot(range(4),Yfinal,'r+')
plt.plot(range(4),Zfinal,'b+')
plt.show()
#Question 4
N = 2500
n = 100
X = rd.poisson(3,size=[n,N]) #Renvoie une matrice a n lignes et N colonnes
Y = np.mean(X,axis=0) #On renvoie une matrice ligne ou chaque element est la moyenne de la colonne de X
Z = n/(n-1)*np.var(X,axis=0)
m = min(min(Y),min(Z))
M = max(max(Y),max(Z))
plt.close()
plt.subplot(1,2,1)
plt.hist(Y,range=(m,M),bins=50,color="yellow",edgecolor="red")
plt.subplot(1,2,2)
plt.hist(Z,range=(m,M),bins=50,color="yellow",edgecolor="red")
plt.show()
