Bonjour,
Voici un petit algorithme que j'essaie de comprendre depuis un moment mais sans grand résultats... J'espère que vous pourrez m'éclairer.
1) On a une matrice symétrique W\in \mathbb{R}^{n \times n}.
Ex:
W =
( a , b , c )
( b , d , e )
( c , e , f )
2) On pose W' la partie triangulaire supérieure de la matrice.
W' =
( a , b , c )
( 0 , d , e )
( 0 , 0 , f )
3) On passe la matrice W' en notation sparse (et c'est là que ça devient moins drôle...):
- On pose I un vecteur contenant les indexes des lignes des coefficients non nuls de la matrice (de haut en bas colonne par colonne de gauche à droite).
- On pose J un vecteur de taille n+1 tel que J(k+1)-J(k) soit le nombre de coefficients non nuls sur la k-ème colonne.
- On pose S un vecteur contenant tous les coefficients non nuls de la matrice W' (de gauche à droite et de haut en bas).
Ex:
I = (1,1,2,1,2,3);
J = (0,1,3,6);
S = (a,b,c,d,e,f);
4) On procède finalement à la boucle suivante:
X = (0,0,0);
conteur = 1;
J'avoue ne vraiment pas comprendre ce que cet algorithme calcul exactement... Si quelqu'un à une idée c'est avec plaisir.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 for k de 1 à n for i de 1 à (J(k+1)-J(k)) X(I(conteur))= X(I(conter)) + S(conteur); conteur = conteur + 1; end; end;
Merci d'avance
Partager