Thursday, January 4, 2018

Ridicarea la putere a matricei

A ridica o matrice pătrată A cu N linii și N coloane la puterea K înseamnă a o înmulți cu ea însăși de K-1 ori. Rezultatul se află în matricea REZ. Este nevoie de:
- un subprogram CPYMAT de copiere de matrice;
- un subprogram PROMAT de înmulțire de matrice;
- subprogramul PUTERE de ridicare la putere matrice.

         SUBROUTINE PROMAT (A,B,C,M,N,K)
         DO 20 I=1,M
         DO 20 J=1,K
         CIJ=0.
         DO 10 L=1,N
10     CIJ=CIJ+A(I,L)*B(L,J)
         C(I,J)=CIJ
20     CONTINUE
         RETURN
         END
         SUBROUTINE CPYMAT(A,B,M,N)
         MAXAIJ=A(1,1)
         DO  10 I=1,M
         DO  10 J=1,N
         B(I,J)=A(I,J)
10     CONTINUE
         RETURN
         END
         SUBROUTINE PUTERE(A,N,REZ)
         DIMENSION TEMP(N,N) 
         CALL  CPYMAT(A,TEMP,N,N)
         DO  10 J=1,N-1
         CALL  PROMAT (A,TEMP,REZ,N,N,N)
         CALL  CPYMAT(TEMP,REZ,N,N)
10     CONTINUE
         RETURN
         END
Subprogramul PUTERE(....) are în el așa cum este scris niște asperități, dintre carea cea mai supărătoare este copierea de matrice de la ultima iterație care este nenecesară, dar care se gestionează cu o instrucțiune IF(...) dar a cărei execuție nu aduce un profit așa de mare decât numai dacă volumul de operații generat de dimensiunea matricei A este cu mult mai mare, lucru care se stabilește cu exactitate, dar care nu mi se pare a fi esențial pentru ceea ce mă interesează pe mine ca exemplificare.
(04 ianuarie 2018)

No comments:

Post a Comment