Résoudre des équations linéaires en utilisant la règle de Cramer en langage C

CCBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce labo (lab), vous allez apprendre à résoudre des équations linéaires en utilisant la règle de Cramer en langage C. Le labo vous guidera tout au long du processus de lecture des coefficients et des constantes d'un système d'équations linéaires, de calcul des déterminants et, enfin, d'impression des solutions pour les variables. Vous allez créer un programme en langage C qui permettra aux utilisateurs d'entrer les coefficients et les constantes, puis le programme fournira les solutions en utilisant la règle de Cramer. Ce labo couvre des concepts essentiels de matrices et d'algèbre linéaire, et les compétences acquises peuvent être appliquées à une variété de problèmes réels.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/CompoundTypesGroup(["Compound Types"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/BasicsGroup -.-> c/data_types("Data Types") c/CompoundTypesGroup -.-> c/arrays("Arrays") c/FunctionsGroup -.-> c/math_functions("Math Functions") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/data_types -.-> lab-435198{{"Résoudre des équations linéaires en utilisant la règle de Cramer en langage C"}} c/arrays -.-> lab-435198{{"Résoudre des équations linéaires en utilisant la règle de Cramer en langage C"}} c/math_functions -.-> lab-435198{{"Résoudre des équations linéaires en utilisant la règle de Cramer en langage C"}} c/user_input -.-> lab-435198{{"Résoudre des équations linéaires en utilisant la règle de Cramer en langage C"}} c/output -.-> lab-435198{{"Résoudre des équations linéaires en utilisant la règle de Cramer en langage C"}} end

Lire les coefficients et les constantes

Dans cette étape, vous allez apprendre à lire les coefficients et les constantes pour résoudre des équations linéaires en utilisant la règle de Cramer en langage C. Nous allons créer un programme qui permettra aux utilisateurs d'entrer les coefficients d'un système d'équations linéaires.

Tout d'abord, créons un fichier source C pour notre solveur d'équations linéaires :

cd ~/project
nano cramer_solver.c

Maintenant, ajoutez le code suivant au fichier :

#include <stdio.h>

#define MAX_SIZE 3

int main() {
    float matrix[MAX_SIZE][MAX_SIZE];
    float constants[MAX_SIZE];
    int n;

    // Entrez la taille du système d'équations
    printf("Enter the number of equations (max 3): ");
    scanf("%d", &n);

    // Entrez les coefficients
    printf("Enter the coefficients of the matrix:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("Enter coefficient a[%d][%d]: ", i+1, j+1);
            scanf("%f", &matrix[i][j]);
        }
    }

    // Entrez les constantes
    printf("Enter the constants:\n");
    for (int i = 0; i < n; i++) {
        printf("Enter constant b[%d]: ", i+1);
        scanf("%f", &constants[i]);
    }

    // Affichez la matrice d'entrée et les constantes
    printf("\nInput Matrix:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("%.2f ", matrix[i][j]);
        }
        printf("| %.2f\n", constants[i]);
    }

    return 0;
}

Compilez le programme :

gcc -o cramer_solver cramer_solver.c

Exécutez le programme :

./cramer_solver

Exemple de sortie :

Enter the number of equations (max 3): 2
Enter the coefficients of the matrix:
Enter coefficient a[1][1]: 2
Enter coefficient a[1][2]: 1
Enter coefficient a[2][1]: -3
Enter coefficient a[2][2]: 4
Enter the constants:
Enter constant b[1]: 4
Enter constant b[2]: 5

Input Matrix:
2.00 1.00 | 4.00
-3.00 4.00 | 5.00

Décortiquons le code :

  1. Nous définissons une taille maximale de 3x3 pour le système d'équations linéaires.
  2. Le programme demande d'abord à l'utilisateur d'entrer le nombre d'équations.
  3. Il invite ensuite l'utilisateur à entrer les coefficients de la matrice.
  4. Ensuite, il demande les constantes des équations linéaires.
  5. Enfin, il affiche la matrice d'entrée et les constantes pour vérification.

Cette étape jette les bases pour la mise en œuvre de la règle de Cramer en permettant aux utilisateurs d'entrer les coefficients et les constantes d'un système d'équations linéaires.

