Étudier les mathématiques avec Python: résoudre des problèmes simples de probabilité

probabilité

Il y a un problème qu'il n'est pas lié à Python, Définissez les paramètres pour que vous soyez satisfait de l'ordinateur et résolvez.

(Q1)

Le joueur a sorti l'une des 52 cartes à jouer à l'exclusion du joker et l'a placée face cachée. Lorsque le croupier a choisi au hasard 3 feuilles de la pile restante et les a tournées vers l'avant, elles étaient toutes des diamants.

  1. Une personne du fabricant du Trump est venue et m'a dit que le Trump que j'utilise actuellement est un produit défectueux avec un duplicata A du diamant au lieu du A du cœur. Trouvez la probabilité que la première carte que vous avez extraite soit un diamant.
  2. À titre d'information supplémentaire, il a été constaté que le concessionnaire avait attaché une arme à feu et extrait intentionnellement uniquement le diamant. Trouvez la probabilité que la première carte que vous avez extraite soit un diamant.

(Solution)

  1. Problème de probabilité conditionnelle.
P_0 = sym.Rational(1, 4)
P_0dia = sym.Rational(13*12*11, 51*50*49)
P_dia = sym.Rational(14*13*12, 52*51*50)
P_0 * P_0dia / P_dia
\frac{143}{686}
  1. \frac{7}{26}

(Q2)

Il y a une loterie avec une probabilité de gain de $ p $. Si tous les habitants de la terre tirent beaucoup une fois, la probabilité de tout perdre sera de 0,5 ou plus. Combien doit être $ p $? La population de la terre est de 7,2 milliards.

(Solution) Approximative avec la distribution de Poisson.

N = 7200000000
F = sym.exp(-p*N) - 0.5
sym.solve([F], [p])
p < 9.627 \cdot 10^{-11}

À propos, si vous essayez autant, la distribution normale sera environ 7 fois l'écart type. Dans la distribution de Pareto, il n'est pas étrange que des valeurs séparées par plus de 100 millions de fois apparaissent.

(Q3)

  1. Il y a 12 boules rouges et 8 boules noires dans le pot. Trouvez la probabilité que vous ayez 2 boules rouges lorsque vous en retirez 3.
  2. Essayez de retirer $ 3 \ cdot 10 ^ {24} $ boules rouges et $ 2 \ cdot 10 ^ {24} $ boules noires. Trouvez la probabilité que le nombre de boules rouges retirées soit de 2 $ \ cdot 10 ^ {24} $.
  3. En essayant (2), soit $ x $ la valeur absolue de la différence entre le nombre de boules rouges retirées et $ 2 \ cdot 10 ^ {24} $. Si la probabilité que le résultat soit inférieur à $ x $ est $ P_x $, combien vaut $ x $ pour $ P_x> 0,5 $?

(Solution)

  1. C'est ce qu'on appelle une distribution hypergéométrique.
import sympy as sym
A = sym.functions.combinatorial.numbers.nC(12, 2)
B = sym.functions.combinatorial.numbers.nC(8, 1)
C = sym.functions.combinatorial.numbers.nC(20, 3)
A*B/C
\frac{44}{95}
  1. Le nombre proche du nombre d'avocadro a été fixé. Problèmes de dynamique statistique. De la définition de la distribution supergéométrique $ \begin{eqnarray} P &=& \frac{C(4 \cdot 10^{24}, 2 \cdot 10^{24}) \cdot C(2 \cdot 10^{24}, 10^{24})}{C(6 \cdot 10^{24}, 3 \cdot 10^{24})} \\\\ &=& \frac{(4 \cdot 10^{24})!{(3 \cdot 10^{24})!}^2}{(6 \cdot 10^{24})!(2 \cdot 10^{24})!{(10^{24})!}^2} \end{eqnarray}$ Utilisez l'approximation de $ \ log (n!) \ Eqsim n \ log n -n + \ frac {1} {2} \ cdot \ log (2 \ pin) $.
log_n = n * sym.log(n) - n + sym.log(2 * Pi * n) / 2
A1 = log_n.subs([(n, 4*10**24)])
A2 = log_n.subs([(n, 3*10**24)])
B1 = log_n.subs([(n, 6*10**24)])
B2 = log_n.subs([(n, 2*10**24)])
B3 = log_n.subs([(n, 1*10**24)])
Log_P = A1 + 2 * A2 - B1 - B2 - 2 * B3
sym.N(Log_P, 10)

−28.0006535 $\therefore P \simeq e^{-28} \simeq 6.9144 \cdot 10^{-13}$ 3. Le nombre de boules rouges $ X $ est approximé par la distribution binomiale $ B (3 * 10 ^ {24}, 2/3) . En outre approché par une distribution normale, $Y = \frac{X-2\cdot 10^{24}}{\sqrt{3 \cdot 10^{24}\cdot 2/3 \cdot 1/3}}\\ = \sqrt{\frac{3}{2}} \frac{X-2 \cdot 10^{24} }{10^{12}}$$ $ Y $ suit une distribution normale standard. La densité cumulée dépasse 0,5 par rapport à la table de distribution normale standard -0.68 X=2 \cdot 10^{24} \pm 0.68 \cdot \sqrt{\frac{2}{3}} 10^{12} x \simeq 5.55 \cdot 10^{11}

