# -*- coding: utf-8 -*-
"""
Created on Mon Feb  9 12:22:08 2026

@author: pjaub
"""

from math import sqrt, log
import random as rd
import matplotlib.pyplot as plt
import numpy as np


from scipy.stats import norm
F = norm.cdf           # Fonct. de repartition

plt.close('all')

N = 10000

plt.figure('Loi 1')
def simul_X():
    return -1 + 2 * rd.random()
v = 1/3
mu = 0
n = 10
M = [ sum([simul_X() for _ in range(n)]) for j in range(N)]
M_etoile = [(t- n*mu)/sqrt(v)/sqrt(n) for t in M]
x = sorted (M_etoile)
y = [ (k+1)/N for k in range(N) ]
plt.plot(x, y, 'r')
x = np.linspace(x[0], x[-1])
y = [ F(t) for t in x ]
plt.plot(x, y, 'k')
plt.show()


plt.figure('Loi 2')
def simul_X():
    return -1 + 2*rd.randint(0, 1)
v = 1
mu = 0
n = 10
M = [ sum([simul_X() for _ in range(n)]) for j in range(N)]
M_etoile = [(t- n*mu)/sqrt(v)/sqrt(n) for t in M]
x = sorted (M_etoile)
y = [ (k+1)/N for k in range(N) ]
plt.plot(x, y, 'r')
x = np.linspace(x[0], x[-1])
y = [ F(t) for t in x ]
plt.plot(x, y, 'k')
plt.show()


plt.figure('Loi 3')
def simul_X():
    return -log(1-rd.random())
v = 1
mu = 1
n = 10
M = [ sum([simul_X() for _ in range(n)]) for j in range(N)]
M_etoile = [(t- n*mu)/sqrt(v)/sqrt(n) for t in M]
x = sorted (M_etoile)
y = [ (k+1)/N for k in range(N) ]
plt.plot(x, y, 'r')
x = np.linspace(x[0], x[-1])
y = [ F(t) for t in x ]
plt.plot(x, y, 'k')
plt.show()


plt.figure('Loi 4')
def simul_X():
    return rd.gauss(2,3)
v = 9
mu = 2
n = 10
M = [ sum([simul_X() for _ in range(n)]) for j in range(N)]
M_etoile = [(t- n*mu)/sqrt(v)/sqrt(n) for t in M]
x = sorted (M_etoile)
y = [ (k+1)/N for k in range(N) ]
plt.plot(x, y, 'r')
x = np.linspace(x[0], x[-1])
y = [ F(t) for t in x ]
plt.plot(x, y, 'k')
plt.show()


plt.figure('Loi 5')
def simul_X():
    return 1 if rd.random() < 0.3 else 0
mu = 0.3
v = 0.3 * 0.7
n = 10
M = [sum(simul_X() for _ in range(n)) for j in range(N)]
M_etoile = [(t - n*mu)/sqrt(v)/sqrt(n) for t in M]
x = sorted(M_etoile)
y = [(k+1)/N for k in range(N)]
plt.plot(x, y, 'r')
x = np.linspace(x[0], x[-1], 500)
y = [F(t) for t in x]
plt.plot(x, y, 'k')
plt.show()



plt.figure('Loi 6')
def simul_X():
    return rd.random()
mu = 1/2
v = 1/12
n = 10
M = [sum(simul_X() for _ in range(n)) for j in range(N)]
M_etoile = [(t - n*mu)/sqrt(v)/sqrt(n) for t in M]
x = sorted(M_etoile)
y = [(k+1)/N for k in range(N)]
plt.plot(x, y, 'r')
x = np.linspace(x[0], x[-1], 500)
y = [F(t) for t in x]
plt.plot(x, y, 'k')
plt.show()


plt.figure('Loi 7')
def simul_X():
    k = 1
    while rd.random() > 0.3:
        k += 1
    return k
mu = 1/0.3
v = (1-0.3)/(0.3**2)
n = 10
M = [sum(simul_X() for _ in range(n)) for j in range(N)]
M_etoile = [(t - n*mu)/sqrt(v)/sqrt(n) for t in M]
x = sorted(M_etoile)
y = [(k+1)/N for k in range(N)]
plt.plot(x, y, 'r')
x = np.linspace(x[0], x[-1], 500)
y = [F(t) for t in x]
plt.plot(x, y, 'k')
plt.show()