Calculer les déterminants

Dans cette étape, vous allez apprendre à calculer les déterminants pour résoudre des équations linéaires en utilisant la règle de Cramer en langage C. Nous allons étendre le programme précédent pour inclure des fonctions de calcul de déterminant.

Ouvrez le fichier source existant :

cd ~/project
nano cramer_solver.c

Mettez à jour le code avec les fonctions de calcul de déterminant :

#include <stdio.h>

#define MAX_SIZE 3

// Fonction pour calculer le déterminant d'une matrice
float computeDeterminant(float matrix[MAX_SIZE][MAX_SIZE], int n) {
    if (n == 1) {
        return matrix[0][0];
    }

    if (n == 2) {
        return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
    }

    float det = 0;
    float submatrix[MAX_SIZE][MAX_SIZE];
    int sign = 1;

    for (int x = 0; x < n; x++) {
        int subi = 0;
        for (int i = 1; i < n; i++) {
            int subj = 0;
            for (int j = 0; j < n; j++) {
                if (j == x) continue;
                submatrix[subi][subj] = matrix[i][j];
                subj++;
            }
            subi++;
        }
        det += sign * matrix[0][x] * computeDeterminant(submatrix, n - 1);
        sign = -sign;
    }

    return det;
}

int main() {
    float matrix[MAX_SIZE][MAX_SIZE];
    float constants[MAX_SIZE];
    int n;

    // Le code d'entrée précédent reste le même
    printf("Enter the number of equations (max 3): ");
    scanf("%d", &n);

    // Entrez les coefficients
    printf("Enter the coefficients of the matrix:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("Enter coefficient a[%d][%d]: ", i+1, j+1);
            scanf("%f", &matrix[i][j]);
        }
    }

    // Entrez les constantes
    printf("Enter the constants:\n");
    for (int i = 0; i < n; i++) {
        printf("Enter constant b[%d]: ", i+1);
        scanf("%f", &constants[i]);
    }

    // Calculez et affichez le déterminant
    float mainDeterminant = computeDeterminant(matrix, n);
    printf("\nMain Determinant: %.2f\n", mainDeterminant);

    return 0;
}

Compilez le programme mis à jour :

gcc -o cramer_solver cramer_solver.c

Exécutez le programme :

./cramer_solver

Exemple de sortie :

Enter the number of equations (max 3): 2
Enter the coefficients of the matrix:
Enter coefficient a[1][1]: 2
Enter coefficient a[1][2]: 1
Enter coefficient a[2][1]: -3
Enter coefficient a[2][2]: 4
Enter the constants:
Enter constant b[1]: 4
Enter constant b[2]: 5

Main Determinant: 11.00

Points clés concernant le calcul du déterminant :

  1. La fonction computeDeterminant() utilise la récursion pour calculer les déterminants de matrices.
  2. Elle gère les matrices 1x1 et 2x2 comme cas de base.
  3. Pour les matrices plus grandes, elle utilise la méthode d'expansion par cofacteurs.
  4. La fonction fonctionne pour les matrices carrées jusqu'à 3x3.

Le code montre comment calculer le déterminant principal de la matrice des coefficients, qui est une étape cruciale de la règle de Cramer pour résoudre des équations linéaires.

Afficher les solutions pour les variables

Dans cette étape, vous allez terminer la mise en œuvre de la règle de Cramer en calculant et en affichant les solutions pour les variables d'un système d'équations linéaires.

Ouvrez le fichier source existant :

cd ~/project
nano cramer_solver.c

Mettez à jour le code avec le calcul des solutions selon la règle de Cramer :

#include <stdio.h>

#define MAX_SIZE 3

// La fonction computeDeterminant précédente reste la même
float computeDeterminant(float matrix[MAX_SIZE][MAX_SIZE], int n) {
    if (n == 1) {
        return matrix[0][0];
    }

    if (n == 2) {
        return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
    }

    float det = 0;
    float submatrix[MAX_SIZE][MAX_SIZE];
    int sign = 1;

    for (int x = 0; x < n; x++) {
        int subi = 0;
        for (int i = 1; i < n; i++) {
            int subj = 0;
            for (int j = 0; j < n; j++) {
                if (j == x) continue;
                submatrix[subi][subj] = matrix[i][j];
                subj++;
            }
            subi++;
        }
        det += sign * matrix[0][x] * computeDeterminant(submatrix, n - 1);
        sign = -sign;
    }

    return det;
}

