Exercices pour maîtriser la définition et le calcul des suites avec Python.
⚠ Si l'algorithme est défini à l'aide d'une fonction, ouvrez la console Trinket pour exécuter et tester le code.
Question 1 :
Exécuter la fonction Python Devine(n)
pour différentes valeurs de $n$ (par exemple, $n=5, 10, 20$). Que remarquez-vous concernant les valeurs retournées lorsque $n$ augmente ?
def Devine(n):
u = 1
for k in range(n):
u = (1 + 1/(k + 1)) * u
return u
Devine(n)
pour qu'elle affiche à chaque étape de la boucle la valeur de k
et la valeur correspondante de u
. Cela vous aide-t-il à comprendre comment la valeur de retour est construite ?
Devine(n)
a-t-elle une limite lorsque $n$ tend vers l'infini ? Si oui, quelle est cette limite approximativement ? (Vous pouvez tester avec de très grandes valeurs de $n$, par exemple $n=1000$).
Question 1 :
Écrire un algorithme Python, sous forme d'une fonction SuiteU_n(n), qui prend en entrée un entier naturel 𝑛 et retourne le terme 𝑢𝑛 de la suite (𝑢𝑛) définie par :
$ \begin{cases} u_0 = \frac{1}{2} \\ u_{n+1} = \frac{2u_n}{1+u_n} \end{cases} $
Question 2 :
Calculer et afficher les 10 premiers termes de la suite $(u_n)$ en utilisant la fonction SuiteU_n(n)
. Observer l'évolution des valeurs de la suite. Que conjecturez-vous ?
Question 3 :
Modifier l'algorithme pour qu'il retourne non pas un terme unique, mais la liste des $n+1$ premiers termes de la suite, de $u_0$ à $u_n$.
Question 4 :
Tester votre algorithme modifié et vérifier la cohérence des premiers termes calculés.
Question 1 :
Calculer, à la main, les premières valeurs de la suite $(u_n)$ définie par $u_0 = 20$ et $u_{n+1} = 0.8 \times u_n + 50$. Quelles sont les valeurs de $u_0, u_1, u_2, u_3$ ?
Question 2 :
Utiliser la fonction Python Somme(u0, n)
pour calculer les sommes $S_5$, $S_{10}$ et $S_{15}$ pour la suite $(u_n)$ définie dans l'exemple, avec $u_0 = 20$. Comment la somme évolue-t-elle quand $n$ augmente ?
def Somme(u0, n):
U = u0
S = 0
for i in range (n + 1):
S = S + U
U = 0.8*U + 50
return S
Somme(u0, n)
pour qu'elle affiche à chaque étape de la boucle la valeur du terme courant U
et la somme cumulée S
. Que remarquez-vous de l'évolution de $U$ et $S$ ?
Proche(e)
pour déterminer le premier entier $N$ tel que $|U_N - 3| < e$ pour différentes valeurs de précision $e$ (par exemple, $e=0.1, 0.01, 0.001$). Comment l'indice $N$ varie-t-il avec la précision $e$ ?
def Proche(e):
N=0
U=2.5
while abs(U-3) >= e:
N = N+1
U= -U**2 + 5*U - 3
return N
Définition de la suite de Syracuse :
La suite de Syracuse est définie pour un entier de départ $u_0$ de la manière suivante :
- Si $u_n$ est impair, alors $u_{n+1} = 3u_n + 1$
Syracuse(debut)
pour vérifier vos calculs de la question 1 et afficher la suite complète jusqu'à la valeur 1.
def Syracuse(debut):
u = debut
L = [u]
n = 1
while u > 1:
if u != 2 * (u//2) :
u= 3 * u + 1
else :
u = u//2
L.append (u)
n = n + 1
return n , L
Syracuse(debut)
pour afficher à chaque étape si le terme suivant est calculé par la règle "paire" (division par 2) ou "impaire" (multiplication par 3 et ajout de 1).
Syracuse(debut)
avec d'autres valeurs de départ (par exemple, 27, 50, 100). Observer et commenter les temps de vol et altitudes maximales obtenus.
Question 1 :
En utilisant la fonction Syracuse(debut)
de l'exercice précédent, calculez et affichez la liste des termes de la suite de Syracuse pour debut = 15
. Observez les valeurs. La suite oscille-t-elle autour d'une valeur moyenne ?
Question 2 :
Écrire une nouvelle fonction Python, Syracuse_Moyenne(debut, nombre_termes)
, qui calcule et retourne la moyenne des nombre_termes
premiers termes de la suite de Syracuse, en partant de debut
.
Question 3 :
Tester la fonction Syracuse_Moyenne(debut, nombre_termes)
pour debut = 15
et différentes valeurs de nombre_termes
(par exemple, 10, 100, 1000). Comment la moyenne évolue-t-elle lorsque nombre_termes
augmente ? Converge-t-elle vers une valeur particulière ?
Question 4 (Plus difficile):
Modifier la fonction Syracuse_Moyenne(debut, nombre_termes)
pour qu'elle affiche aussi, à chaque étape, la moyenne cumulée des termes calculés jusqu'à présent. Cela vous aide-t-il à visualiser la convergence (ou non-convergence) de la moyenne ?
Question 1 :
La fonction Python dicho_croiss(a, b, p)
implémente la dichotomie pour trouver un zéro d'une fonction croissante. Exécutez-la avec la fonction $f(x) = x^3 + 2x^2 - 4x - 1$, sur l'intervalle $[1, 2]$ avec une précision $p=0.1$. Vérifiez que l'intervalle retourné contient bien une solution de $f(x)=0$.
def f(x):
return x**3 + 2 * x**2 - 4 * x - 1
def dicho_croiss(a, b, p):
while b - a > p:
m = (a + b) / 2
if f(m) == 0:
break
elif f(m) < 0:
a = m
else:
b = m
if f(m) == 0:
print(m,"est la solution recherchée")
else:
print("[" ,a, ";" ,b, "]")
dicho_croiss(a, b, p)
pour qu'elle affiche le nombre d'itérations nécessaires pour atteindre la précision $p$. Cela vous donne-t-il une idée de l'efficacité de la dichotomie ?
dicho_general(f, a, b, p, croissance)
, qui généralise la dichotomie pour fonctionner à la fois pour les fonctions croissantes et décroissantes. Le paramètre croissance
sera un booléen (True
pour croissante, False
pour décroissante).
dicho_general(f, a, b, p, croissance)
avec la fonction $f(x) = x^3 + 2x^2 - 4x - 1$ sur l'intervalle $[-1, 0]$, où elle est décroissante, avec une précision de $p=0.01$. N'oubliez pas de tenir compte que f est décroissante sur cet intervalle !
Question 1 :
Écrire une fonction Python dicho_decroiss(a, b, p)
qui utilise l'algorithme de dichotomie pour trouver un zéro d'une fonction $f$ strictement décroissante sur l'intervalle $[a, b]$, avec $f(a) > 0$ et $f(b) < 0$.
def f(x): # Définition de la fonction f(x) (à adapter selon l'exercice)
return x**3 + 2 * x**2 - 4 * x - 1
# Votre code pour la fonction dicho_decroiss ici
dicho_decroiss(a, b, p)
avec la fonction $f(x) = x^3 + 2x^2 - 4x - 1$ sur l'intervalle $[-1, 0]$ et une précision de $p=0.05$. L'intervalle trouvé est-il cohérent avec le comportement décroissant de $f$ et la recherche d'un zéro ?
dicho_croiss
avec celui de dicho_decroiss
. Quelles sont les principales différences ? Expliquez pourquoi ces modifications sont nécessaires pour adapter la dichotomie aux fonctions décroissantes.
Question 1 :
Utiliser la fonction binomiale(k, n, p)
pour calculer la probabilité d'obtenir exactement 3 succès en 10 épreuves, avec une probabilité de succès de 0.4 à chaque épreuve.
def binomiale(k, n, p):
from math import comb
return comb(n, k) * p**k * (1 - p)**(n - k)
binomiale
la probabilité d'obtenir exactement 0, 1, 2, 3, 4, et 5 faces. Afficher ces probabilités.
Question 1 :
Exécuter la fonction Python SuiteProd(n)
pour différentes valeurs de $n$. Observer comment les valeurs de la suite évoluent.
def SuiteProd(n):
u = 1
for i in range(1, n + 1):
u = u * (1 + 1/(i**2))
return u
SuiteProd(n)
pour afficher à chaque étape la valeur de i
et le terme courant u
.
SuiteProd(n)
semble-t-elle converger vers une limite finie lorsque $n$ augmente ? Estimez approximativement cette limite si elle existe.
Question 1 :
Calculer à la main les 5 premiers termes de la suite $(v_n)$ définie par $v_0 = 3$ et $v_{n+1} = (v_n + 5) \pmod{7}$.
Question 2 :
Écrire une fonction Python SuiteModulo(n)
qui retourne le $n$-ième terme de la suite $(v_n)$.
Question 3 :
Afficher les 20 premiers termes de la suite $(v_n)$. La suite semble-t-elle périodique ? Si oui, quelle est la période ?
Question 1 :
Écrire une fonction Python SommeGeo(u0, q, n)
qui calcule la somme des $n+1$ premiers termes d'une suite géométrique de premier terme $u_0$ et de raison $q$.
Question 2 :
Calculer avec SommeGeo
la somme des 10 premiers termes de la suite géométrique de premier terme $u_0 = 2$ et de raison $q = 0.5$.
Question 3 :
Comparer le résultat obtenu avec la formule théorique de la somme des termes d'une suite géométrique. La formule théorique est-elle vérifiée numériquement ?
Question 1 :
On considère la suite $(w_n)$ définie par $w_0 = 1$ et $w_{n+1} = w_n + \frac{1}{n+1}$ pour $n \ge 0$. Écrire une fonction Python SeuilSomme(seuil)
qui retourne le plus petit entier $N$ tel que la somme $W_N = \sum_{i=0}^{N} w_i$ dépasse un seuil
donné.
Question 2 :
Tester la fonction SeuilSomme(seuil)
pour différents seuils (par exemple, seuil=10, 50, 100
). Comment l'indice $N$ évolue-t-il avec le seuil ?
Question 3 :
Modifier la fonction SeuilSomme(seuil)
pour afficher également la valeur de la somme $W_N$ atteinte lorsque le seuil est dépassé.
Question 1 :
Modifier la fonction Syracuse(debut)
pour qu'elle retourne également l'altitude maximale atteinte par la suite, en plus du temps de vol et de la liste des termes.
Question 2 :
Tester la fonction modifiée pour différentes valeurs de départ (par exemple, 15, 27, 40). Observer et comparer les altitudes maximales atteintes.
Question 3 :
Pour un grand nombre de valeurs de départ (par exemple, de 1 à 1000), déterminer quelle valeur de départ produit l'altitude maximale la plus élevée.
Question 1 :
Définir une fonction Python $g(x) = \cos(x) - x$. Montrer graphiquement que la fonction $g(x)$ admet un zéro sur l'intervalle $[0, 1]$ et qu'elle est décroissante sur cet intervalle.
Question 2 :
Utiliser la fonction dicho_decroiss(a, b, p)
(que vous avez écrite précédemment) pour trouver une approximation du zéro de $g(x)$ sur $[0, 1]$ avec une précision de $p = 0.001$.
Question 3 :
Modifier la fonction dicho_decroiss
pour qu'elle retourne également le nombre d'itérations nécessaires pour atteindre la précision demandée.
Question 1 :
On considère la fonction $h(x) = x^2 + x$ sur l'intervalle $[0, 2]$. Montrer que $h(x)$ est croissante sur cet intervalle.
Question 2 :
Utiliser la dichotomie (fonction dicho_croiss
) pour trouver une approximation de la valeur $x$ dans $[0, 2]$ telle que $h(x) = 3$, avec une précision de $p = 0.01$. On cherche donc à inverser la fonction $h$ pour la valeur 3.
Question 3 :
Vérifier que la valeur approchée de $x$ trouvée satisfait bien $h(x) \approx 3$.
Question 1 :
Écrire une fonction Python Binomiale_cumulee(k, n, p)
qui calcule la probabilité cumulée $P(X \le k)$ pour une variable aléatoire binomiale $X \sim B(n, p)$, en utilisant une boucle et la fonction binomiale(i, n, p)
pour $i$ allant de 0 à $k$.
Question 2 :
Pour un jeu de pile ou face équilibré lancé 10 fois, calculer avec Binomiale_cumulee
la probabilité d'obtenir au plus 4 faces.
Question 3 :
Calculer également la probabilité $P(X > 4)$ pour le même exemple, en utilisant la probabilité complémentaire et la fonction Binomiale_cumulee
.
Question 1 :
Écrire une fonction Python SeuilBinomiale(prob_seuil, p)
qui détermine le nombre minimal d'épreuves $n$ nécessaires pour que la probabilité d'obtenir au moins un succès soit supérieure ou égale à une probabilité prob_seuil
donnée, pour une probabilité de succès $p$ à chaque épreuve.
Question 2 :
Tester la fonction SeuilBinomiale
pour une probabilité de succès $p = 0.1$ et un seuil de probabilité de 0.9. Combien d'épreuves faut-il au minimum ?
Question 3 :
Expliquez pourquoi la probabilité d'obtenir au moins un succès augmente avec le nombre d'épreuves $n$.
Question 1 :
Dans un processus de fabrication, 5% des pièces produites sont défectueuses. On prélève un échantillon aléatoire de 20 pièces. Quelle est la probabilité qu'il y ait exactement 2 pièces défectueuses dans l'échantillon ? Utiliser la fonction binomiale
.
Question 2 :
Quelle est la probabilité qu'il y ait au plus 2 pièces défectueuses dans l'échantillon ? Utiliser la fonction Binomiale_cumulee
.
Question 3 :
Quelle est la probabilité qu'il y ait plus de 2 pièces défectueuses dans l'échantillon ?