AD

Come calcolare il prodotto tra due matrici in C

In questa pagina viene mostrato come creare un programma in C in grado di calcolare il prodotto tra due matrici. Prima di iniziare con la spiegazione del programma, è fondamentale avere ben chiara l’operazione di moltiplicazione tra matrici.

In particolare, il prodotto tra matrici, noto anche come prodotto riga per colonna, è un’operazione non banale che si può effettuare tra matrici solamente in determinate condizioni. Siano A e B due matrici, la condizione fondamentale da rispettare per poter effettuare il prodotto tra A e B, è che il numero delle colonne della matrice A sia uguale al numero delle righe della matrice B. Il risultato dell’operazione di moltiplicazione tra matrici, restituisce una nuova matrice, avente lo stesso numero di righe della matrice A e lo stesso numero di colonne della matrice B.

Di conseguenza, se la matrice A ha dimensione (2,3), mentre la matrice B ha dimensione (3,2), la matrice prodotto avrà dimensione (2,2).

Per quanto riguarda l’operazione di moltiplicazione in sé, il prodotto si esegue nel seguente modo: si inizia considerando la prima riga della matrice A e la prima colonna della matrice B, successivamente, il primo elemento della riga di A viene moltiplicato per il primo elemento della colonna di B, il secondo di A per il secondo di B, e così per ogni elemento della riga di A. A questo punto vengono sommati tra di loro i prodotti effettuati ottenendo il primo elemento della matrice prodotto, che si troverà nella posizione (1,1).

Questo processo viene ripetuto fino a che ogni riga di A non è stata moltiplicata per ogni colonna di B. In particolare, la prima riga di A e la seconda colonna di B indicheranno l'elemento che si troverà nella posizione (1,2) della matrice prodotto.

Procedimento

Visto il funzionamento generale dell’operazione di moltiplicazione tra due matrici, possiamo procedere con la spiegazione del procedimento nel linguaggio C. In particolare, abbiamo bisogno di dichiarare due matrici A e B, in modo tale che la matrice B abbia lo stesso numero di colonne quante il numero di righe della matrice A. Nello specifico usiamo due macro M ed N definite con la direttiva #define, che indicano rispettivamente il numero di righe e di colonne della matrice A, ed allo stesso tempo indicano rispettivamente il numero di colonne e di righe della matrice B.

Per quanto riguarda il contenuto delle matrici, inizializziamo entrambe con dei valori arbitrati direttamente all’interno del codice.

Oltre alle matrici A ed B abbiamo bisogno di un'ulteriore matrice C, che conterrà il prodotto tra A ed B. Risulta fondamentale che la matrice C abbia lo stesso numero di righe della matrice A e lo stesso numero di colonne della matrice B, ovvero che abbia dimensione [M][M].

A questo punto possiamo procedere con l’operazione di moltiplicazione tra le due matrici. Per poter effettuare il prodotto tra le due matrici abbiamo bisogno di tre cicli for innestati, dove i primi due servono per scorrere le righe e le colonne delle matrici A e B, mentre il terzo ciclo for serve per scorrere ogni elemento che compone una colonna della matrice B, in modo da poter effettuare l’operazione spiegata precedentemente.

Nello specifico il terzo ciclo for serve per effettuare la sommatoria dei prodotti tra gli elementi di ciascuna riga con ciascuna colonna, ed inserire il valore calcolato all’interno della matrice prodotto nella posizione [i][j].

Al termine dei cicli for la matrice C, conterrà il prodotto tra la matrice A e la matrice B.

Codice completo prodotto tra matrici in C

Di seguito viene riportato il codice intero per effettuare il prodotto tra matrici in C.

#include <stdio.h> #define M 2 #define N 3 int main(){     int A[M][N] = {{3, 4, 7}, {5, 7, 3}};     int B[N][M] = {{0, -2}, {5, 9}, {1, 7}};     int C[M][M];     for(int i = 0; i < M; i++){         for(int j = 0; j < M; j++){             for(int k = 0; k < N; k++){                 C[i][j] += A[i][k] * B[k][j];             }             printf("%d ", C[i][j]);         }         printf("\n");     }     return 0; } /* Output: 27 79  38 74 */