// Fonction pour résoudre des équations linéaires en utilisant la règle de Cramer
void solveUsingCramersRule(float matrix[MAX_SIZE][MAX_SIZE], float constants[MAX_SIZE], int n) {
    float mainDeterminant = computeDeterminant(matrix, n);

    // Vérifiez si le système a une solution unique
    if (mainDeterminant == 0) {
        printf("The system has no unique solution (determinant is zero).\n");
        return;
    }

    // Créez des matrices temporaires pour chaque variable
    float tempMatrix[MAX_SIZE][MAX_SIZE];
    float solutions[MAX_SIZE];

    // Calculez les solutions pour chaque variable
    for (int i = 0; i < n; i++) {
        // Copiez la matrice originale
        for (int j = 0; j < n; j++) {
            for (int k = 0; k < n; k++) {
                tempMatrix[j][k] = matrix[j][k];
            }
        }

        // Remplacez la i-ème colonne par les constantes
        for (int j = 0; j < n; j++) {
            tempMatrix[j][i] = constants[j];
        }

        // Calculez le déterminant pour cette variable
        solutions[i] = computeDeterminant(tempMatrix, n) / mainDeterminant;
    }

    // Affichez les solutions
    printf("\nSolutions:\n");
    for (int i = 0; i < n; i++) {
        printf("x%d = %.2f\n", i+1, solutions[i]);
    }
}

int main() {
    float matrix[MAX_SIZE][MAX_SIZE];
    float constants[MAX_SIZE];
    int n;

    // Le code d'entrée reste le même
    printf("Enter the number of equations (max 3): ");
    scanf("%d", &n);

    // Entrez les coefficients
    printf("Enter the coefficients of the matrix:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("Enter coefficient a[%d][%d]: ", i+1, j+1);
            scanf("%f", &matrix[i][j]);
        }
    }

    // Entrez les constantes
    printf("Enter the constants:\n");
    for (int i = 0; i < n; i++) {
        printf("Enter constant b[%d]: ", i+1);
        scanf("%f", &constants[i]);
    }

    // Résolvez en utilisant la règle de Cramer
    solveUsingCramersRule(matrix, constants, n);

    return 0;
}

Compilez le programme mis à jour :

gcc -o cramer_solver cramer_solver.c

Exécutez le programme :

./cramer_solver

Exemple de sortie :

Enter the number of equations (max 3): 2
Enter the coefficients of the matrix:
Enter coefficient a[1][1]: 2
Enter coefficient a[1][2]: 1
Enter coefficient a[2][1]: -3
Enter coefficient a[2][2]: 4
Enter the constants:
Enter constant b[1]: 4
Enter constant b[2]: 5

Solutions:
x1 = 2.00
x2 = 1.00

Points clés concernant le calcul des solutions :

  1. La fonction solveUsingCramersRule() met en œuvre la règle de Cramer.
  2. Elle vérifie si le système a une solution unique en vérifiant le déterminant principal.
  3. Pour chaque variable, elle crée une matrice temporaire et calcule son déterminant.
  4. Les solutions sont calculées en divisant le déterminant de chaque variable par le déterminant principal.

Le programme résout maintenant entièrement un système d'équations linéaires en utilisant la règle de Cramer.

Résumé

Dans ce labo (lab), vous allez apprendre à lire les coefficients et les constantes d'un système d'équations linéaires, ce qui est la première étape pour les résoudre en utilisant la règle de Cramer en langage C. Le programme permet aux utilisateurs d'entrer les coefficients de la matrice et les constantes, puis il affiche la matrice d'entrée pour vérification. Cette étape jette les bases pour les étapes suivantes de calcul des déterminants et d'affichage des solutions pour les variables.

L'étape suivante consistera à calculer les déterminants de la matrice des coefficients et des matrices modifiées, ce qui est une partie cruciale de la règle de Cramer. La dernière étape consistera à afficher les solutions pour les variables en divisant les déterminants des matrices modifiées par le déterminant de la matrice des coefficients.