Inversa de Matrices

Aca les dejo un codigo en c/c++ para que calculen inversas de matrices...
#include <stdio.h>
#include <stdlib.h>

int main()
{
    float m[3][3],mcf[3][3],mtp[3][3],mi[3][3],mt[3][3],mr[2][1],mb[2][1];
    int f,c,det,opw,opc;
do{
    printf("Ingrese que accion desea realizar:\n");
    printf("1-Si desea calcular un sistema de ecuaciones en forma matricial \n2-Si desea calcular la inversa de una matriz de 3 x 3\n");
    scanf("%i",&opw);
    printf("\n");
    switch(opw)
    {
        case 1:
    for(f=0;f<2;f++)
    {
        for(c=0;c<2;c++)
        {printf ("Ingrese el valor %i,%i de la matriz(recuerde que en se empieza a contar desde 0):\n",f,c);
            scanf("%f",&m[f][c]);
        }
    }
    printf("La matriz que usted ingreso es:\n");
    for(f=0;f<2;f++)
    {
        for(c=0;c<2;c++)
        {printf(" %.0f,",m[f][c]);
        }
        printf("\n");
    }
/*calculo las determinante*/
det=m[0][0]*m[1][1]-m[1][0]*m[0][1];
printf("el determinante es: %i \n",det);
if(det!=0)
{
    printf("A continuacion se detalla la matriz cofactor\n");
    /*Calculo y muestro la matriz cofactor*/
mcf[0][0]=1*m[1][1];
mcf[0][1]=-1*m[1][0];
mcf[1][0]=-1*m[0][1];
mcf[1][1]=1*m[0][0];
for(f=0;f<2;f++)
    {
        for(c=0;c<2;c++)
        {printf(" %.0f,",mcf[f][c]);
        }
        printf("\n");
    }
    /*Calculo y muestro la matriz transpuesta */
    printf("A continuacion se detalla la matriz transpuesta\n");

    for(f=0;f<2;f++)
    {
        for(c=0;c<2;c++)
        {mtp[f][c]=mcf[c][f];
        }

    }
    for(f=0;f<2;f++)
    {
        for(c=0;c<2;c++)
        {printf(" %.0f,",mtp[f][c]);
        }
        printf("\n");
    }
/*Calculo la matriz inversa*/
for(f=0;f<2;f++)
    {
        for(c=0;c<2;c++)
        {mt[f][c]=mtp[f][c]/det;
        }

    }/*corroboro la matriz inversa*/
    mi[0][0]=m[0][0]*mt[0][0]+m[0][1]*mt[1][0];
    mi[0][1]=m[0][0]*mt[0][1]+m[0][1]*mt[1][1];
    mi[1][0]=m[1][0]*mt[0][0]+m[1][1]*mt[1][0];
    mi[1][1]=m[1][0]*mt[0][1]+m[1][1]*mt[1][1];
printf("Si la matriz siguiente no es la Matriz Identidad, fijese el correcto ingreso de datos\n");
    for(f=0;f<2;f++)
    {
        for(c=0;c<2;c++)
        {printf(" %.0f,",mi[f][c]);
        }
        printf("\n");
    }
/*ingreso la matriz b*/

    for(f=0;f<2;f++)
    {
        for(c=0;c<1;c++)
        {printf ("Ingrese el valor %i,%i de la matriz(recuerde que en se empieza a contar desde 0):\n",f,c);
            scanf("%f",&mb[f][c]);
        }
    }
    /*calculo el valor de x e y*/
    mr[0][0]=mt[0][0]*mb[0][0]+mt[0][1]*mb[1][0];
    mr[1][0]=mt[1][0]*mb[0][0]+mt[1][1]*mb[1][0];
    printf("La matriz resultado es:\n");
        for(f=0;f<2;f++)
    {
        for(c=0;c<1;c++)
        {printf("%.2f",mr[f][c]);
        }
        printf("\n");
    }
}
else
{printf("no tiene inversa");
}break;
case 2:
for(f=0;f<3;f++)
    {
        for(c=0;c<3;c++)
        {printf ("Ingrese el valor %i,%i de la matriz(recuerde que en se empieza a contar desde 0):\n",f,c);
            scanf("%f",&m[f][c]);
        }
    }
    printf("La matriz que usted ingreso es:\n");
    for(f=0;f<3;f++)
    {
        for(c=0;c<3;c++)
        {printf(" %.0f,",m[f][c]);
        }
        printf("\n");
    }
    /*Calculo y muestro el Determinante*/
    det=(m[0][0]*m[1][1]*m[2][2]+m[1][0]*m[2][1]*m[0][2]+m[0][1]*m[1][2]*m[2][0])-(m[0][2]*m[1][1]*m[2][0]+m[2][1]*m[1][2]*m[0][0]+m[1][0]*m[0][1]*m[2][2]);
printf("el determinante es: %i \n",det);
if(det!=0)
{printf("La matriz tiene inversa  \n");
/*Calculo la matriz cofactor*/
mcf[0][0]=1*((m[1][1]*m[2][2])-(m[1][2]*m[2][1]));
mcf[0][1]=-1*((m[1][0]*m[2][2])-(m[1][2]*m[2][0]));
mcf[0][2]=1*((m[1][0]*m[2][1])-(m[1][1]*m[2][0]));
mcf[1][0]=-1*((m[0][1]*m[2][2])-(m[0][2]*m[2][1]));
mcf[1][1]=1*((m[0][0]*m[2][2])-(m[0][2]*m[2][0]));
mcf[1][2]=-1*((m[0][0]*m[2][1])-(m[0][1]*m[2][0]));
mcf[2][0]=1*((m[0][1]*m[1][2])-(m[0][2]*m[1][1]));
mcf[2][1]=-1*((m[0][0]*m[1][2])-(m[0][2]*m[1][0]));
mcf[2][2]=1*((m[0][0]*m[1][1])-(m[0][1]*m[1][0]));
for(f=0;f<3;f++)
    {
        for(c=0;c<3;c++)
        {printf(" %.0f,",mcf[f][c]);
        }
        printf("\n");
        /*Calculo y muestro la matriz transpuesta */
    }
    printf("A continuacion se detalla la matriz transpuesta\n");

    for(f=0;f<3;f++)
    {
        for(c=0;c<3;c++)
        {mtp[f][c]=mcf[c][f];
        }

    }
    for(f=0;f<3;f++)
    {
        for(c=0;c<3;c++)
        {printf(" %.0f,",mtp[f][c]);
        }
        printf("\n");
    }
    /*Calculo la matriz inversa*/
    printf("La matriz inversa es: \n");
    for(f=0;f<3;f++)
    {
        for(c=0;c<3;c++)
        {mt[f][c]=mtp[f][c]/det;
        }

    }
    for(f=0;f<3;f++)
    {
        for(c=0;c<3;c++)
        {printf("%.3f    ",mt[f][c]);
        }
        printf("\n");

    }
    /*Corroboro la matriz inversa*/
    mi[0][0]=mt[0][0]*m[0][0]+mt[0][1]*m[1][0]+mt[0][2]*m[2][0];
    mi[0][1]=mt[0][0]*m[0][1]+mt[0][1]*m[1][1]+mt[0][2]*m[2][1];
    mi[0][2]=mt[0][0]*m[0][2]+mt[0][1]*m[1][2]+mt[0][2]*m[2][2];
    mi[1][0]=mt[1][0]*m[0][0]+mt[1][1]*m[1][0]+mt[1][2]*m[2][0];
    mi[1][1]=mt[1][0]*m[0][1]+mt[1][1]*m[1][1]+mt[1][2]*m[2][1];
    mi[1][2]=mt[1][0]*m[0][2]+mt[1][1]*m[1][2]+mt[1][2]*m[2][2];
    mi[2][0]=mt[2][0]*m[0][0]+mt[2][1]*m[1][0]+mt[2][2]*m[2][0];
    mi[2][1]=mt[2][0]*m[0][1]+mt[2][1]*m[1][1]+mt[2][2]*m[2][1];
    mi[2][2]=mt[2][0]*m[0][2]+mt[2][1]*m[1][2]+mt[2][2]*m[2][2];
printf("A continuacion debe imprimirse la matriz identidad si no es asi fijese en el correcto ingreso de datos\n");
    for(f=0;f<3;f++)
    {
        for(c=0;c<3;c++)
        {printf("%.0f ",mi[f][c]);
        }
        printf("\n");

    }
    printf("\n");
    }
    else{printf("La matriz no tiene inversa");}
    break;
    default:
    printf("Usted ha ingresado una opcion incorrecta\n");
    }
printf("Ingrese\n1-Si desea Calcular algo mas\n-Cualquiera si desea salir");
scanf("%i",&opc);
}
while(opc==1);
    system("PAUSE");
    return 0;
}

 

Blogger news

Enter your email address:

Delivered by FeedBurner

Blogroll

About