Calcular la Inversa de una Matriz en C

CBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderemos a calcular la inversa de una matriz cuadrada utilizando la programación en C. La inversa de una matriz es un concepto importante en álgebra lineal con aplicaciones en la resolución de sistemas de ecuaciones lineales, gráficos por computadora, análisis de datos y muchos dominios de computación científica.

Exploraremos el proceso de inversión de matrices a través de varios pasos: leer una matriz cuadrada de la entrada del usuario, calcular el determinante y la adjunta (adjoint) de la matriz, y finalmente calcular la inversa utilizando estos valores. El laboratorio proporcionará experiencia práctica implementando estas operaciones matemáticas en código C, reforzando su comprensión tanto de los conceptos de programación como de los principios del álgebra lineal.

Al final de este laboratorio, podrá implementar un programa completo de inversión de matrices y comprender las técnicas matemáticas subyacentes involucradas en el proceso.

Lectura de una Matriz Cuadrada desde la Entrada del Usuario

En este paso, crearemos un programa para leer una matriz cuadrada desde la entrada del usuario. Una matriz cuadrada tiene el mismo número de filas y columnas, lo cual es un requisito para calcular la inversa de una matriz.

Primero, entendamos qué necesitamos hacer:

  1. Definir un tamaño máximo para nuestra matriz
  2. Obtener el tamaño real de la matriz del usuario
  3. Leer cada elemento de la matriz
  4. Mostrar la matriz para verificar nuestra entrada

Comencemos creando un nuevo archivo C en el directorio de nuestro proyecto:

  1. Abra el WebIDE y navegue al directorio del proyecto
  2. Cree un nuevo archivo llamado matrix_input.c en el directorio ~/project

Copie el siguiente código en el archivo:

#include <stdio.h>
#define MAX_SIZE 10

// Function to read matrix elements from user
void readMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
    printf("Enter the elements of the %dx%d matrix:\n", size, size);
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            printf("Enter element [%d][%d]: ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }
}

// Function to display the matrix
void displayMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
    printf("\nMatrix Contents:\n");
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            printf("%d\t", matrix[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int matrix[MAX_SIZE][MAX_SIZE];
    int size;

    // Get matrix size from user
    printf("Matrix Input Program\n");
    printf("====================\n");
    printf("Enter the size of the square matrix (1-%d): ", MAX_SIZE);
    scanf("%d", &size);

    // Validate matrix size
    if (size <= 0 || size > MAX_SIZE) {
        printf("Invalid matrix size. Please enter a size between 1 and %d.\n", MAX_SIZE);
        return 1;
    }

    // Read matrix elements
    readMatrix(matrix, size);

    // Display the matrix
    displayMatrix(matrix, size);

    return 0;
}

Entendamos los componentes clave de este código:

  • #define MAX_SIZE 10 - Esto define una constante para el tamaño máximo de la matriz
  • readMatrix() - Una función que utiliza bucles anidados para leer cada elemento de la matriz
  • displayMatrix() - Una función que imprime la matriz en formato tabular
  • En la función main(), obtenemos el tamaño del usuario y lo validamos antes de leer la matriz

Ahora, compilemos y ejecutemos nuestro programa:

  1. Abra una terminal en el WebIDE

  2. Compile el programa con el siguiente comando:

    cd ~/project
    gcc matrix_input.c -o matrix_input
  3. Ejecute el programa:

    ./matrix_input

Debería ver una salida similar a esta:

Matrix Input Program
====================
Enter the size of the square matrix (1-10): 3
Enter the elements of the 3x3 matrix:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 4
Enter element [1][1]: 5
Enter element [1][2]: 6
Enter element [2][0]: 7
Enter element [2][1]: 8
Enter element [2][2]: 9

Matrix Contents:
1	2	3
4	5	6
7	8	9

Ahora ha creado con éxito un programa que lee una matriz cuadrada de la entrada del usuario y la muestra. Este es el primer paso en nuestro proceso de cálculo de la inversa de la matriz.

Cálculo del Determinante y Cofactor de una Matriz

Antes de que podamos calcular la inversa de una matriz, necesitamos comprender e implementar dos operaciones matemáticas clave: encontrar el determinante y el cofactor de una matriz. El determinante es un valor escalar derivado de una matriz cuadrada y juega un papel crucial para determinar si una matriz es invertible.

En este paso, haremos lo siguiente:

  1. Aprender qué son los determinantes y los cofactores
  2. Implementar funciones para calcularlos
  3. Probar nuestra implementación con una matriz simple

Creemos un nuevo archivo para este paso:

  1. Cree un nuevo archivo llamado matrix_determinant.c en el directorio ~/project

Copie el siguiente código en el archivo:

#include <stdio.h>
#define MAX_SIZE 10

// Function to read matrix elements from user
void readMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
    printf("Enter the elements of the %dx%d matrix:\n", size, size);
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            printf("Enter element [%d][%d]: ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }
}

// Function to get cofactor of matrix[p][q] in temp[][]
void getCofactor(int matrix[MAX_SIZE][MAX_SIZE], int temp[MAX_SIZE][MAX_SIZE],
                 int p, int q, int n) {
    int i = 0, j = 0;

    // Looping for each element of the matrix
    for (int row = 0; row < n; row++) {
        for (int col = 0; col < n; col++) {
            // Copying into temporary matrix only those elements
            // which are not in given row and column
            if (row != p && col != q) {
                temp[i][j++] = matrix[row][col];

                // Row is filled, so increase row index and
                // reset column index
                if (j == n - 1) {
                    j = 0;
                    i++;
                }
            }
        }
    }
}

// Recursive function to find determinant of matrix
int determinant(int matrix[MAX_SIZE][MAX_SIZE], int n) {
    int det = 0; // Initialize result

    // Base case: if matrix contains single element
    if (n == 1)
        return matrix[0][0];

    int temp[MAX_SIZE][MAX_SIZE]; // To store cofactors
    int sign = 1; // To store sign multiplier

    // Iterate for each element of first row
    for (int f = 0; f < n; f++) {
        // Getting cofactor of matrix[0][f]
        getCofactor(matrix, temp, 0, f, n);

        // Adding to determinant with appropriate sign
        det += sign * matrix[0][f] * determinant(temp, n - 1);

        // Alternating sign factor
        sign = -sign;
    }

    return det;
}

// Function to display the matrix
void displayMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
    printf("\nMatrix Contents:\n");
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            printf("%d\t", matrix[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int matrix[MAX_SIZE][MAX_SIZE];
    int size;

    // Get matrix size from user
    printf("Matrix Determinant Calculator\n");
    printf("=============================\n");
    printf("Enter the size of the square matrix (1-%d): ", MAX_SIZE);
    scanf("%d", &size);

    // Validate matrix size
    if (size <= 0 || size > MAX_SIZE) {
        printf("Invalid matrix size. Please enter a size between 1 and %d.\n", MAX_SIZE);
        return 1;
    }

    // Read matrix elements
    readMatrix(matrix, size);

    // Display the matrix
    displayMatrix(matrix, size);

    // Calculate and display the determinant
    int det = determinant(matrix, size);
    printf("\nDeterminant of the matrix is: %d\n", det);

    // Check if matrix is invertible
    if (det == 0) {
        printf("The matrix is not invertible (determinant is zero).\n");
    } else {
        printf("The matrix is invertible (determinant is non-zero).\n");
    }

    return 0;
}

Entendamos los componentes clave de este código:

  • getCofactor() - Esta función extrae una submatriz eliminando una fila y una columna específicas. Esto es esencial para calcular determinantes y matrices adjuntas.
  • determinant() - Una función recursiva que calcula el determinante de una matriz utilizando el método de expansión de cofactores.
  • También verificamos si la matriz es invertible probando si el determinante es distinto de cero.

Comprensión de los Conceptos Matemáticos:

  1. Cofactor (Cofactor): Para cada elemento de una matriz, el cofactor es el determinante de la submatriz formada al eliminar la fila y la columna de ese elemento, multiplicado por (-1)^(i+j) donde i,j son los índices de fila y columna.

  2. Determinante (Determinant): El determinante es un número especial calculado a partir de una matriz cuadrada. Para una matriz 2×2 [[a,b],[c,d]], el determinante es (a×d - b×c). Para matrices más grandes, usamos la expansión de cofactores.

  3. Invertibilidad (Invertibility): Una matriz es invertible solo si su determinante no es cero.

Ahora, compilemos y ejecutemos nuestro programa:

  1. Compile el programa con el siguiente comando:

    cd ~/project
    gcc matrix_determinant.c -o matrix_determinant
  2. Ejecute el programa:

    ./matrix_determinant

Debería ver una salida similar a esta:

Matrix Determinant Calculator
=============================
Enter the size of the square matrix (1-10): 3
Enter the elements of the 3x3 matrix:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 0
Enter element [1][1]: 1
Enter element [1][2]: 4
Enter element [2][0]: 5
Enter element [2][1]: 6
Enter element [2][2]: 0

Matrix Contents:
1	2	3
0	1	4
5	6	0

Determinant of the matrix is: 49
The matrix is invertible (determinant is non-zero).

Intente ingresar diferentes matrices, incluyendo algunas con determinante cero, para ver cómo se comporta el programa. Por ejemplo, si ingresa una matriz donde una fila es un múltiplo de otra fila, el determinante debería ser cero.

Ahora ha implementado con éxito el cálculo del determinante, que es un componente crítico para encontrar la inversa de una matriz.

Cálculo de la Adjunta de una Matriz

El siguiente paso para calcular la inversa de una matriz es calcular la adjunta (también llamada adjugada) de la matriz. La adjunta de una matriz es la transpuesta de la matriz de cofactores. Una vez que tenemos la adjunta y el determinante de una matriz, podemos calcular la inversa usando la fórmula:

Inversa(A) = Adjunta(A) / Determinante(A)

En este paso, haremos lo siguiente:

  1. Implementar la función de cálculo de la adjunta
  2. Construir sobre nuestro código anterior para prepararnos para la inversión final de la matriz

Creemos un nuevo archivo para este paso:

  1. Cree un nuevo archivo llamado matrix_adjoint.c en el directorio ~/project

Copie el siguiente código en el archivo:

#include <stdio.h>
#define MAX_SIZE 10

// Function to read matrix elements from user
void readMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
    printf("Enter the elements of the %dx%d matrix:\n", size, size);
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            printf("Enter element [%d][%d]: ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }
}

// Function to get cofactor of matrix[p][q] in temp[][]
void getCofactor(int matrix[MAX_SIZE][MAX_SIZE], int temp[MAX_SIZE][MAX_SIZE],
                 int p, int q, int n) {
    int i = 0, j = 0;

    for (int row = 0; row < n; row++) {
        for (int col = 0; col < n; col++) {
            if (row != p && col != q) {
                temp[i][j++] = matrix[row][col];

                if (j == n - 1) {
                    j = 0;
                    i++;
                }
            }
        }
    }
}

// Recursive function to find determinant of matrix
int determinant(int matrix[MAX_SIZE][MAX_SIZE], int n) {
    int det = 0;

    if (n == 1)
        return matrix[0][0];

    int temp[MAX_SIZE][MAX_SIZE];
    int sign = 1;

    for (int f = 0; f < n; f++) {
        getCofactor(matrix, temp, 0, f, n);
        det += sign * matrix[0][f] * determinant(temp, n - 1);
        sign = -sign;
    }

    return det;
}

// Function to calculate the adjoint of a matrix
void adjoint(int matrix[MAX_SIZE][MAX_SIZE], int adj[MAX_SIZE][MAX_SIZE], int n) {
    if (n == 1) {
        adj[0][0] = 1;
        return;
    }

    int sign = 1;
    int temp[MAX_SIZE][MAX_SIZE];

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            // Get cofactor of matrix[i][j]
            getCofactor(matrix, temp, i, j, n);

            // Sign of adj[j][i] positive if sum of row and column indices is even
            sign = ((i + j) % 2 == 0) ? 1 : -1;

            // Interchanging rows and columns to get the transpose of the cofactor matrix
            adj[j][i] = sign * determinant(temp, n - 1);
        }
    }
}

// Function to display the matrix
void displayMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            printf("%d\t", matrix[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int matrix[MAX_SIZE][MAX_SIZE];
    int adj[MAX_SIZE][MAX_SIZE];
    int size;

    // Get matrix size from user
    printf("Matrix Adjoint Calculator\n");
    printf("=========================\n");
    printf("Enter the size of the square matrix (1-%d): ", MAX_SIZE);
    scanf("%d", &size);

    // Validate matrix size
    if (size <= 0 || size > MAX_SIZE) {
        printf("Invalid matrix size. Please enter a size between 1 and %d.\n", MAX_SIZE);
        return 1;
    }

    // Read matrix elements
    readMatrix(matrix, size);

    // Display the original matrix
    printf("\nOriginal Matrix:\n");
    displayMatrix(matrix, size);

    // Calculate the adjoint
    adjoint(matrix, adj, size);

    // Display the adjoint matrix
    printf("\nAdjoint Matrix:\n");
    displayMatrix(adj, size);

    // Calculate and display the determinant
    int det = determinant(matrix, size);
    printf("\nDeterminant of the matrix is: %d\n", det);

    return 0;
}

Entendamos el nuevo componente clave de este código:

  • adjoint() - Esta función calcula la adjunta de una matriz, que es la transpuesta de la matriz de cofactores. Para cada elemento (i,j) en la matriz, hacemos lo siguiente:
    1. Encontrar la matriz de cofactores eliminando la fila i y la columna j
    2. Calcular el determinante de esta matriz de cofactores
    3. Aplicar el signo apropiado ((−1)^(i+j))
    4. Colocar este valor en la posición (j,i) en la matriz adjunta (transpuesta)

Comprensión del Cálculo de la Adjunta:

La adjunta (o adjugada) de una matriz A se denota adj(A). Para una matriz 2×2:

A = [a b]
    [c d]

La adjunta es:

adj(A) = [ d  -b]
         [-c   a]

Para matrices más grandes, calculamos el cofactor de cada elemento y luego transponemos la matriz resultante.

Ahora, compilemos y ejecutemos nuestro programa:

  1. Compile el programa con el siguiente comando:

    cd ~/project
    gcc matrix_adjoint.c -o matrix_adjoint
  2. Ejecute el programa:

    ./matrix_adjoint

Debería ver una salida similar a esta:

Matrix Adjoint Calculator
=========================
Enter the size of the square matrix (1-10): 3
Enter the elements of the 3x3 matrix:
Enter element [0][0]: 1
Enter element [0][1]: 0
Enter element [0][2]: 2
Enter element [1][0]: 3
Enter element [1][1]: 0
Enter element [1][2]: 4
Enter element [2][0]: 5
Enter element [2][1]: 0
Enter element [2][2]: 6

Original Matrix:
1	0	2
3	0	4
5	0	6

Adjoint Matrix:
0	0	0
-8	-4	4
0	0	0

Determinant of the matrix is: 0

Observe que en este ejemplo, el determinante es 0, lo que significa que la matriz no es invertible. Intentemos otro ejemplo con una matriz invertible:

Matrix Adjoint Calculator
=========================
Enter the size of the square matrix (1-10): 3
Enter the elements of the 3x3 matrix:
Enter element [0][0]: 5
Enter element [0][1]: -2
Enter element [0][2]: 2
Enter element [1][0]: 1
Enter element [1][1]: 0
Enter element [1][2]: 3
Enter element [2][0]: 3
Enter element [2][1]: 1
Enter element [2][2]: 4

Original Matrix:
5	-2	2
1	0	3
3	1	4

Adjoint Matrix:
-3	11	-5
13	14	-11
-1	-7	2

Determinant of the matrix is: 15

En este caso, el determinante es 15 (distinto de cero), lo que significa que podemos calcular la inversa de esta matriz. Ahora ha implementado con éxito el cálculo de la adjunta, que es el penúltimo paso en la inversión de la matriz.

Cálculo de la Inversa de una Matriz

Ahora que hemos implementado funciones para calcular tanto el determinante como la adjunta de una matriz, finalmente podemos calcular la inversa de una matriz. Como se mencionó anteriormente, la fórmula para encontrar la inversa es:

Inversa(A) = Adjunta(A) / Determinante(A)

En este paso final, haremos lo siguiente:

  1. Implementar la función de inversión de la matriz
  2. Crear un programa completo que lea una matriz y calcule su inversa
  3. Agregar un formato de salida mejorado para una mejor legibilidad

Creemos un nuevo archivo para este paso final:

  1. Cree un nuevo archivo llamado matrix_inverse.c en el directorio ~/project

Copie el siguiente código en el archivo:

#include <stdio.h>
#define MAX_SIZE 10

// Function to read matrix elements from user
void readMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
    printf("Enter the elements of the %dx%d matrix:\n", size, size);
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            printf("Enter element [%d][%d]: ", i, j);
            scanf("%d", &matrix[i][j]);
        }
    }
}

