3. Input / Output
Objectifs
- Construire des
Vecteur
à partir d’un fichier - De même pour les
Matrice
Problématique
Construire des Vecteur
et des Matrice
est maintenant possible via les opérateurs parenthèses :
Matrice A(5);
A(0,0) = 2;
A(0,1) = -1;
...
Cette méthode peut s’avérer longue, notamment pour construire des matrices sans réelles pattern (ou schéma) pour lesquelles l’automatisation peut s’avérer compliquée. D’autre part, la matrice peut avoir été construire via un autre logiciel ou une autre source comme Matrix Market.
Vecteur
Nous proposons le format de fichier à deux colonnes :
- La première ligne contient le nombre de lignes du
Vecteur
- Chaque ligne suivante contient 2 valeurs : l’indice (
int
) et la valeur du coefficient (double
)
Par exemple pour le vecteur $[1, 1.1, 1.2, 1.3, 0, 1.4]^T$
6
0 1.
1 1.1
2 1.2
3 1.3
4 0.
5 1.4
Matrice
Nous proposons le format similaire à celui de Matrix Market. Similaire aux Vecteur
, nous avons :
- La première ligne contient le nombre de lignes de la
Matrice
- Chaque ligne est ensuite composée de trois nombres : indice ligne, indice colonne et la valeur du coefficient.
Par exemple pour la matrice suivante :
$$
A = \begin{pmatrix}
1.1 & 2. & 0\\\
0 & 5 & 0 \\\
0 & 2.3 & 3
\end{pmatrix}
$$
serait sauvegardée dans le fichier suivant :
3
0 0 1.1
0 1 2.
0 2 0.
1 0 0.
1 1 5.
1 2 0.
2 1 0.
2 1 2.3
2 2 3.
Nous pouvons aussi sauvegarder de l’espace disque en ne sauvegardant pas les coefficients nuls ! Du fait des erreurs d’arrondi numérique, un coefficient peut être nul théoriquement mais pas dans la pratique. La condition if(a == 0.)
est souvent à éviter, source d’erreurs. Nous préférerons utiliser une tolérance :
#include <cmath>
[...]
double a;
[...]
if (abs(a) < 1e14)
// est considéré comme nul
else
// non nul
Implémentation
Pour les classes Matrice
et Vecteur
, nous vous conseillons vivement d’implémenter des méthodes permettant de :
- Lire des fichiers aux formats présentés plus haut et modifier l’objet appelant en fonction
- Sauvegarder une
Matrice
ou unVecteur
sur disque au format proposé (pour une réutilisation future)
Vous pouvez aller plus loin en implémentant un constructeur qui prend en argument un nom de fichier et construit la Matrice
ou le Vecteur
associé. Il s’utiliserait alors de la façon suivante (exemple !) :
Matrice A("laplacien_A.txt");
Vecteur b("laplacien_b.txt");