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 :
(tI, y00 (t)+2y0(t) + 65 y(t) = 65 t+ 2
y(0) = 4 et y0(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 y0puis sur y00 , avec le pas de temps h, pour déterminer yn+2 en
fonction de yn+1,ynet h.
Utiliser la méthode d’Euler explicite sur y0, avec le pas de temps h, pour déterminer y1en fonction de y(0),y0(0) et h.
Proposer une fonction qui a pour variable d’entrée le pas het 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 net 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 net 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 net qui retourne le terme unde 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 net 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 temp-
sapres=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 :
u0u1u2u3u4u5u6u7u8u9u10 u11 u12
1123 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 nNavec des briques de
longueur 2 et 3. Voici par exemple deux rangées de longueur 16 :
3 3 2 3 2 3
3 2 2 3 2 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 navec 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 16k6n, on a la relation
n
k=n
kn1
k1
b. Écrire une fonction récursive binom qui prend en entrée un couple d’entiers naturels (k, n), avec k6n, et qui
retourne le coefficient binomial n
k.
c. Représenter les 10 premières lignes du triangle de Pascal.
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !