Accesso ai dati di (k,i,j) e (k,j,i)

Concentriamoci sull'implementazione (k,i,j) per poi mostrare le differenze tra le due; questa volta prendiamo però in esame i due cicli più interni, quelli eseguiti su $i$ e $j$; possiamo notare che quello che andiamo a fare è

\begin{displaymath}C \leftarrow C + a_kb^k\end{displaymath}

per un fissato $k$, per cui possiamo riscrivere $C=C+AB$ come

\begin{displaymath}C=C+\sum_{k=1}^{n}a_kb^k\mbox{;}\end{displaymath}

abbiamo così ottenuto un'altra definizione di prodotto matriciale: costruiamo cioè la matrice $C$ tramite correzioni di rango $1$. Guardiamo adesso le differenze tra (k,i,j) e (k,j,i):
(k,i,j): il ciclo più interno può essere scritto come

\begin{displaymath}c^i \leftarrow c^i + a_{ik}b^k\end{displaymath}

dove $A(i,k)$ è una costante e $C(i,j)=c^i$ e $B(k,j)=b^k$ sono due vettori riga; dunque questo algoritmo accede alle matrici per riga;
(k,j,i): in questo caso il ciclo interno si può scrivere nella forma:

\begin{displaymath}c_j \leftarrow c_j +a_kb_{kj}\end{displaymath}

dove $B(k,j)$ è una costante ed i vettori $C(i,j)=c_j$ ed $A(i,k)=a_k$ sono due vettori colonna; dunque non facciamo altro che eseguire delle axpy accedendo alle matrici $C$ ed $A$ per colonna.

Morpheus 2004-01-04