Dada una Array , la tarea es encontrar la inversa de esta Array utilizando el método de Gauss-Jordan.
¿Qué es array?
Matrix es un arreglo rectangular ordenado de números.
Las operaciones que se pueden realizar en una array son : suma, resta, multiplicación o transposición de array, etc.
Inversa de una array:
Dada una array cuadrada A, que no es singular (significa que el Determinante de A es distinto de cero); Entonces existe una array
que se llama inversa de la array A.
La inversa de una array solo es posible cuando tales propiedades se cumplen:
- La array debe ser una array cuadrada.
- La array debe ser una array no singular y,
- Existe una array Identidad I para la cual
In general, the inverse of n X n matrix A can be found using this simple formula:
donde, Adj(A) denota el adjunto de una array y, Det(A) es el Determinante de la array A.
Métodos para encontrar la inversa de la array:
Encontrar la inversa de una array de 2 × 2 es una tarea simple, pero encontrar la inversa de una array más grande (como 3 × 3, 4 × 4, etc.) es una tarea difícil, por lo que se pueden usar los siguientes métodos:
- Operación de Fila Elemental (Método de Gauss-Jordan) (Eficiente)
- Método de los menores, cofactores y adyuvantes (ineficiente)
Operación Fila Elemental (Método de Gauss – Jordan):
El método de Gauss-Jordan es una variante de la eliminación gaussiana en la que se realiza una operación de reducción de filas para encontrar la inversa de una array.
Pasos para encontrar la inversa de una array usando el método de Gauss-Jordan:
Para encontrar la inversa de la array se deben seguir los siguientes pasos:
- Forme la array aumentada por la array identidad.
- Realice la operación de reducción por filas en esta array aumentada para generar una forma escalonada reducida por filas de la array.
- Las siguientes operaciones de fila se realizan en la array aumentada cuando es necesario:
- Intercambie cualquiera de las dos filas.
- Multiplique cada elemento de la fila por un número entero distinto de cero.
- Reemplazar una fila por la suma de sí misma y un múltiplo constante de otra fila de la array.
Ejemplo:
- La array aumentada se forma como A:B
- Después de aplicar el método de eliminación de Gauss-Jordan:
A continuación se muestra el programa C++ para encontrar la inversa de una array utilizando el método de Gauss-Jordan:
C++
// C++ program to find the inverse of Matrix. #include <iostream> #include <vector> using namespace std; // Function to Print matrix. void PrintMatrix(float** ar, int n, int m) { for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cout << ar[i][j] << " "; } printf("\n"); } return; } // Function to Print inverse matrix void PrintInverse(float** ar, int n, int m) { for (int i = 0; i < n; i++) { for (int j = n; j < m; j++) { printf("%.3f ", ar[i][j]); } printf("\n"); } return; } // Function to perform the inverse operation on the matrix. void InverseOfMatrix(float** matrix, int order) { // Matrix Declaration. float temp; // PrintMatrix function to print the element // of the matrix. printf("=== Matrix ===\n"); PrintMatrix(matrix, order, order); // Create the augmented matrix // Add the identity matrix // of order at the end of original matrix. for (int i = 0; i < order; i++) { for (int j = 0; j < 2 * order; j++) { // Add '1' at the diagonal places of // the matrix to create a identity matrix if (j == (i + order)) matrix[i][j] = 1; } } // Interchange the row of matrix, // interchanging of row will start from the last row for (int i = order - 1; i > 0; i--) { // Swapping each and every element of the two rows // if (matrix[i - 1][0] < matrix[i][0]) // for (int j = 0; j < 2 * order; j++) { // // // Swapping of the row, if above // // condition satisfied. // temp = matrix[i][j]; // matrix[i][j] = matrix[i - 1][j]; // matrix[i - 1][j] = temp; // } // Directly swapping the rows using pointers saves // time if (matrix[i - 1][0] < matrix[i][0]) { float* temp = matrix[i]; matrix[i] = matrix[i - 1]; matrix[i - 1] = temp; } } // Print matrix after interchange operations. printf("\n=== Augmented Matrix ===\n"); PrintMatrix(matrix, order, order * 2); // Replace a row by sum of itself and a // constant multiple of another row of the matrix for (int i = 0; i < order; i++) { for (int j = 0; j < order; j++) { if (j != i) { temp = matrix[j][i] / matrix[i][i]; for (int k = 0; k < 2 * order; k++) { matrix[j][k] -= matrix[i][k] * temp; } } } } // Multiply each row by a nonzero integer. // Divide row element by the diagonal element for (int i = 0; i < order; i++) { temp = matrix[i][i]; for (int j = 0; j < 2 * order; j++) { matrix[i][j] = matrix[i][j] / temp; } } // print the resultant Inverse matrix. printf("\n=== Inverse Matrix ===\n"); PrintInverse(matrix, order, 2 * order); return; } // Driver code int main() { int order; // Order of the matrix // The matrix must be a square a matrix order = 3; /* float matrix[20][20] = { { 5, 7, 9 }, { 4, 3, 8 }, { 7, 5, 6 }, { 0 } }; */ float** matrix = new float*[20]; for (int i = 0; i < 20; i++) matrix[i] = new float[20]; matrix[0][0] = 5; matrix[0][1] = 7; matrix[0][2] = 9; matrix[1][0] = 4; matrix[1][1] = 3; matrix[1][2] = 8; matrix[2][0] = 7; matrix[2][1] = 5; matrix[2][2] = 6; // Get the inverse of matrix InverseOfMatrix(matrix, order); return 0; }
=== Matrix === 5 7 9 4 3 8 7 5 6 === Augmented Matrix === 7 5 6 0 0 1 5 7 9 1 0 0 4 3 8 0 1 0 === Inverse Matrix === -0.210 0.029 0.276 0.305 -0.314 -0.038 -0.010 0.229 -0.124