(Q4)

koushi.png

Considérez une marche aléatoire qui commence à partir de la partie centrale jaune de la grille triangulaire sur la figure et se déplace vers la grille adjacente avec une probabilité égale toutes les secondes. Soit $ P_t $ la probabilité d'être au centre après $ t $ secondes.

  1. Trouvez $ P_ {10} $.
  2. Trouvez $ \ lim_ {n \ to \ infty} P_n $.

(Solution)

  1. Par symétrie, si la probabilité d'être en chaque point à la distance 1 est $ Q_t $ et la probabilité d'être en chaque point à la distance 2 est $ R_t . $P_t+6Q_t+3R_t=1$$
N = 1
P = 0
Q = sym.Rational(1, 6)
R = 0
Pn = sym.Rational(3, 2) * q
Qn = p/6 + q/2 + r/2
Rn = q/2
while N < 10:
    N += 1
    Ptemp = Pn.subs([(q, Q)])
    Qtemp = Qn.subs([(p, P), (q, Q), (r, R)])
    Rtemp = Rn.subs([(q, Q)])
    P = Ptemp
    Q = Qtemp
    R = Rtemp
print(N)
print(P)
print(Q)
print(R)

10 171/1024 341/3072 57/1024 2.

F1 = sym.Rational(3, 2) * q - p
F2 = p/6 + q/2 + r/2 - q
F3 = q/2 - r
Ft = p + 6*q + 3*r - 1
sym.solve([F1, F2, F3, Ft], [p, q, r])
\\left \\{ p : \\frac{1}{6}, \\quad q : \\frac{1}{9}, \\quad r : \\frac{1}{18}\\right \\}

(Q5)

Supposons que $ n $ nombres aléatoires uniformes compris entre 0 et 65535 soient générés.

  1. Trouvez la valeur de $ n $ qui a une probabilité de contenir le même nombre aléatoire supérieur à 0,5.
  2. Trouvez la valeur de $ n $ qui a une probabilité de contenir 3 ou plus des mêmes nombres aléatoires supérieurs à 0,5.

(Solution)

  1. C'est une attaque d'anniversaire.
def birthday(N, K):
    return sym.functions.combinatorial.numbers.nP(N, K)/N**K
N = 65536
K = 255 #Vous pouvez partir de la racine carrée
P = 0.0
while P <= 0.5:
    K += 1
    P = 1 - birthday(N, K)
print(K)
sym.N(P, 10)

302 0.5007224895 2. Une combinaison dans laquelle deux nombres aléatoires identiques sont inclus dans un nombre aléatoire $ K $ d'espèces $ N $

\sum_{k=1}^{K/2} C(N-k,k)P(N,K-k)

La partie frontière de $ K / 2 $ n'a pas beaucoup d'effet, alors ajoutez-la sans vous en soucier.

def birthday2(N, K, P1):
    return (sym.functions.combinatorial.numbers.nP(N,K) + P1) / N**K
def P1(N,K,X):
    return sym.functions.combinatorial.numbers.nC(N-X,X)*sym.functions.combinatorial.numbers.nP(N,K-X)
N = 65536
K = 300
P = 0.0
while P <= 0.5:
    K += 1
    L = 1
    SUM = 0
    while L <= K/2:
        SUM += P1(N, K, L)
        L += 1
    P = 1 - birthday2(N, K, SUM)
print(K)
sym.N(P, 10)

473 0.5035181768

Recommended Posts

Étudier les mathématiques avec Python: résoudre des problèmes simples de probabilité
GRPC simple en Python
Combiner des problèmes en Python
○○ Résolution de problèmes dans le département de mathématiques avec optimisation
Analyse de régression simple avec Python
Résoudre les problèmes d'optimisation avec Python
Client IRC simple avec python
Examen du centre 2015 Math IIB Résolution avec Python
Première analyse de régression simple en Python
OAuth 2 simple avec Python (urllib + oauthlib)
Implémentation d'un algorithme simple en Python 2
Exécutez un algorithme simple en Python
Logique gacha simple écrite en Python
Étudier Python
Un client HTTP simple implémenté en Python
Essayez de dessiner une animation simple en Python
Créer une application GUI simple en Python
Probabilité de transition de la chaîne de Markov écrite en Python
Points à noter lors de la résolution de problèmes DP avec Python
Ecrire une méthode de cupidité simple en Python
Ecrire un plugin Vim simple en Python 3
Obtenez la probabilité de précipitation de XML avec Python
Configurer un serveur HTTPS simple avec Python 3
Distribution de probabilité de niveau 2 du test statistique apprise en Python ②
Notes de programme simples Pub / Sub en Python
Notes pour la mise en œuvre d'un co-filtrage simple en Python
Créer un modèle d'investissement dynamique simple en Python
Résolution d'équations de mouvement en Python (odeint)
Configurer un serveur SMTP simple en Python
Distribution de probabilité de test statistique de niveau 2 apprise en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
[Python] Commencez à étudier
Programmation avec Python
Plink en Python
Constante en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.