Modélisation

Retrouver tous les sujets résolus.
sos-math(21)
Messages : 10334
Enregistré le : lun. 30 août 2010 11:15

Re: Modélisation

Message par sos-math(21) » sam. 27 juin 2020 08:40

Bonjour,
je n'ai pas de listes de programmes comme la dernière fois mais tu peux en construire assez facilement à partir du moment où tu connais le modèle probabiliste.
Je te donne un exemple pour le tirage avec remise : supposons que l'on ait dans une urne une proportion \(p\) d'une certaine catégorie, et que l'on tire \(n\) boules dans l'urne avec remise, on peut alors compter le nombre de succès : il s'agit du modèle binomial.
On peut donc simuler ce modèle en créant d'abord une fonction tirage qui va simuler cette expérience aléatoire et renvoyer le nombre de succès obtenus après la répétition des \(n\) tirages.
Si l'on veut estimer la probabilités de \(k\) succès, il faut alors générer un échantillon de grande taille des simulations précédentes puis calculer la fréquence des tirages à \(k\) succès :

Code : Tout sélectionner

import random
def tirage_avec_remise(n,p):
    """simule n tirage(s) avec remise dans une urne contenant une proportion p de boules d'une certaine catégorie et renvoie le nombre de succès"""
    random.seed() # réinitialise le générateur de nombres aléatoires
    succes = 0
    tirage = 0
    for i in range(n):
        tirage = random.random()
        if tirage <= p:
            succes = succes + 1
    return succes

def simul_remise_binomial(k,n,p, taille_echantillon):
    """génère un échantillon de plusieurs tirages et renvoie la fréquence des tirages à k succès"""
    compteur = 0
    for i in range(taille_echantillon):
        if tirage_avec_remise(n,p) == k:
            compteur = compteur + 1
    return compteur/taille_echantillon
Avec cette fonction, si l'on prend une taille d'échantillon assez grande, on doit avoir des fréquences assez proches de la probabilité \(P(X=k)=\binom{n}{k}p^k(1-p)^{n-k}\) (c'est la loi des grands nombres).
Par exemple si l'on cherche la probabilité de \(k\) succès pour 50 répétitions avec une probabilité de succès de 0,2, avec une simulation à 100000 tirages , on a par exemple :

Code : Tout sélectionner

>>>simul_remise_binomial(15,50,0.2,100000)
0.02914
alors que le calcul théorique donne \(P(X=15)=0.02991866\).
Si tu veux essayer, voici le programme en ligne :
https://repl.it/@rnivelle/simulationtirages#main.py
Bonne continuation
Invité

Re: Modélisation

Message par Invité » sam. 27 juin 2020 08:52

Merci bcp je vais essayer.

Comment on peut faire des programmes en Python sur les variables aléatoires à densité ? Parce que c'est écrit dans le programme que ça peut tomber..... Mais je vois pas ce qu'on pourrait faire !

Je vais essayer de faire la simulation du tirage sans remise je vous dis si j'ai comprit

Et aussi comment calculer une factorielle en Python ? J'ai pas réussi alors qui paraît que c'est classique donc ça m'inquiète

Merci énormément bon samedi à vous moi c'est le dernier....
sos-math(21)
Messages : 10334
Enregistré le : lun. 30 août 2010 11:15

Re: Modélisation

Message par sos-math(21) » sam. 27 juin 2020 09:14

Bonjour,
pour les simulations avec une loi à densité, il est facile de simuler la loi uniforme

Code : Tout sélectionner

import random
def uniforme(a,b):
    return(a+(b-a)*random.random())
puis la loi exponentielle puisque si \(U\) suit la loi uniforme sur [0,1], alors \(-\frac{1}{\lambda}\ln(U)\) suit la loi exponentielle de paramètre \(\lambda\) (si on a \(\lambda >0\)).
Pour d'autres lois, il existe aussi le module scipy qui simule la loi normale, voir par exemple : http://www.bcpst2.bginette.com/Maths/Co ... ensite.pdf

Pour une construction de la factorielle, on peut faire un petit programme :

Code : Tout sélectionner

def factorielle(n) :
    fact = 1
    for k in range(1, n+1) :
        fact = k * fact
    return fact
 
Bonne continuation
Répondre