Académique Documents
Professionnel Documents
Culture Documents
On note I = [t0 , t0 + T] l'intervalle de résolution. Pour un nombre de nœuds N donné, soit tn = to + n.h, avec
n = 0, 1, 2, ..., N, une suite de nœuds de 1 induisant une discrétisation de 1 en sous-intervalles In = [tn, tn+1].
La longueur h de ces sous-intervalles est appelée pas de discrétisation, le pas h de discrétisation est donné
𝐓
par 𝒉 = . Soit yj l'approximation au nœud tj de la solution exacte y(tj). Les méthodes de résolution
𝑵
𝒚𝒏+𝟏 = 𝒚𝒏 + 𝒉𝚽(𝒕𝒏 , 𝒚𝒏 , 𝒉)
{
𝒕𝒏+𝟏 = 𝒕𝐧 + 𝒉
Avec:
𝜱(𝒕, 𝒚, 𝒉) = 𝜶𝒇(𝒕, 𝒚) + 𝜷𝒇(𝒕 + 𝒉, 𝒚 + 𝒉𝒇(𝒕, 𝒚));
où 𝜶, 𝜷sont des constantes comprises entre 0 et 1.
Question 1:
Pour quelles valeurs du couple (𝜶, 𝜷) retrouve-t-on la méthode d'Euler?
Dans la suite on considère une deuxième méthode dite de Heun, cette méthode correspond
𝟏 𝟏
aux valeurs du couple (𝜶, 𝜷) = ( , )
𝟐 𝟐
Question 2:
Écrire une fonction de prototype def Henn(f, t0,y0, T,N) : qui prend en paramètres la fonction
𝐟 ∶ (𝐭, 𝐲) → 𝒇(𝐭, 𝐲) . la condition initiale t0, y0 la valeur de f en t0 le nombre de nœuds N et la
valeur final du temps T et qui retourne deux listes tt = [t0, tl, .. , tN] et yh = [y0, y1, ... , yn] donné
par le schéma:
𝒚𝒏+𝟏 = 𝒚𝒏 + 𝒉𝚽(𝒕𝒏 , 𝒚𝒏 , 𝒉)
{
𝒕𝒏+𝟏 = 𝒕𝐧 + 𝒉
Avec:
𝟏 𝟏
𝜱(𝒕, 𝒚, 𝒉) = 𝒇(𝒕, 𝒚) + 𝒇(𝒕 + 𝒉, 𝒚 + 𝒉𝒇(𝒕, 𝒚));
𝟐 𝟐
Remarque: La valeur retournée par la fonction Heun pourra être un couple constitué de deux
listes, un tableau constitué de deux listes (par exemple un type array du module numpy) ou
toute autre structure de données constitué de deux listes.
(1)
Question3:
Écrire une fonction de prototype def Euler(f, t0, T, y0 , N) : qui prend en paramètres la
fonction 𝐟 ∶ (𝐭, 𝐲) → 𝒇(𝐭, 𝐲), la condition initiale t0, la valeur de f en t0, le nombre de nœuds N
et la valeur final du temps T et qui retourne deux listes tt = [t0, tl, .. , tN] et yh = [y0, y1, ... , yn]
donné par le schéma le schéma d'Euler permettant de résoudre des équations différentielles
du premier ordre.
Question 4:
Donner la complexité de la fonction d'Euler en expliquant le descriptif du calcul.
On considère les valeurs suivantes: y(t) = Ul(t) et z(t) = 𝑼̇I(t) . L'équation différentielle (1) est
du second ordre.
Question5:
Définissez un système de deux équations différentielles du premier ordre qui puisse satisfaire
l'équation (1).
En posant Y(t) = [Ul(t), 𝑼̇I(t)], montrez que l'équation (1) peut s'écrire sous la forme:
𝐘′(𝒕) = 𝑭(𝒕, 𝒀(𝒕)) (II)
avec 𝐅 ∶ (𝐭, 𝐗) → 𝑭(𝐭, 𝐗), est une fonction à préciser (X = [ X[0J , X[l] ]).
Question 7:
Implémenter en Python l'équation différentielle (II) en utilisant la fonction odeint() du
module scipy.integrate, la méthode d'Euler et celle de Heun. On affichera dans une même
fenêtre le résultat de ses trois méthodes avec les valeurs suivantes:
N = 1000, t0 = 0, T = 3, Ul(0) = 0 et 𝑼̇I (0) = 0. Voir les résultats sur la figure 1 se trouvant dans
l'annexe du document.
La compression de HUFFMAN
La compression de Huffman est une méthode de compression de données sans perte proposé par « David
Huffman » en 1952. C’est un processus qui permet de compresser des données informatiques afin de libérer
de la place dans la mémoire d'un ordinateur. Or tout fichier informatique (qu'il s'agisse d'un fichier texte,
d'une image ou d'une musique …) est formé d'une suite de caractères. Chacun de ces caractères étant lui-
même code par une suite de 0 et de 1. L'idée du codage de Huffman est de repérer les caractères les plus
fréquents et de leur attribuer des codes courts (c'est-a-dire nécessitant moins de 0 et de 1) alors que les
caractères les moins fréquents auront des codes longs. Pour déterminer le code de chaque caractère on
utilise un arbre binaire. Cet arbre est également utilisé pour le décodage.
Dans cette partie, on s’intéressera à appliquer la compression de Huffman pour compresser une liste de
nombres entiers, contenant des éléments en répétition.
Exemple : L = [12,29,55,29,31,8,12,46,29,8,12,29,31,29,8,29,8]
NB : Dans toute cette partie, on suppose que la liste L contient au moins deux éléments différents.
II. 2- c) La méthode dite de Horner (William George Horner : 1786-1837) est une méthode très
pratique, utilisée pour améliorer le calcule de la valeur d’un polynôme, en réduisant le nombre de
multiplications.
Soit le polynôme P à coefficients réels suivant :
P(x) = an*xn + an-1*xn-1 + … + a2*x2 + a1*x + a0
Pour calculer P(k), la méthode de Horner effectue le calcul comme suit :
P(k) = (( … ((an*k+an-1)*k+an-2)*k+ … +a2)*k+a1)*k+a0
En utilisant le principe de la méthode de Horner, écrire la fonction de complexité linéaire : entier(B),
qui reçoit en paramètre une chaine de caractères B contenant la représentation binaire d’un entier
naturel, dont le premier bit est celui du poids le plus faible, et qui calcule et retourne la valeur décimale
de cet entier.
0 1 2 3 4
Exemple : entier ("11101") retourne le nombre entier : 23 (23 = 1*2 + 1*2 + 1*2 + 0*2 + 1*2 )
Exemple :
L’arbre binaire suivant, sera représenté par la liste :
A = [24,[17,[],[]],[9,[12,[],[]],[]]]
L’arbre binaire de Huffman est crée à partir de la liste des fréquences, selon le procédé suivant :
Trier la liste des fréquences dans l’ordre croissant des occurrences ;
Tant que la liste des fréquences contient au moins deux éléments, on répète les opérations :
•
ème
Retirer les deux premiers éléments dont les poids (2 élément de chaque tuple) sont les plus
faibles, et créer un tuple dont le poids est la somme des poids de ces deux éléments ;
• Insérer le tuple obtenu dans la liste des fréquences, de façon à ce qu’elle reste croissante.
Les feuilles de l’arbre binaire obtenu sont les différents éléments de la liste à compresser.
1ère étape A
F = [ (46, 1), (55, 1), (31, 2), (12, 3), (8, 4), (29, 6) ]
Retirer : (46, 1) et (55, 1)
Insérer le tuple (A , 2) dans la liste F
La liste F triée devient :
F = [ (31, 2), (A , 2), (12, 3), (8, 4), (29, 6) ]
A
2ème étape
F = [ (31 , 2), (A , 2), (12, 3), (8, 4), (29, 6) ]
Retirer : (31 , 2) et (A , 2)
Insérer le tuple (A , 4) dans la liste F
La liste F triée devient :
F = [ (12, 3), (8, 4), (A , 4), (29, 6) ]
3ème étape B
F = [ (12, 3), (8, 4), (A , 4), (29, 6) ]
Retirer : (12 , 3) et (8 , 4)
Insérer le tuple (B , 7) dans la liste F
La liste Ftriée devient :
F = [ (A, 4), (29, 6), (B , 7) ]
4ème étape
F = [ (A, 4), (29, 6), (B , 7) ]
Retirer : (A , 4) et (29 , 6)
Insérer le tuple (A , 10) dans la liste F
La liste F triée devient :
F = [ (B , 7), (A , 10) ]
A
ème
5 étape
F = [ (B , 7), (A , 10) ]
Retirer : (B , 7 ) et (A , 10)
Insérer le tuple (A , 17) dans la liste F
La liste F triée devient :
F = [ (A , 17) ]
II. 5- b) Écrire la fonction : arbre_Huffman(F), qui reçoit en paramètre la liste des fréquences F,
composée des tuples formés des différents éléments de la liste à compresser, et de leurs occurrences.
La fonction retourne un arbre binaire de Huffman, crée selon le principe décrit ci-dessus.
Feuilles Codes
12 "00"
8 "01"
31 "100"
46 "1010"
55 "1011"
29 "11"