import numpy as np
import numpy.random as rd
import matplotlib.pyplot as plt
def simule(n):
k=1
while rd.rand()>1/n:
k+=1
return k/n
for n in [10,50,100]:
A=np.array([simule(n) for i in range(10000)])
x=np.linspace(0,8,100)
plt.plot(x,np.exp(-x))
plt.hist(A,100, density=True)
plt.show()
#Calcul de g_n(x)
def G(n,x):
S=1; u=1
for k in range(1,n+1):
u=u*x/k
S=S+u
return S*np.exp(-x)
#Approximation de a_n : par dichotomie car x->g(n,x) est décroissante
def A(n):
b=0
while(G(n,b)>1/2): #Recherche de a et b pour la dichotomie : on veut g(n,a)>1/2 et g(n,b)<1/2
b=b+1
a=b-1
while(b-a)>10**(-2): #Dichotomie
c=(a+b)/2
if G(n,c)<1/2:
b=c
else:
a=c
return (a+b)/2
Stratégie : on sépare les individus en 6 groupes de 4 personnes.
def tirage():
D=rd.randint(1,7,3)
return 4*(D[0]-1)+2*(D[1]>3)+(D[2]>3)+1
# Histogramme pour vérification
A=np.array([tirage() for i in range(100000)])
plt.hist(A,24)
plt.show()
def U(n):
if n==0:
return 3
u, v = 3, 29/9
for i in range(n-1):
u, v = v, 9-26/v+24/(u*v)
return v
def C(n):
c=np.zeros(n+1)
c[0]=1
for i in range(1,n+1):
S=0
for k in range(i):
S+=c[k]*c[i-1-k]
c[i]=S
return c[n]
def M(a,b,eps):
u,v=a,b
while abs(u-v)>eps:
u,v=(u+v)/2, np.sqrt(u*v)
return (u+v)/2
def T(p):
n=1
X=rd.binomial(1,p,2)
while X[0]==X[1]:
X=rd.binomial(1,p,2)
n+=1
return n
def R(p):
X=rd.binomial(1,p,2)
while X[0]==X[1]:
X=rd.binomial(1,p,2)
return X[1]
On cherche à montrer que l'espérance de $R$ s'approche de $\frac 1 2$, ce qui confirmera que le procédé a bien pour effet de rééquilibrer le tirage. Pour ce faire, on effectue des estimations de $\mathbb{E}(R)$ pour des valeurs de $p$ entre $0.1$ et $0.9$.
for p in [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]:
A=np.array([R(p) for i in range(10000)])
print("p=",p,": estimation de l'espérance de R :",np.mean(A))
p= 0.1 : estimation de l'espérance de R : 0.5071 p= 0.2 : estimation de l'espérance de R : 0.5025 p= 0.3 : estimation de l'espérance de R : 0.4948 p= 0.4 : estimation de l'espérance de R : 0.4981 p= 0.5 : estimation de l'espérance de R : 0.4999 p= 0.6 : estimation de l'espérance de R : 0.5017 p= 0.7 : estimation de l'espérance de R : 0.5055 p= 0.8 : estimation de l'espérance de R : 0.5047 p= 0.9 : estimation de l'espérance de R : 0.4974
def simule():
X,Y=0,0
n=0
while(X==0 or Y==0): #on continue tant que l'une des deux variables X, Y vaut 0
n+=1
p=rd.randint(1,4)
print(p)
if p==1 and X==0: #on a trouvé la première boule blanche
X=n
elif p==2 and Y==0: #on a trouvé la première boule noire
Y=n
return(X,Y)
Soit $y\in [0,1]$. Comme $G$ est strictement croissante en tant que bijection réciproque de $F$ qui est strictement croissante, on a $$\mathbb{P}(Y\leqslant y) ~=~ \mathbb{P}(F(X)\leqslant y) ~=~ \mathbb{P}(X\leqslant G(y)) ~=~ F(G(y)) ~=~ y.$$ D'autre part, on a bien sûr $\mathbb{P}(Y\leqslant y)=0$ si $y\leqslant 0$ et $\mathbb{P}(Y\leqslant y)=1$ si $y\geqslant 1$. On reconnaît la fonction de répartition de la loi $\mathcal{U}([0,1])$, ce qui prouve que $Y\hookrightarrow \mathcal{U}([0,1])$. Par conséquent, comme $X=G(Y)$, on en déduit que la fonction {\tt mystere} simule la variable aléatoire $X$.
D'après la loi des grands nombres, un choix de $n$ grand permet d'obtenir à partir de ${\tt mysterebis(n)}$ une estimation de l'espérance de $X$.