Informatique TD 4

publicité
Informatique TD 4
1
Remettre un compte rendu à la fin de la séance
A. Équation différentielle d’ordre 2
Remarques générales
On utilisera pour les fonctions usuelles et les représentations graphiques, le module pylab de la bibliothèque matplotlib.
On commencera par l’instruction from pylab import *.
Pour les représentations graphiques, on utilisera les commandes :
• xlim(xmin,xmax) et ylim(ymin,ymax) qui déterminent les intervalles de représentation pour les abscisses et les
ordonnées.
• grid() pour créer une grille de fond sur la figure.
• x=linspace(a,b,n), qui crée un tableau à une dimension, ayant n éléments et allant de la valeur de départ a à la
valeur finale b.
• y=f(x) qui crée le tableau image du précédent par la fonction f.
• plot(x,y) qui permet de tracer la courbe d’équation y=f(x) à partir des tableaux précédents.
• show() pour ouvrir une fenêtre et afficher l’image créée.
• close() pour effacer dans la fenêtre l’image précédente.
On s’intéresse dans cet exercice au problème de Cauchy :
(
∀t ∈ I, y 00 (t) + 2 y 0 (t) + 65 y(t) = 65 t + 2
y(0) = 4 et y 0 (0) = − 3
1. Méthode mathématique
Résoudre mathématiquement cette équation différentielle. On cherchera une solution particulière " évidente ".
Représenter la solution sur [0, 2 π].
2. Méthode d’Euler explicite à 2 pas
La méthode d’Euler explicite à 2 pas permet de définir une suite récurrente (yn ) d’ordre 2 qui permet de représenter une
approximation de la solution exacte de l’équation différentielle ci-dessus.
On donne un pas de temps h > 0. On pose tn = n h.
Utiliser deux fois la méthode d’Euler explicite sur y 0 puis sur y 00 , avec le pas de temps h, pour déterminer yn+2 en
fonction de yn+1 , yn et h.
Utiliser la méthode d’Euler explicite sur y 0 , avec le pas de temps h, pour déterminer y1 en fonction de y(0), y 0 (0) et h.
Proposer une fonction qui a pour variable d’entrée le pas h et qui retourne les deux listes T = [t0 , t1 , t2 , . . .] et Y =
[y0 , y1 , y2 , . . .] sachant que t ∈ [0, 2 π].
Représenter la solution approchée et la solution exacte de l’équation différentielle sur un même graphique, en prenant
successivement h = 0.05, h = 0.01 et h = 0.001.
B. Récursivité
1. a. Écrire une fonction récursive qui prend en entrée un entier naturel n et retourne n!.
Déterminer la complexité de cet algorithme.
b. Dans l’algorithme ci-dessous, les commandes print permettent de voir le principe d’empilement et de dépilement
de la méthode récursive. Appliquer l’algorithme pour n = 6.
Informatique TD 4
2
def fact(n) :
if
n==0 :
print("Empilement : n=" + str(n) + ", fin de l’empilement")
return 1
else :
print("Empilement : n=" + str(n))
tmp = n*fact(n-1)
print("Depilement et calcul de tmp : n=" + str(n) + ", tmp est égal à " + str(tmp))
return tmp
2. Écrire une fonction récursive qui prend en entrée un entier naturel n et qui retourne la somme de ses chiffres dans son
écriture en base 10.
3. Écrire une fonction récursive qui prend en entrée une liste d’entiers et qui retourne le maximum de la liste.
(
4. On définit la suite de Fibonacci par :
u0 = 1,
u1 = 1
un+2 = un+1 + un
On se propose d’écrire une fonction d’entrée un entier naturel n et qui retourne le terme un de la suite de Fibonacci.
a. Écrire une première fonction fibo1 qui utilise une boucle. Déterminer la complexité de cet algorithme.
b. Écrire une seconde fonction fibo2 qui utilise la récursivité. Déterminer la complexité de cet algorithme.
c. On se propose d’écrire une troisième fonction fibo3, récursive également, qui prend en entrée n et qui retourne la
liste [un , un+1 ].
Il suffira alors de demander l’affichage de fibo3(n)[0] pour obtenir le résultat souhaité. Déterminer la complexité de
cet algorithme.
d. Comparer le temps d’exécution des trois fonctions quand on calcule u35 .
Pour cela on utilisera la commande time() du module time. On pourra utiliser la méthode suivante : on définit
une variable ayant pour nom temps par exemple, et on écrit tempsavant = time() avant l’ algorithme, puis tempsapres=time() après l’algorithme. La différence des deux valeurs donne le temps correspondant à l’algorithme.
Remarque. Pour vérification voici les premiers éléments de la suite de Fibonacci :
u0
u1
u2
u3
u4
u5
u6
u7
u8
u9
u10
u11
u12
1
1
2
3
5
8
13
21
34
55
89
144
233
5. Définir une fonction qui prend en entrée une chaîne de caractères et qui retourne True si la chaîne de caractères est un
palindrome et False sinon. On proposera une fonction itérative et une fonction récursive.
Que peut-on dire la complexité des algorithmes.
6. On se propose de déterminer le nombre de façons de construire une rangée de longueur n ∈ N∗ avec des briques de
longueur 2 et 3. Voici par exemple deux rangées de longueur 16 :
3
3
3
2
2
2
3
3
2
2
3
2
2
a. Calculer ce nombre de façons de construire une rangée de longueur 9.
b. Écrire une fonction récursive qui prend en entrée un entier naturel non nul et qui retourne le nombre de possibilités
pour réaliser une rangée de longueur n avec des briques de longueur 2 et 3.
Informatique TD 4
3
7. a. Justifier que, si on considère un couple d’entiers naturels non nuls (k, n), avec 1 6 k 6 n, on a la relation
n
k
=
n n−1
k k−1
b. Écrire une fonction récursive binom qui prend en entrée un couple d’entiers naturels (k, n), avec k 6 n, et qui
n
retourne le coefficient binomial
.
k
c. Représenter les 10 premières lignes du triangle de Pascal.
Téléchargement