// Function to get cofactor of matrix[p][q] in temp[][]
void getCofactor(int matrix[MAX_SIZE][MAX_SIZE], int temp[MAX_SIZE][MAX_SIZE],
                 int p, int q, int n) {
    int i = 0, j = 0;

    for (int row = 0; row < n; row++) {
        for (int col = 0; col < n; col++) {
            if (row != p && col != q) {
                temp[i][j++] = matrix[row][col];

                if (j == n - 1) {
                    j = 0;
                    i++;
                }
            }
        }
    }
}

// Recursive function to find determinant of matrix
int determinant(int matrix[MAX_SIZE][MAX_SIZE], int n) {
    int det = 0;

    if (n == 1)
        return matrix[0][0];

    int temp[MAX_SIZE][MAX_SIZE];
    int sign = 1;

    for (int f = 0; f < n; f++) {
        getCofactor(matrix, temp, 0, f, n);
        det += sign * matrix[0][f] * determinant(temp, n - 1);
        sign = -sign;
    }

    return det;
}

// Function to calculate the adjoint of a matrix
void adjoint(int matrix[MAX_SIZE][MAX_SIZE], int adj[MAX_SIZE][MAX_SIZE], int n) {
    if (n == 1) {
        adj[0][0] = 1;
        return;
    }

    int sign = 1;
    int temp[MAX_SIZE][MAX_SIZE];

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            // Get cofactor of matrix[i][j]
            getCofactor(matrix, temp, i, j, n);

            // Sign of adj[j][i] positive if sum of row and column indices is even
            sign = ((i + j) % 2 == 0) ? 1 : -1;

            // Interchanging rows and columns to get the transpose of the cofactor matrix
            adj[j][i] = sign * determinant(temp, n - 1);
        }
    }
}

