Calcul Formel et Sciences de la Matière — Janvier 2010
Durée 3 heures — Documents et calculatrices interdits
Prenez le temps de lire ce sujet. Les questions sont indépendantes pour la plupart.
1
Matrices creuses (10 points)
Une matrice creuse est une matrice dont presque tous les éléments sont nuls. Pour gagner de la
place en mémoire et du temps de calcul, on utilise souvent une structure de données adaptée. Dans
les questions qui suivent, on représente une matrice creuse par une liste de triplets
M = [[`1 , c1 , v1 ], [`2 , c2 , v2 ], . . . , [`p , cp , vp ]].
Dans un un triplet [`i , ci , vi ], les entiers `i et ci sont des indices de ligne et de colonne. Le réel vi
est la valeur de l’élément de M , ligne `i et colonne ci . On ne stocke dans M que les valeurs vi non
nulles. Les triplets ne sont pas triés.
Question 1 [1 pt]. La liste suivante représente une matrice 4 × 4. Quelle matrice ?
M = [[1, 3, −2], [4, 4, −1], [4, 2, 13]].
Réponse :


0 0 −2 0
 0 0 0
0 


 0 0 0
0 
0 13 0 −1
Question 2 [2 pts]. Écrire une fonction mul_cste, paramétrée par une matrice creuse M et un
réel c et qui retourne la matrice creuse obtenue en multipliant tous les éléments de M par c. Attention au cas où c vaut zéro.
Réponse :
mul_cste := proc (M, c)
local R, i, triplet;
if c = 0 then
R := []
else
R := NULL;
for i from 1 to nops (M) do
triplet := M[i];
R := R, [triplet[1], triplet[2], c*triplet[3]]
od;
R := [ R ]
fi;
R
end:
1
Question 3 [2 pts]. Écrire une fonction nombre_de_lignes, paramétrée par une matrice creuse M
et qui retourne le maximum des indices de lignes `i .
Réponse :
# On suppose M non vide
nombre_de_lignes := proc (M)
local nb, i, triplet;
triplet := M[1];
nb := triplet[1];
for i from 2 to nops (M) do
triplet := M[i];
if triplet[1] > nb then
nb := triplet[1]
fi
od;
nb
end:
Question 4 [2 pts]. Écrire une fonction valeur, paramétrée par une matrice M , deux indices `, c
et qui retourne la valeur de l’élément de M , ligne ` et colonne c.
Donner de préférence une solution « élégante » qui utilise un while et qui évite de parcourir
toute la liste lorsque c’est inutile.
Réponse :
valeur := proc (M, l, c)
local v, i, triplet;
v := 0;
i := 1;
while i <= nops (M) and v = 0 do
triplet := M[i];
if triplet[1] = l and triplet[2] = c then
v := triplet[3]
fi;
i := i+1
od;
v
end:
Question 5 [3 pts]. Donner une spécification de la fonction de la Figure 1 (on suppose les fonctions nombre_de_lignes et nombre_de_colonnes implantées). Cette fonction comporte une maladresse. Laquelle ? Proposer une correction.
Réponse : La fonction scadoosh est une fonction qui va de l’ensemble des matrices creuses
dans l’ensemble des booléens. Elle retourne vrai si son paramètre est une matrice diagonale, faux
sinon.
Maladresse : dans certains cas, la boucle for parcourt inutilement toute la matrice. On peut
arrêter les itérations dès que resultat passe à faux.
Correction :
2
scadoosh := proc (M)
local dimlig, dimcol, resultat, triplet, i;
dimlig := nombre_de_lignes (M);
dimcol := nombre_de_colonnes (M);
if dimlig <> dimcol or dimlig <> nops (M) then
resultat := false
else
resultat := true;
for i from 1 to nops (M) do
triplet := M [i];
if triplet [1] <> triplet [2] then
resultat := false
fi
od
fi;
return resultat
end:
F IG . 1 – La fonction scadoosh.
i := 1;
resultat := true;
while i <= nops (M) and resultat do
triplet := M [i];
if triplet [1] <> triplet [2] then
resultat := false
fi;
i := i+1
od
2
Méthode de Newton (3 points)
Question 6 [2 pts]. En utilisant la méthode de Newton et en partant du polynôme x3 − 3, donner
une suite (relation de récurrence et condition initiale) qui converge vers la racine cubique de 3.
Réponse : Relation de récurrence : xn+1 = (2/3) xn + 1/x2n . Condition initiale : x0 = 3 (par
exemple).
Question 7 [1 pt]. Que peut–on dire de la vitesse de convergence de cette suite ? Justifier.
Réponse : La vitesse de convergence est quadratique, parce que la racine cubique de 3 est une
racine simple du polynôme.
3
Moyenne et variance (3 points)
La moyenne m d’une liste de réels (αi ) est égale à la somme des αi , divisée par leur nombre.
La variance de cette liste est la moyenne des carrés des écarts à la moyenne (m − αi )2 .
3
Question 8 [3 pts]. Écrire deux fonctions, moyenne et variance, qui permettent de calculer la
moyenne et la variance d’une liste de réels. Éviter au maximum de programmer plusieurs fois le
même calcul.
Réponse :
moyenne := proc (L)
local m, i;
m := 0;
for i from 1 to nops (L) do
m := m + L[i]
od;
m / nops (L)
end:
variance := proc (L)
local m, S, i;
m := moyenne (L);
S := [ seq ((m - L[i])^2, i = 1 .. nops (L)) ];
moyenne (S);
end:
4
Équations différentielles (5 points)
Question 9
suivante :
[2 pts]. Faire l’analyse qualitative (points fixes, stabilité, ligne de phase) de l’équation
d
x(t) = −(x − 4)(x − 7).
dt
Réponse : les points fixes sont 4 et 7. Le point fixe 7 est attractif. Le point fixe 4 est répulsif.
Question 10 [1 pt]. Appliquer la méthode d’Euler à l’équation précédente, sur l’intervalle [a, b] =
[0, 1] en N = 3 pas, pour la condition initiale x(a) = 4.
Réponse : on calcule 4 points (ti , xi ) pour 0 ≤ i ≤ 3. On a ti = i N/3 et xi = 4 pour
0 ≤ i ≤ 3.
Question 11 [2 pts]. Supposons que l’analyse qualitative (points fixes, stabilité, ligne de phase)
de l’équation suivante soit faite.
d
x(t) = f (x(t)).
dt
Peut–on en déduire, sans calcul, l’analyse qualitative de l’équation suivante, obtenue en changeant
le signe du membre droit
d
x(t) = −f (x(t)) ?
dt
Si oui, que suffit–il de faire ?
4
Réponse : oui. Les points fixes sont conservés. Les natures changent : les points fixes stables
deviennent instables ; les points fixes instables deviennent stables (par contre, les nœuds restent
des nœuds).
5
Téléchargement

1 Matrices creuses (10 points)