Friday, January 5, 2018

Normalizarea de matricei rare

Normalizarea de matrice rare este un subprogram extrem de inportant care musai trebuie apelat înainte de a ieșii din orice subprogram care lucrează cu două matrice rare sau inversează o matrice rară. După efectuarea unor astfel de calcule este posibil ca în matricea rezultat să apară valori nule acolo în vectorul VAL(N). Se va elimina din tripletele de vectori linia și coloana unde VAL(J) este cu valoarea zero. Vor rezulta alți trei vectori LIN(N), ICOL(N) și VAL(N) cu un număr K1 de componente K1 < K unde K este numărul de componente ale matricei rare freprezentată prin 3 vectori înainte de normalizare și K1 reprezintă numărul de componente după ce s-a făcut normalizarea.
Se consideră matricele rare A și B definite prin:

Matricele A și B au fiecare câte 10 linii și 8 coloane. Se construiesc tripletele următoare pentru matricea A:
(1, 2, 1), (1, 7,4), (2,4, 4), (2, 8,7), (3, 5, -1), (4, 1, 9), (5, 1, 3), (5,2,2), (5, 8,5), (7, 2, 8), (7, 4, 6),    (7, 5, 7), (9, 6,12), (10,2,31), (10,8,87).
Se construiesc tripletele următoare pentru matricea A:
(1, 2, 1), (1, 7,4), (2,4, 4), (2, 8,7), (3, 5, -1), (4, 1, 9), (5, 1, -3), (5,2,2), (5, 8,5), (7, 2, 8), (7, 4, 6),    (7, 5, 7), (9, 6,-12), (10,2,31), (10,8,-87).
Dacă se adună cele două matrice rare se obțin tripletele matricei rezultat următoare:
(1, 2, 1), (1, 7,4), (2,4, 4), (2, 8,7), (3, 5, 0), (4, 1, 9), (5, 1, -3), (5,2,2), (5, 8,5), (7, 2, 8), (7, 4, 6),   
(7, 5, 7), (9, 6,0), (10,2,31), (10,8, 0).
Prin normalizare tripletele bolduite vor dispărea căci ele conțin valori zero ale elementelor matricei rezultat. Lista de triplete LIN1, ICOL1, VAL1 devine:
(1, 2, 1), (1, 7,4), (2,4, 4), (2, 8,7), (4, 1, 9), (5, 1, -3), (5,2,2), (5, 8,5), (7, 2, 8), (7, 4, 6),    (7, 5, 7), (10,2,31).
Subprogramul pentru normalizarea matricei rare este:

          SUBROUTINE NORAR(LIN,ICOL,N,K, LIN1,ICOL1,K1,IK)
          IK=0
          IF((K.LE.0).OR.(K.GT.N)) GO TO 20
          K1=0
          DO 10  I=1,K
          IF(VAL(I).EQ.0.) GO TO 10
          K1=K1+1
          LIN1(K1)=LIN(I)
          ICOL(K1)=ICOL(I)
          VAL1(K1)=VAL1(I)
10      CONTINUE
          IK=1
20      CONTINUE
          RETURN
          END
Variabila IK este zero dacă sunt erori în datele inițiale. Ea este 1 dacă rezultatul este corect, inclusiv dacă rezultă o matrice rară cu toate elementele nule.


   







(05 ianuarie 2018)

No comments:

Post a Comment