DS Info – ECG 2 (2023–2024)
A. BENADDI
Lycée Kléber
La correction se trouve à la fin du sujet.
Pour tout le DS, nous importerons les librairies :
Exercice 1
Soit \((u_n)_n\) une suite convergente définie par :
-
Écrire une fonction Python
uqui prend en argument un entier naturel \(n\) non nul et qui renvoie la valeur de \(u_n\). -
On admet que
En utilisant la fonction u, écrire un programme en Python pour qu’il donne en sortie la valeur approchée de la limite de la suite \((u_n)\) à \(\varepsilon\) près, où \(\varepsilon\) est un réel assez petit, donné par l’utilisateur.
Exercice 2
On pose :
La matrice \(A\) est inversible et
On note \(\alpha\) la plus grande valeur propre de \(A\), telle que \(4 < \alpha < 5\), solution de l’équation \(g(x)=1\).
Recopier et compléter les lignes incomplètes de la fonction Python afin qu’elle renvoie une valeur approchée de \(\alpha\) à \(10^{-3}\) près à l’aide de la méthode de dichotomie.
Exercice 3
Dans cet exercice, toutes les variables aléatoires sont supposées définies sur un même espace probabilisé \((\Omega, \mathcal{A}, \mathbb{P})\).
On considère une urne contenant initialement une boule bleue et une boule rouge. On procède à des tirages successifs d’une boule au hasard selon le protocole suivant :
- si on obtient une boule bleue, on la remet dans l’urne et on ajoute une boule bleue supplémentaire ;
- si on obtient une boule rouge, on ne la remet pas dans l’urne et on arrête l’expérience.
On suppose que toutes les boules sont indiscernables au toucher et on admet que l’expérience s’arrête avec une probabilité égale à \(1\).
On note \(N\) la variable aléatoire égale au nombre de boules présentes dans l’urne à la fin de l’expérience.
a)
On montre que :
et que la variable aléatoire \(N\) n’admet pas d’espérance.
Écrire une fonction Python d’entête def simuleN(): de façon à ce qu’elle renvoie une simulation de la variable aléatoire \(N\).
On considère une suite \((X_n)_{n \in \mathbb{N}}\) de variables aléatoires indépendantes et de même loi. On suppose que, pour tout \(n \in \mathbb{N}^*\), les variables aléatoires \(X_1, \ldots, X_n\) et \(N\) sont mutuellement indépendantes.
On définit la variable aléatoire
ce qui signifie :
Ainsi par exemple :
- si \(N\) prend la valeur \(3\), alors \(T = \max(X_1, X_2, X_3)\) ;
- si \(N\) prend la valeur \(5\), alors \(T = \max(X_1, X_2, X_3, X_4, X_5)\) ; etc.
On suppose que, pour tout \(n \in \mathbb{N}\), la variable aléatoire \(X_n\) suit la loi uniforme sur \([0,1]\).
On rappelle que l’instruction rd.random() renvoie une matrice \(1 \times 1\) dont les coefficients sont des réalisations de variables aléatoires indépendantes suivant la loi uniforme sur \([0,1]\).
b)
Écrire une fonction Python d’entête def simuleT(): qui renvoie une simulation de la variable aléatoire \(T\).
c)
En notant \((T_1, \ldots, T_m)\) un échantillon de la v.a.r. \(T\). Compléter la fonction d’entête def EML(m) qui renvoie un vecteur ligne à 3 coordonnées contenant chacune une simulation de la moyenne (espérance)
def EML(m):
E = np.zeros(...)
for k in ...:
echantillon = ...
for i in ...:
...
... # Le prof n'a pas mis de pointillés ici sur le sujet mais
# il ajoute une ligne dans la correction donc je les ajoute ici.
return E
Exercice 4 — Une application probabiliste de la formule sommatoire de Poisson
Soit \(p\) un réel vérifiant \(0 < p < 1\).
Deux joueurs \(A\) et \(B\) lancent tour à tour une pièce de monnaie.
Le jet de la pièce donne « Pile » avec la probabilité \(p\) et « Face » avec la probabilité \(1-p\).
Le vainqueur de la partie est le joueur qui obtient « Pile » le premier, auquel cas la partie s’arrête.
Le premier lancer (de rang 1) est effectué par le joueur \(A\).
Si la partie ne s’arrête pas, les trois lancers suivants (de rangs 2, 3 et 4) sont effectués par le joueur \(B\), les suivants (de rangs 5, 6, 7, 8 et 9) par le joueur \(A\), et ainsi de suite.
Après chaque changement de main, le joueur qui reprend la main ne peut ainsi effectuer (au maximum) que deux lancers de plus que ceux que vient d’effectuer l’autre joueur.
On suppose que les résultats des lancers successifs sont indépendants.
On écrit la fonction Python incomplète suivante :
def jeu(p):
i, v = 1, 1
s, j = 1, 1
while ...:
i = ...
j = ...
if j > s: # changement de main
v=-v
s = ...
j = ...
if v == 1:
vainqueur = 'A vainqueur'
else:
vainqueur = 'B vainqueur'
return vainqueur
- Compléter la fonction Python ci-dessus qui simule une partie effectuée selon les règles précédentes et affiche le vainqueur.
- Que représente la valeur de
iaprès l’exécution de la fonctionjeu? - Préciser la signification de la variable
v. - Compléter le code de la fonction
jeupour qu’elle affiche le nombre de lancers effectués par le joueur \(A\). - Écrire un code Python permettant d’obtenir une valeur approchée de la probabilité que le vainqueur du jeu soit le joueur \(A\). On admet qu’une valeur approchée de la probabilité d’un événement \(A\) est la fréquence sur un grand nombre de simulations. On prendra dans le programme le nombre de simulations égal à \(100000\).
Correction DS Info — ECG2
Pour tout le DS, nous importons les librairies :
Exercice 1 — 4 points
Question 1 — 2 points
Question 2 — 2 points
epsilon = float(input('Donner un réel positif assez petit eps = '))
n = 1
while 1/n > 2*epsilon:
n = n + 1
print('La valeur approchée de gamma est ', suiteu(n))
Exercice 2 — 4 points
def valeur_approchee():
x, y = 4, 5
while abs(x - y) > 0.0001:
m = (x + y) / 2
if (1/(m+1) + 1/(m-1) + 1/(m-2) - 1) * (1/(x+1) + 1/(x-1) + 1/(x-2) - 1) < 0:
y = m
else:
x = m
alpha = m
return alpha
Exercice 3 — 6 points
Question a — 2 points
def simuleN():
b = 1 # b désigne le nombre de boules bleues dans l’urne
N = 2
while rd.random() < b/(b+1):
b = b + 1
N = N + 1
return N
Question b — 2 points
Question c — 2 points
def EML(m):
E = np.zeros(3)
for k in range(3):
echantillon = np.zeros(m)
for i in range(m):
echantillon[i] = simuleT()
E[k] = np.mean(echantillon)
return E
Exercice 4 — 6 points
Question 1 — 1,5 points
def jeu(p):
i = 1
v = 1
s, j = 1, 1
while rd.random() > p:
i = i + 1
j = j + 1
if j > s:
v = -v # changement de main
s = s + 2
j = 1
if v == 1:
vainqueur = 'A vainqueur'
else:
vainqueur = 'B vainqueur'
return vainqueur
Question 2 — 0,5 point
i représente le nombre de lancers effectués depuis le début de la partie jusqu’à ce que le jeu s’arrête.
Question 3 — 0,5 point
La variable v permet un changement de joueur au cours du jeu, donc permet de déterminer le vainqueur de la partie.
- si
v = 1, le vainqueur est \(A\) ; - si
v = -1, le vainqueur est \(B\).
Question 4 — 1,5 points
def jeu_nb_A(p):
i = 1
v = 1
s, j = 1, 1
nb_lancers_A = 1 # initialisation
while rd.random() > p:
i = i + 1
j = j + 1
if j > s:
v = -v # changement de main
s = s + 2
j = 1
if v == 1:
nb_lancers_A = nb_lancers_A + 1
if v == 1:
vainqueur = 'A vainqueur'
else:
vainqueur = 'B vainqueur'
return vainqueur, nb_lancers_A