Inscription / Connexion Nouveau Sujet
Niveau exercices
Partager :

Bassin et proba

Posté par
flight
17-08-24 à 21:27

Bonjour

je vous propose l'exercice  suivant :

la côte de la surface d'un bassin supposé très profond est initialement fixée au niveau 0 .  cette côte monte et descend systématiquement selon cette règle :

montée du niveau :
avec une probabilité de 4/7 le bassin monte de 50 cm , sinon avec la probabilité contraire , il monte de 20 cm.

descente du niveau :
avec une probabilité de 7/9  le bassin descend de 30 cm , sinon avec la probabilité contraire il descend 15 cm.

on convient qu'a l'étape 0 , le niveau h =0 .
Quelle est la probabilité qu'a l'étape 2 le niveau du bassin depuis la référence 0 soit de +40 ?

Posté par
verdurin
re : Bassin et proba 17-08-24 à 23:50

Bonne nuit,
je dirais 832/3969, mais je ne suis pas certain d'avoir compris l'énoncé.

Posté par
flight
re : Bassin et proba 18-08-24 à 01:38

Bonjour Verdurin ..ce n'est pas tout à fait ca pour le résultat obtenu ...
initialement admet que le plan d'eau est au niveau 0 cm (h=0) à l'étape e=0 .  par la suite le bassin monte et descend et se mouvement se répète  indéfiniment avec la règle énoncée précédement , à savoir :
montée du niveau :
avec une probabilité de 4/7 le bassin monte de 50 cm , sinon avec la probabilité contraire , il monte de 20 cm.

descente du niveau :
avec une probabilité de 7/9  le bassin descend de 30 cm , sinon avec la probabilité contraire il descend 15 cm.

Posté par
dpi
re : Bassin et proba 18-08-24 à 09:04

Bonjour,
J'ai fait une péréquation...

 Cliquez pour afficher

Posté par
candide2
re : Bassin et proba 18-08-24 à 10:05

 Cliquez pour afficher

Posté par
flight
re : Bassin et proba 18-08-24 à 14:12

Bonjour candide2 , le niveau monte et atteint sa côte puis redescent

Posté par
candide2
re : Bassin et proba 18-08-24 à 19:12

 Cliquez pour afficher

Posté par
flight
re : Bassin et proba 18-08-24 à 20:45

ont est daccord

Posté par
flight
re : Bassin et proba 18-08-24 à 20:46

@dpi , ta valeur est trop élevée

Posté par
dpi
re : Bassin et proba 19-08-24 à 08:55

J'ai du faire une erreur .
Mon raisonnement:
Pour tomber exactement sur +40 en deux temps,je ne vois que 3 séquences:

1)    +50-20 puis +50-20
2)    +50-15  puis +20-15
3)    +20-15 puis +50-15

Posté par
LittleFox
re : Bassin et proba 19-08-24 à 14:36

Je me demande bien quel cas tu as oublié candide2?

J'ai les mêmes 3 cas que dpi (à une typo près).
Et j'obtiens comme les autres 880/3969 ~= 0.2217

Posté par
dpi
re : Bassin et proba 19-08-24 à 16:56

>Littlefox ...vu le typo

Posté par
candide2
re : Bassin et proba 19-08-24 à 17:28

Les 3 cas sont :

1)    +50-30 puis +50-30  avec proba = (4/7 * 7/9) * (4/7 * 7/9)
2)    +50-15  puis +20-15 avec proba = (4/7 * 2/9) * (3/7 * 2/9)
3)    +20-15 puis +50-15 avec proba =  (3/7 * 2/9) * (4/7 * 2/9)

La proba totale est :  
(4/7 * 7/9) * (4/7 * 7/9) + (4/7 * 2/9) * (3/7 * 2/9) + (3/7 * 2/9) * (4/7 * 2/9)   = 1164240/5250987 = 0,2217183...

Dans ma première réponse, je n'avais pris en compte que le cas 1 et 2 ...

On peut bien entendu simplifier 1164240/5250987 en  880/3969

Posté par
flight
re : Bassin et proba 19-08-24 à 17:53

Bonjour
en programmation sauf erreur on a  :

Function Pr(h As Integer, k As Integer) As Double
  If h = 0 And k = 0 Then
     Pr = 1
       ElseIf (h <> 0 And k = 0) Then
         Pr = 0
           Else
             Pr = Pr(h + 10, k - 1) * (21 / 63) + Pr(h - 20, k - 1) * (28 / 63) + Pr(h - 35, k - 1) * (8 / 63) + Pr(h - 5, k - 1) * (6 / 63)
  End If
End Function

Sub TEST()
MsgBox Pr(40, 2) 'retourne 0,2217
End Sub

Posté par
LittleFox
re : Bassin et proba 20-08-24 à 10:07

Ça m'a l'air correct mais terriblement inefficace
On a 4 appels récursifs pour chaque k. On a donc un algo en O(4^n).
Si on augmente k, il va vite avoir du mal

Voici un code qui construit l'ensemble des possibilités après chaque étape:

from collections import defaultdict


def solve(steps=2, up=((50, 4), (20, 3)), down=((30, 7), (15, 2))):
    positions = {0: 1}
    for _ in range(steps):
        # Up
        new_positions = defaultdict(int)
        for pos, prob in positions.items():
            for u, prob_u in up:
                new_positions[pos + u] += prob_u * prob
        positions = new_positions
        # Down
        new_positions = defaultdict(int)
        for pos, prob in positions.items():
            for d, prob_d in down:
                new_positions[pos - d] += prob_d * prob
        positions = new_positions
    return positions


def main():
    solution = solve()
    print(solution)  # defaultdict(<class 'int'>, {40: 880, 55: 448, 10: 1212, 25: 672, 70: 64, -20: 441, -5: 252})
    print(solution[40] / sum(solution.values()))  # 0.2217183169564122


if __name__ == '__main__':
    main()


Il peut sans problème calculer la distribution de probabilité jusqu'à 100 étapes et au delà.



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !