Tous les cours gratuit

Langage C/C++

Multiplication de Deux Matrices en Langage C Utilisant des Pointeurs

Dans cet article, nous allons explorer comment multiplier deux matrices en utilisant des pointeurs en langage C.

💡 La multiplication de matrices est une opération fondamentale en algèbre linéaire et est souvent utilisée dans de nombreuses applications informatiques, notamment dans le traitement d’images, les simulations scientifiques, et la programmation graphique. En langage C, l’utilisation de pointeurs est courante pour manipuler les tableaux, y compris les matrices.

Structure de Données pour les Matrices

Avant de procéder à la multiplication, il est important de comprendre comment représenter les matrices en langage C. Nous utiliserons des pointeurs pour créer et manipuler les matrices. Une matrice peut être considérée comme un tableau bidimensionnel dans lequel chaque élément est stocké dans une zone de mémoire contiguë.

Voici comment nous pouvons déclarer une matrice en utilisant des pointeurs en langage C :

#define ROWS 3
#define COLS 3

// Déclaration d'une matrice de dimensions ROWS x COLS
int matrix[ROWS][COLS];
Algorithme de Multiplication de Deux Matrices

Pour multiplier deux matrices ( A ) et ( B ) de dimensions mxn et nxp respectivement, le produit C= AxB est une nouvelle matrice de dimensions mxp. Chaque élément de la matrice produit ( C ) est calculé en prenant le produit scalaire des lignes de la première matrice et des colonnes de la deuxième matrice.

L’algorithme de multiplication de matrices peut être implémenté en langage C comme suit :

void multiplyMatrices(int *A, int *B, int *C, int m, int n, int p) {
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < p; ++j) {
            *(C + i * p + j) = 0;
            for (int k = 0; k < n; ++k) {
                *(C + i * p + j) += *(A + i * n + k) * *(B + k * p + j);
            }
        }
    }
}

Dans cette fonction multiplyMatrices, les paramètres sont les suivants :

  • A, B, et C sont les pointeurs vers les matrices ( A ), ( B ), et ( C ) respectivement.
  • m, n, et p représentent les dimensions des matrices ( A ), ( B ), et ( C ) respectivement.
Exemple d’Utilisation

Voici un exemple d’utilisation de la fonction multiplyMatrices pour multiplier deux matrices en langage C :

#include <stdio.h>

#define ROWS 3
#define COLS 3

int main() {
    int A[ROWS][COLS] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int B[ROWS][COLS] = {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}};
    int C[ROWS][COLS];

    multiplyMatrices(&A[0][0], &B[0][0], &C[0][0], ROWS, COLS, ROWS);

    printf("Matrice C (A x B):\n");
    for (int i = 0; i < ROWS; ++i) {
        for (int j = 0; j < COLS; ++j) {
            printf("%d ", C[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Ce programme affichera la matrice produit ( C ) résultante de la multiplication de ( A ) et ( B ).

Voici quelques ⭐ exemples d’applications ⭐ courantes où la multiplication de matrices est utilisée, accompagnés de code en langage C :

1. Traitement d’Images – Application de Filtres

Dans le traitement d’images, les filtres peuvent être appliqués à une image en utilisant la convolution, qui implique la multiplication de matrices. Voici un exemple simple de l’application d’un filtre de flou gaussien à une image en utilisant la multiplication de matrices :

#include <stdio.h>

#define IMAGE_WIDTH 3
#define IMAGE_HEIGHT 3

void applyFilter(float image[IMAGE_HEIGHT][IMAGE_WIDTH], float filter[3][3], float result[IMAGE_HEIGHT][IMAGE_WIDTH]) {
    for (int i = 0; i < IMAGE_HEIGHT; ++i) {
        for (int j = 0; j < IMAGE_WIDTH; ++j) {
            result[i][j] = 0;
            for (int k = 0; k < 3; ++k) {
                for (int l = 0; l < 3; ++l) {
                    int x = i - 1 + k;
                    int y = j - 1 + l;
                    if (x >= 0 && x < IMAGE_HEIGHT && y >= 0 && y < IMAGE_WIDTH) {
                        result[i][j] += image[x][y] * filter[k][l];
                    }
                }
            }
        }
    }
}

int main() {
    float image[IMAGE_HEIGHT][IMAGE_WIDTH] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    float filter[3][3] = {{1, 2, 1}, {2, 4, 2}, {1, 2, 1}};
    float result[IMAGE_HEIGHT][IMAGE_WIDTH];

    applyFilter(image, filter, result);

    printf("Image après l'application du filtre de flou gaussien :\n");
    for (int i = 0; i < IMAGE_HEIGHT; ++i) {
        for (int j = 0; j < IMAGE_WIDTH; ++j) {
            printf("%.2f ", result[i][j]);
        }
        printf("\n");
    }

    return 0;
}
2. Simulation Physique – Mécanique des Fluides

Dans la simulation de la mécanique des fluides, la méthode des différences finies peut être utilisée pour résoudre les équations gouvernant le mouvement des fluides. La multiplication de matrices est couramment utilisée pour discrétiser ces équations. Voici un exemple simple d’application de la méthode des différences finies pour résoudre l’équation de la chaleur en 2D :

#include <stdio.h>

#define GRID_SIZE 5
#define TIME_STEPS 10

void solveHeatEquation(float grid[GRID_SIZE][GRID_SIZE], float result[GRID_SIZE][GRID_SIZE]) {
    float dt = 0.1; // Pas de temps
    float dx = 0.1; // Pas d'espace
    float alpha = 0.1; // Coefficient de diffusion thermique

    for (int t = 0; t < TIME_STEPS; ++t) {
        for (int i = 1; i < GRID_SIZE - 1; ++i) {
            for (int j = 1; j < GRID_SIZE - 1; ++j) {
                result[i][j] = grid[i][j] + alpha * dt / (dx * dx) * (grid[i+1][j] + grid[i-1][j] + grid[i][j+1] + grid[i][j-1] - 4 * grid[i][j]);
            }
        }
        // Mettre à jour la grille pour la prochaine itération
        for (int i = 1; i < GRID_SIZE - 1; ++i) {
            for (int j = 1; j < GRID_SIZE - 1; ++j) {
                grid[i][j] = result[i][j];
            }
        }
    }
}

int main() {
    float initialGrid[GRID_SIZE][GRID_SIZE] = {{0}};
    float result[GRID_SIZE][GRID_SIZE];

    // Initialiser la grille avec des conditions initiales

    solveHeatEquation(initialGrid, result);

    printf("Grille après résolution de l'équation de la chaleur :\n");
    for (int i = 0; i < GRID_SIZE; ++i) {
        for (int j = 0; j < GRID_SIZE; ++j) {
            printf("%.2f ", result[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Ces exemples illustrent comment la multiplication de matrices est utilisée dans des applications réelles en langage C.

Voici quelques ⭐ cas particuliers ⭐ de multiplication de matrices avec du code en langage C :

1. Multiplication de Matrices Carrées

Dans ce cas, les deux matrices sont carrées, c’est-à-dire qu’elles ont le même nombre de lignes et de colonnes. Voici un exemple de multiplication de matrices carrées en langage C :

#include <stdio.h>

#define SIZE 3

void multiplySquareMatrices(int A[SIZE][SIZE], int B[SIZE][SIZE], int C[SIZE][SIZE]) {
    for (int i = 0; i < SIZE; ++i) {
        for (int j = 0; j < SIZE; ++j) {
            C[i][j] = 0;
            for (int k = 0; k < SIZE; ++k) {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }
}

int main() {
    int A[SIZE][SIZE] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int B[SIZE][SIZE] = {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}};
    int C[SIZE][SIZE];

    multiplySquareMatrices(A, B, C);

    printf("Résultat de la multiplication :\n");
    for (int i = 0; i < SIZE; ++i) {
        for (int j = 0; j < SIZE; ++j) {
            printf("%d ", C[i][j]);
        }
        printf("\n");
    }

    return 0;
}
2. Multiplication de Matrices Rectangulaires

Dans ce cas, les deux matrices peuvent avoir des dimensions différentes, mais le nombre de colonnes de la première matrice doit correspondre au nombre de lignes de la deuxième matrice. Voici un exemple de multiplication de matrices rectangulaires en langage C :

#include <stdio.h>

#define ROWS_A 2
#define COLS_A 3
#define COLS_B 2

void multiplyRectangularMatrices(int A[ROWS_A][COLS_A], int B[COLS_A][COLS_B], int C[ROWS_A][COLS_B]) {
    for (int i = 0; i < ROWS_A; ++i) {
        for (int j = 0; j < COLS_B; ++j) {
            C[i][j] = 0;
            for (int k = 0; k < COLS_A; ++k) {
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }
}

int main() {
    int A[ROWS_A][COLS_A] = {{1, 2, 3}, {4, 5, 6}};
    int B[COLS_A][COLS_B] = {{9, 8}, {7, 6}, {5, 4}};
    int C[ROWS_A][COLS_B];

    multiplyRectangularMatrices(A, B, C);

    printf("Résultat de la multiplication :\n");
    for (int i = 0; i < ROWS_A; ++i) {
        for (int j = 0; j < COLS_B; ++j) {
            printf("%d ", C[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Ces exemples illustrent différentes situations de multiplication de matrices avec du code en langage C.

Autres articles

Guide : Comment créer un QCM en...
Le QCM en langage C peut être simulé dans un...
Read more
Tableaux en Langage C : Exercices Corrigés
Voici une série d'exercices corrigés sur les tableaux en langage...
Read more
Comment fonctionne la récursion terminale en C...
La récursion terminale en C La récursion terminale est une forme...
Read more
AZ

Recent Posts

Applications de l’Intérêt Composé : Calculater Excel Automatisé

L'intérêt composé est un concept fondamental en finance, qui permet de calculer les intérêts en…

37 minutes ago

Guide : Exemple de Commentaire Composé Corrigé

Le commentaire composé est un exercice littéraire qui consiste à analyser un texte en respectant…

12 heures ago

Règles générales pour l’accord des adjectifs masculin/féminin

Les adjectifs liés en français sont les adjectifs qui s’accordent en genre (masculin/féminin) et en…

12 heures ago

Masculins Féminins : Liste des mots piégeux et mots composés

Voici une liste étendue de mots piégeux en français, avec leurs genres et des explications…

12 heures ago

Guide : Reconnaître le Féminin ou le Masculin en Français

Apprendre à distinguer le genre des noms en français peut être un véritable défi pour…

13 heures ago

Fiche Auteur : Montesquieu

1. Informations Générales Nom complet : Charles-Louis de Secondat, Baron de La Brède et de…

13 heures ago

This website uses cookies.