# -*- coding: utf-8 -*-

# Chapitre 5: Variables aléatoires continues

#Dans cette séance, on considère diverses méthodes de simulations de variables aléatoires continues.
#On rappelle que la fonction de répartition d'une variable aléatoire X est la fonction F:x↦ℙ[X≤x].


#%% I. Fonctions de répartition


#%% 1. Généralités

#Soit F:ℝ→ℝ une fonction strictement croissante qui tend vers 0 en -∞ et vers 1 en +∞. On note par F⁻¹ sa fonction réciproque.
#Soit U une variable aléatoire suivant la loi uniforme sur [0,1].

#Déterminer la fonction de répartition de la variable aléatoire F⁻¹(U).


#%% 2. Exemple de la loi exponentielle


#On a vu précédemment que la loi uniforme se simule à l'aide de la fonction uniform du module random
#On rappelle de plus qu'une variable aléatoire suit la loi exponentielle de paramètre λ si elle admet (sur ℝ) la densité 
#       ⎧0           si x≤0
# f(x)= ⎨
#       ⎩λ exp(-λ x) si x>0.

# 1. Calculez la fonction de répartition de la loi exponentielle, de parametre λ.
# 2. Écrire une fonction qui utilise le résultat précédent pour simuler une loi exponentielle.
# Vous vérifierez numériquement que votre fonction approche bien une loi exponentielle.


from random import uniform
def simul_exponentielle(lambda_):
    ....



#%% II. Méthode de rejet


#%% 1. Loi uniforme sur un disque

# Justifiez que la fonction ci-dessous tire un point du disque (de centre zéro et de rayon 1) selon la loi uniforme



def unif_disque():
    while True:
        x=uniform(-1,1)
        y=uniform(-1,1)
        if x**2+y**2<1:
            return (x,y)


# Pourquoi cette méthode s'appelle t'elle "méthode de rejet" ?


#%% 2. Densité arbitraire

# On peut utiliser la méthode précédente pour simuler une loi de densité arbitraire (aux seules conditions que la densité soit bornée et à support compact). En effet si on note X l'abscisse d'un point tiré aléatoirement de manière uniforme sur le domaine entre la courbe d'une fonction f positive et l'axe des abscisses, on montre aisément que X admet pour densité la fonction f (si l'intégrale de f vaut 1).

# Utiliser cette méthode pour simuler une variable aléatoire dont la densité vaut 1-|x| (pour x∈[-1,1]).


#%% III. Loi normale:

# Montrer que si U et V sont deux variables indépendantes de loi uniforme sur [0,1], alors X=√(-2 ln(U)) cos(2π V) et Y=√(-2 log(U)) sin(2π V) sont indépendantes et de même loi: la loi normale centrée réduite.

# En déduire une fonction qui simule une loi normale centrée réduite.



#%% IV. Processus de Poisson: temps d'attente d'un autobus.

# On considère un autobus qui passe à un arrêt à des horaires donnés par un processus de poisson de paramètre λ=1 h. C'est à dire que les temps entre deux passages de bus successifs suivent des lois exponentielles indépendantes, de paramètre λ=1 h (et le temps entre minuit et le premier passage du bus est aussi une loi exponentielle de paramètre λ=1 h, indépendante des autres).
# Une personne qui ne sait pas à quelle heure passera le bus se rend à l'arrêt de bus à une heure aléatoire de la journée (choisie uniformément). Comme le temps moyen de passage entre les bus est de 1h, elle s'attend à attendre en moyenne 30min avant d'avoir le bus.

# Effectuer des simulations et vérifier si le temps d'attente moyen est bien 30 min.