Calculate the inverse of a matrix

1

I need help with the following code, I do not know why when calculating the inverse matrix of a 3x3 matrix only throws zeros, the problem occurs when performing the operation corresponding to the inverse matrix; The code is as follows:

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>

int ma[3][3],mb[3][3],matriz[0][0],f,c,r[3][3],o,x,e,det,y,d1,d2,d3,r1,r2,r3,p00,p01,p02,p10,p11,p12,p20,p21,p22,Adj[3][3],Inv[3][3];

int main(){

    printf("\n || primero de veras meter las dos matrices 3x3 ||");

printf("\n ingresa la matriz A ");
for(f=0;f<3;f++){

    for(c=0;c<3;c++){

        printf("\n dame el valor de la matriz A  [%i][%i]: ",f,c);
        scanf("%d",&ma[f][c]);
    }//columnas 
}// filas

printf("\n ingresa la matriz B ");
for(f=0;f<3;f++){

    for(c=0;c<3;c++){

        printf("\n dame el valor de la matriz b  [%i][%i]: ",f,c);
        scanf("%d",&mb[f][c]);
    }//columnas 
}// filas


do
            {
                printf("\nMatriz A : 1");   
                printf("\nMatriz B : 2");
                printf("\nSalir : 0");
                printf("\nDe que matriz deseas conocer la matriz inversa : ");
                scanf("%i",&x); 

                if(x==1)
                {
                    //Determinante
                        d1=ma[0][0]*ma[1][1]*ma[2][2];
                        d2=ma[1][0]*ma[2][1]*ma[0][2];
                        d3=ma[2][0]*ma[0][1]*ma[1][2];

                        r1=ma[2][0]*ma[1][1]*ma[0][2];
                        r2=ma[0][0]*ma[2][1]*ma[1][2];
                        r3=ma[1][0]*ma[0][1]*ma[2][2];

                        det=(d1+d2+d3)-(r1+r2+r3);

                    if(det==0)
                    {
                        printf("\nLa matriz no tiene matriz inversa\n");
                    }

                    else
                    {                               
                        //Calculo de la matriz adjunta
                        Adj[0][0]=(ma[1][1]*ma[2][2])-(ma[2][1]*ma[1][2]);//bien
                        Adj[0][1]=((ma[1][0]*ma[2][2])-(ma[2][0]*ma[1][2]))*(-1);//-24
                        Adj[0][2]=(ma[1][0]*ma[2][1])-(ma[2][0]*ma[1][1]);//-9
                        Adj[1][0]=((ma[0][1]*ma[2][2])-(ma[2][1]*ma[0][2]))*(-1);//16
                        Adj[1][1]=(ma[0][0]*ma[2][2])-(ma[2][0]*ma[0][2]);//12
                        Adj[1][2]=((ma[0][0]*ma[2][1])-(ma[2][0]*ma[0][1]))*(-1);//-12
                        Adj[2][0]=(ma[0][1]*ma[1][2])-(ma[1][1]*ma[0][2]);//-56
                        Adj[2][1]=((ma[0][0]*ma[1][2])-(ma[1][0]*ma[0][2]))*(-1);//24
                        Adj[2][2]=(ma[0][0]*ma[1][1])-(ma[1][0]*ma[0][1]);//bien


                            //calculo de la matriz adjunta
                        printf("\nMatriz adjunta:\n");
                        for(f=0;f<3;f++)
                        {
                            for(c=0;c<3;c++)
                            {
                                printf("%i",Adj[c][f]);
                                printf("\t");
                            }   
                            printf("\n\n");
                        }

                        //calculo de la matriz inversa
                        printf("\nLa matriz inversa es: \n\n");
                        for(f=0;f<3;f++)
                        {
                            for(c=0;c<3;c++)
                            {
                                Inv[f][c]=(1/det)*Adj[c][f];
                            }   
                        }

                        for(f=0;f<3;f++)    // Filas
                        {
                            for(c=0;c<3;c++)    // Columnas
                            {           
                                printf("%.2f",Inv[c][f]);
                                printf("\t");
                            }   // Columnas
                            printf("\n\n");
                        }
                    }               
                }

                if(x==2)
                {
                    //Determinante
                        d1=mb[0][0]*mb[1][1]*mb[2][2];
                        d2=mb[1][0]*mb[2][1]*mb[0][2];
                        d3=mb[2][0]*mb[0][1]*mb[1][2];

                        r1=mb[2][0]*mb[1][1]*mb[0][2];
                        r2=mb[0][0]*mb[2][1]*mb[1][2];
                        r3=mb[1][0]*mb[0][1]*mb[2][2];

                        det=(d1+d2+d3)-(r1+r2+r3);

                    if(det==0)
                    {
                        printf("\nLa matriz no tiene matriz inversa\n");
                    }

                    else
                    {                           
                        //calculo de la matriz adjunta
                        Adj[0][0]=(mb[1][1]*mb[2][2])-(mb[2][1]*mb[1][2]);//bien
                        Adj[0][1]=((mb[1][0]*mb[2][2])-(mb[2][0]*mb[1][2]))*(-1);//-24
                        Adj[0][2]=(mb[1][0]*mb[2][1])-(mb[2][0]*mb[1][1]);//-9
                        Adj[1][0]=((mb[0][1]*mb[2][2])-(mb[2][1]*mb[0][2]))*(-1);//16
                        Adj[1][1]=(mb[0][0]*mb[2][2])-(mb[2][0]*mb[0][2]);//12
                        Adj[1][2]=((mb[0][0]*mb[2][1])-(mb[2][0]*mb[0][1]))*(-1);//-12
                        Adj[2][0]=(mb[0][1]*mb[1][2])-(mb[1][1]*mb[0][2]);//-56
                        Adj[2][1]=((mb[0][0]*mb[1][2])-(mb[1][0]*mb[0][2]))*(-1);//24
                        Adj[2][2]=(mb[0][0]*mb[1][1])-(mb[1][0]*mb[0][1]);//bien

                        //calculo de la matriz adjunta
                        printf("\nMatriz adjunta:\n");
                        for(f=0;f<3;f++)
                        {
                            for(c=0;c<3;c++)
                            {
                                printf("%i",Adj[c][f]);
                                printf("\t");
                            }   
                            printf("\n\n");
                        }

                        //calculo de la matriz inversa
                        printf("\nLa matriz inversa es: \n\n");
                        for(f=0;f<3;f++)
                        {
                            for(c=0;c<3;c++)
                            {
                                Inv[f][c]=(1/det)*Adj[c][f];
                            }   
                        }

                        for(f=0;f<3;f++)    // Filas
                        {
                            for(c=0;c<3;c++)    // Columnas
                            {           
                                printf("%.2f",Inv[c][f]);
                                printf("\t");
                            }   // Columnas
                            printf("\n\n");
                        }

                    }           
                }
            }   while(x!=0);    
}
    
asked by Kike Ramzes 28.11.2018 в 02:47
source

0 answers