• Domingo 22 de Diciembre de 2024, 12:16

Autor Tema:  Re: Matriz inversa en cualquier lenguaje  (Leído 6106 veces)

hjom

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
    • http://www.hjom.itgo.com
Re: Matriz inversa en cualquier lenguaje
« en: Lunes 10 de Junio de 2002, 17:25 »
0
Nesesito urgente el codigo de la matriz inversa en C, o en Fox Pro.
HJOM

dheak

  • Miembro activo
  • **
  • Mensajes: 62
    • Ver Perfil
Matriz inversa en cualquier lenguaje
« Respuesta #1 en: Martes 11 de Junio de 2002, 00:30 »
0
hola. Oye, te hecho el codigo que sigue, no lo he repasado mucho, asi que seria bueno que lo revisaras un poquito, aunque creo que esta bien, pero no estaria de mas.

Te hecho todas las funciones excepto la del determinante. Lo he hecho siguiendo la formula de A^(-1) = ((adj(A))^t) / det(A). Es lo siguiente:

#define n 3  /* vamos a hacer matriz 3x3 cambiando n a otro valor tendremos nxn*/

int* traspuesta(int matriz[][]);
int det(int matriz[][]);
int* adj(int matriz[][]);
int* inversa(int matriz[][]);

void main()
{
 int matriz[n][n];
 int inv[n][n];
 /*
   ...
   aqui vendria el codigo pa rellenar la matriz
   ...
 */
 inv = inversa(matriz);
 /*
  ...
  ale, ya tienes la inversa en inv[][]
  a usarla agusto
  ...
 */
}

int* inversa(int matriz[][])
{
 int mat1[n][n];
 int mat2[n][n];
 int i,j,k;
 mat1 = adj(matriz);
 mat2 = traspuesta(mat1);
 k = det(matriz);
 for (i=0 ; i<n ; i++)
  for (j=0 ; j<n ; j++)
   mat2[j] = mat2[j] / k;
 return mat2;
}

int* traspuesta(int matriz[][])
{
 /* calcula la traspuesta de matriz[][] */
 int i,j;
 int mat[n][n];
 for (i = 0 ; i<n ; i++)
  for (j=0 ; j<n ; j++)
   mat[j] = matriz[j];
 return mat;
}

int* adj(int matriz[][])
{
 /* calcula la matriz de los adjuntos de matriz[][] */
 int mat[n][n];
 int temp[n-1][n-1];
 int i,j,a,b,k,m;
 k = m = 0;
 for (i=0 ; i<n ; i++)
 {
   for (j=0 ; j<n ; j++)
   {
    for (a=0 ; a<n ; a++)
    {
     for (b=0 ; b<n ; b++)
     {
      if (a>=i) k = 1;
      else k = 0;
      if (b>=j) m = 1;
      else m = 0;
      if ((a != i) || (b !=i))
       temp[a-k][b-m] = matriz[j];
     }
    }
   }
  }
 }
 return mat;
}

int det(matriz[][])
{
 /* calcula el determinante de la matriz. Esta funcion te la dejo pa ti;) */
 return 0;
}

Espero que te sirva de algo. Saludos.