// Function to calculate the inverse of a matrix
int inverse(int matrix[MAX_SIZE][MAX_SIZE], float inverse[MAX_SIZE][MAX_SIZE], int n) {
    // Find determinant of matrix
    int det = determinant(matrix, n);

    // If determinant is zero, matrix is not invertible
    if (det == 0) {
        printf("Matrix is not invertible as determinant is zero.\n");
        return 0;
    }

    // Find adjoint of matrix
    int adj[MAX_SIZE][MAX_SIZE];
    adjoint(matrix, adj, n);

    // Find inverse by dividing adjoint by determinant
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            inverse[i][j] = adj[i][j] / (float)det;
        }
    }

    return 1;
}

// Function to display an integer matrix
void displayMatrix(int matrix[MAX_SIZE][MAX_SIZE], int size) {
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            printf("%d\t", matrix[i][j]);
        }
        printf("\n");
    }
}

// Function to display a float matrix (for inverse)
void displayFloatMatrix(float matrix[MAX_SIZE][MAX_SIZE], int size) {
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            printf("%.4f\t", matrix[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int matrix[MAX_SIZE][MAX_SIZE];
    float inv[MAX_SIZE][MAX_SIZE];
    int size;

    // Get matrix size from user
    printf("Matrix Inverse Calculator\n");
    printf("=========================\n");
    printf("Enter the size of the square matrix (1-%d): ", MAX_SIZE);
    scanf("%d", &size);

    // Validate matrix size
    if (size <= 0 || size > MAX_SIZE) {
        printf("Invalid matrix size. Please enter a size between 1 and %d.\n", MAX_SIZE);
        return 1;
    }

    // Read matrix elements
    readMatrix(matrix, size);

    // Display the original matrix
    printf("\nOriginal Matrix:\n");
    displayMatrix(matrix, size);

    // Calculate and display the determinant
    int det = determinant(matrix, size);
    printf("\nDeterminant of the matrix is: %d\n", det);

    // Calculate and display the inverse
    if (inverse(matrix, inv, size)) {
        printf("\nInverse Matrix:\n");
        displayFloatMatrix(inv, size);
    }

    return 0;
}

Entendamos los nuevos componentes clave de este código:

  • inverse() - Esta función calcula la inversa de una matriz mediante:

    1. Encontrar el determinante
    2. Verificar si el determinante es distinto de cero (invertible)
    3. Calcular la adjunta
    4. Dividir cada elemento de la adjunta por el determinante
  • displayFloatMatrix() - Una nueva función para mostrar la matriz inversa con precisión de punto flotante, ya que los elementos inversos no son necesariamente enteros.

Comprensión de la Inversión de Matrices:

Para una matriz A, la inversa A^(-1) satisface la ecuación: A × A^(-1) = A^(-1) × A = I, donde I es la matriz identidad.

La fórmula que estamos usando es: A^(-1) = adj(A) / det(A)

Ahora, compilemos y ejecutemos nuestro programa:

  1. Compile el programa con el siguiente comando:

    cd ~/project
    gcc matrix_inverse.c -o matrix_inverse
  2. Ejecute el programa:

    ./matrix_inverse

Debería ver una salida similar a esta:

Matrix Inverse Calculator
=========================
Enter the size of the square matrix (1-10): 3
Enter the elements of the 3x3 matrix:
Enter element [0][0]: 4
Enter element [0][1]: 3
Enter element [0][2]: 1
Enter element [1][0]: 0
Enter element [1][1]: -1
Enter element [1][2]: 2
Enter element [2][0]: -3
Enter element [2][1]: 3
Enter element [2][2]: 1

Original Matrix:
4	3	1
0	-1	2
-3	3	1

Determinant of the matrix is: 37

Inverse Matrix:
0.0270	0.1351	-0.1351
0.2432	-0.0541	-0.2432
-0.1081	0.4865	0.1081

Verifiquemos el resultado: El producto de la matriz original y su inversa debe ser muy cercano a la matriz identidad. Puede verificar esto manualmente para matrices pequeñas.

Para un ejemplo 2×2, intentemos:

Matrix Inverse Calculator
=========================
Enter the size of the square matrix (1-10): 2
Enter the elements of the 2x2 matrix:
Enter element [0][0]: 4
Enter element [0][1]: 7
Enter element [1][0]: 2
Enter element [1][1]: 6

Original Matrix:
4	7
2	6

Determinant of the matrix is: 10

Inverse Matrix:
0.6000	-0.7000
-0.2000	0.4000

Para una matriz 2×2, puede verificar fácilmente la inversa usando la fórmula:
Para la matriz A = [[a, b], [c, d]], la inversa es:
A^(-1) = (1/det(A)) × [[d, -b], [-c, a]]

donde det(A) = a×d - b×c

En nuestro ejemplo:
det(A) = 4×6 - 7×2 = 24 - 14 = 10
A^(-1) = (1/10) × [[6, -7], [-2, 4]] = [[0.6, -0.7], [-0.2, 0.4]]

¡Felicidades! Ahora ha implementado con éxito un calculador de inversa de matriz completo en C.

Resumen

En este laboratorio, hemos implementado una calculadora completa de la inversa de una matriz en programación C. A lo largo del laboratorio, exploramos varios conceptos clave y los implementamos paso a paso:

  1. Comenzamos creando un programa para leer una matriz cuadrada de la entrada del usuario y mostrarla, aprendiendo a manejar arreglos 2D en C.

  2. Luego implementamos el cálculo del determinante utilizando el método de expansión de cofactores, un enfoque recursivo que forma la base de la inversión de matrices.

  3. A continuación, construimos sobre nuestro código para calcular la adjunta de una matriz, que es la transpuesta de la matriz de cofactores.

  4. Finalmente, combinamos todos estos componentes para calcular la inversa de una matriz usando la fórmula: Inversa = Adjunta / Determinante.

Estas operaciones matemáticas son fundamentales en álgebra lineal y tienen amplias aplicaciones en varios campos, incluyendo gráficos por computadora, aprendizaje automático, resolución de sistemas de ecuaciones lineales y más.

La implementación demostró varios conceptos de programación tales como:

  • Arreglos multidimensionales
  • Funciones recursivas
  • Conversión de tipos entre números enteros y números de punto flotante
  • Modularidad de funciones y organización del código
  • Validación de la entrada del usuario

Al completar este laboratorio, ha ganado experiencia práctica tanto con la teoría matemática como con la implementación de programación de operaciones de matrices, particularmente la inversión de matrices.