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 `iet cisont des indices de ligne et de colonne. Le réel vi
est la valeur de l’élément de M, ligne `iet colonne ci. On ne stocke dans Mque les valeurs vinon
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 Met un
réel cet qui retourne la matrice creuse obtenue en multipliant tous les éléments de Mpar c. Atten-
tion au cas où cvaut 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