C/Visual C - calcular mariz inversa??

 
Vista:

calcular mariz inversa??

Publicado por Pili (1 intervención) el 23/05/2003 11:59:34
alguien sabe el codigo para q una funcion me calcule la matriz inversa o donde lo puedo conseguir??
muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Cálculo de la matriz inversa en C

Publicado por Alejandro (1153 intervenciones) el 11/06/2025 00:48:24
Para calcular la matriz inversa en C, puedes implementar un algoritmo que utilice el método de la matriz adjunta y el determinante. A continuación, te muestro un ejemplo de cómo hacerlo para una matriz de 3x3. Si necesitas una matriz de un tamaño diferente, el enfoque será similar, pero tendrás que ajustar el código.

Código para calcular la matriz inversa



Aquí tienes un ejemplo de cómo calcular la matriz inversa de una matriz 3x3 en C:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
 
#define SIZE 3
 
// Función para calcular el determinante de una matriz 3x3
float determinant(float matrix[SIZE][SIZE]) {
    return matrix[0][0] * (matrix[1][1] * matrix[2][2] - matrix[1][2] * matrix[2][1]) -
           matrix[0][1] * (matrix[1][0] * matrix[2][2] - matrix[1][2] * matrix[2][0]) +
           matrix[0][2] * (matrix[1][0] * matrix[2][1] - matrix[1][1] * matrix[2][0]);
}
 
// Función para calcular la matriz adjunta
void adjoint(float matrix[SIZE][SIZE], float adj[SIZE][SIZE]) {
    adj[0][0] = matrix[1][1] * matrix[2][2] - matrix[1][2] * matrix[2][1];
    adj[0][1] = -(matrix[1][0] * matrix[2][2] - matrix[1][2] * matrix[2][0]);
    adj[0][2] = matrix[1][0] * matrix[2][1] - matrix[1][1] * matrix[2][0];
    adj[1][0] = -(matrix[0][1] * matrix[2][2] - matrix[0][2] * matrix[2][1]);
    adj[1][1] = matrix[0][0] * matrix[2][2] - matrix[0][2] * matrix[2][0];
    adj[1][2] = -(matrix[0][0] * matrix[2][1] - matrix[0][1] * matrix[2][0]);
    adj[2][0] = matrix[0][1] * matrix[1][2] - matrix[0][2] * matrix[1][1];
    adj[2][1] = -(matrix[0][0] * matrix[1][2] - matrix[0][2] * matrix[1][0]);
    adj[2][2] = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
}
 
// Función para calcular la matriz inversa
int inverse(float matrix[SIZE][SIZE], float inverse[SIZE][SIZE]) {
    float det = determinant(matrix);
    if (det == 0) {
        printf("La matriz no tiene inversa (determinante es 0).\n");
        return 0; // La matriz no es invertible
    }
 
    float adj[SIZE][SIZE];
    adjoint(matrix, adj);
 
    // Calcular la inversa
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            inverse[i][j] = adj[i][j] / det;
        }
    }
    return 1; // La matriz fue invertida exitosamente
}
 
// Función para imprimir la matriz
void printMatrix(float matrix[SIZE][SIZE]) {
    for (int i = 0; i < SIZE; i++) {
        for (int j = 0; j < SIZE; j++) {
            printf("%.2f ", matrix[i][j]);
        }
        printf("\n");
    }
}
 
int main() {
    float matrix[SIZE][SIZE] = {
        {4, 7, 2},
        {3, 6, 1},
        {2, 5, 3}
    };
    float inverseMatrix[SIZE][SIZE];
 
    if (inverse(matrix, inverseMatrix)) {
        printf("La matriz inversa es:\n");
        printMatrix(inverseMatrix);
    }
 
    return 0;
}

Explicación del código



1. Determinante: La función `determinant` calcula el determinante de una matriz 3x3 utilizando la regla de Sarrus.

2. Matriz adjunta: La función `adjoint` calcula la matriz adjunta de la matriz original.

3. Matriz inversa: La función `inverse` utiliza el determinante y la matriz adjunta para calcular la inversa. Si el determinante es cero, la matriz no tiene inversa.

4. Impresión de la matriz: La función `printMatrix` se utiliza para mostrar la matriz en la consola.

5. Ejemplo en `main`: En la función `main`, se define una matriz 3x3 y se llama a la función `inverse` para calcular su inversa.

Consideraciones



- Este código está diseñado para matrices de 3x3. Si necesitas calcular la inversa de matrices de diferentes tamaños, deberás implementar un algoritmo más general, como el método de Gauss-Jordan.
- Asegúrate de manejar adecuadamente los casos en los que la matriz no es invertible (determinante cero).

Con este código, deberías poder calcular la matriz inversa en C. ¡Espero que te sea útil, Pily!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar