Resolver ecuaciones lineales utilizando la Regla de Cramer en C

CCBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo resolver ecuaciones lineales utilizando la Regla de Cramer en C. El laboratorio te guiará a través del proceso de lectura de los coeficientes y constantes de un sistema de ecuaciones lineales, cálculo de los determinantes y, finalmente, impresión de las soluciones de las variables. Crearás un programa en C que permita a los usuarios ingresar los coeficientes y constantes, y luego el programa proporcionará las soluciones utilizando la Regla de Cramer. Este laboratorio cubre conceptos esenciales de matrices y álgebra lineal, y las habilidades aprendidas se pueden aplicar a una variedad de problemas del mundo real.


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{{"Resolver ecuaciones lineales utilizando la Regla de Cramer en C"}} c/arrays -.-> lab-435198{{"Resolver ecuaciones lineales utilizando la Regla de Cramer en C"}} c/math_functions -.-> lab-435198{{"Resolver ecuaciones lineales utilizando la Regla de Cramer en C"}} c/user_input -.-> lab-435198{{"Resolver ecuaciones lineales utilizando la Regla de Cramer en C"}} c/output -.-> lab-435198{{"Resolver ecuaciones lineales utilizando la Regla de Cramer en C"}} end

Leer Coeficientes y Constantes

En este paso, aprenderás cómo leer coeficientes y constantes para resolver ecuaciones lineales utilizando la Regla de Cramer en C. Crearemos un programa que permita a los usuarios ingresar los coeficientes de un sistema de ecuaciones lineales.

Primero, creemos un archivo fuente en C para nuestro solucionador de ecuaciones lineales:

cd ~/project
nano cramer_solver.c

Ahora, agrega el siguiente código al archivo:

#include <stdio.h>

#define MAX_SIZE 3

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

    // Input the size of the system of equations
    printf("Enter the number of equations (max 3): ");
    scanf("%d", &n);

    // Input 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]);
        }
    }

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

    // Print the input matrix and constants
    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;
}

Compila el programa:

gcc -o cramer_solver cramer_solver.c

Ejecuta el programa:

./cramer_solver

Ejemplo de salida:

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

Analicemos el código:

  1. Definimos un tamaño máximo de 3x3 para el sistema de ecuaciones lineales.
  2. El programa primero pide al usuario que ingrese el número de ecuaciones.
  3. Luego, solicita al usuario que ingrese los coeficientes de la matriz.
  4. A continuación, pide las constantes de las ecuaciones lineales.
  5. Finalmente, imprime la matriz de entrada y las constantes para verificación.

Este paso prepara los cimientos para implementar la Regla de Cramer al permitir a los usuarios ingresar los coeficientes y constantes de un sistema de ecuaciones lineales.

Calcular Determinantes

En este paso, aprenderás cómo calcular determinantes para resolver ecuaciones lineales utilizando la Regla de Cramer en C. Ampliaremos el programa anterior para incluir funciones de cálculo de determinantes.

Abre el archivo fuente existente:

cd ~/project
nano cramer_solver.c

Actualiza el código con las funciones de cálculo de determinantes:

#include <stdio.h>

#define MAX_SIZE 3

// Function to compute determinant of a matrix
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;

    // Previous input code remains the same
    printf("Enter the number of equations (max 3): ");
    scanf("%d", &n);

    // Input 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]);
        }
    }

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

    // Compute and display determinant
    float mainDeterminant = computeDeterminant(matrix, n);
    printf("\nMain Determinant: %.2f\n", mainDeterminant);

    return 0;
}

Compila el programa actualizado:

gcc -o cramer_solver cramer_solver.c

Ejecuta el programa:

./cramer_solver

Ejemplo de salida:

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

Puntos clave sobre el cálculo del determinante:

  1. La función computeDeterminant() utiliza recursividad para calcular los determinantes de matrices.
  2. Maneja matrices 1x1 y 2x2 como casos base.
  3. Para matrices más grandes, utiliza el método de expansión por cofactores.
  4. La función funciona para matrices cuadradas de hasta 3x3.

El código demuestra cómo calcular el determinante principal de la matriz de coeficientes, que es un paso crucial en la Regla de Cramer para resolver ecuaciones lineales.

Imprimir Soluciones de las Variables

En este paso, completarás la implementación de la Regla de Cramer calculando e imprimiendo las soluciones de las variables en un sistema de ecuaciones lineales.

Abre el archivo fuente existente:

cd ~/project
nano cramer_solver.c

Actualiza el código con el cálculo de la solución de la Regla de Cramer:

#include <stdio.h>

#define MAX_SIZE 3

// Previous computeDeterminant function remains the same
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;
}

// Function to solve linear equations using Cramer's Rule
void solveUsingCramersRule(float matrix[MAX_SIZE][MAX_SIZE], float constants[MAX_SIZE], int n) {
    float mainDeterminant = computeDeterminant(matrix, n);

    // Check if the system has a unique solution
    if (mainDeterminant == 0) {
        printf("The system has no unique solution (determinant is zero).\n");
        return;
    }

    // Create temporary matrices for each variable
    float tempMatrix[MAX_SIZE][MAX_SIZE];
    float solutions[MAX_SIZE];

    // Calculate solutions for each variable
    for (int i = 0; i < n; i++) {
        // Copy original matrix
        for (int j = 0; j < n; j++) {
            for (int k = 0; k < n; k++) {
                tempMatrix[j][k] = matrix[j][k];
            }
        }

        // Replace i-th column with constants
        for (int j = 0; j < n; j++) {
            tempMatrix[j][i] = constants[j];
        }

        // Calculate determinant for this variable
        solutions[i] = computeDeterminant(tempMatrix, n) / mainDeterminant;
    }

    // Print 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;

    // Input code remains the same
    printf("Enter the number of equations (max 3): ");
    scanf("%d", &n);

    // Input 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]);
        }
    }

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

    // Solve using Cramer's Rule
    solveUsingCramersRule(matrix, constants, n);

    return 0;
}

Compila el programa actualizado:

gcc -o cramer_solver cramer_solver.c

Ejecuta el programa:

./cramer_solver

Ejemplo de salida:

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

Puntos clave sobre el cálculo de la solución:

  1. La función solveUsingCramersRule() implementa la Regla de Cramer.
  2. Comprueba si el sistema tiene una solución única verificando el determinante principal.
  3. Para cada variable, crea una matriz temporal y calcula su determinante.
  4. Las soluciones se calculan dividiendo el determinante de cada variable por el determinante principal.

El programa ahora resuelve completamente un sistema de ecuaciones lineales utilizando la Regla de Cramer.

Resumen

En este laboratorio, aprenderás cómo leer los coeficientes y constantes de un sistema de ecuaciones lineales, que es el primer paso para resolverlas utilizando la Regla de Cramer en C. El programa permite a los usuarios ingresar los coeficientes de la matriz y las constantes, y luego imprime la matriz de entrada para verificación. Este paso sienta las bases para los pasos posteriores de cálculo de determinantes e impresión de las soluciones de las variables.

El siguiente paso consistirá en calcular los determinantes de la matriz de coeficientes y de las matrices modificadas, lo cual es una parte crucial de la Regla de Cramer. El paso final será imprimir las soluciones de las variables dividiendo los determinantes de las matrices modificadas por el determinante de la matriz de coeficientes.