Matrix Inverse & Transpose- C Program

Program:
#include<stdio.h>
#include<math.h>
void readmatrix(int x[10][10],int);
void showmatrix(int g[10][10],int);
void transpose(int y[10][10],int);
int det(int a[10][10],int);
void inv(int a[10][10],int);
main()
{
    int a[10][10],m,p;
    printf("Enter the order of the matrix:\n");
    scanf("%d",&m);
    printf("Enter the elements for the matrix:\n");
    readmatrix(a,m);
    printf("Matrix:\n");
    showmatrix(a,m);
    printf("Transpose of the above matrix:\n");
    transpose(a,m);
    p=det(a,m);
    printf("\nDetarminant=%d\n",p);
    inv(a,m);
}
void transpose(int y[10][10],int m)
{
    int i,j;
    int t[10][10];
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
        {
            t[i][j]=y[j][i];
        }
    }
    showmatrix(t,m);
}
int det(int a[10][10],int m)
{
    int i,j,k,l,dtr,b[10][10];
    if(m==1)
         return a[0][0];
    dtr=0;
    for(i=0;i<m;i++)
    {
            for(j=0;j<m-1;j++)
        {
            for(k=0,l=0;k<m-1;++k,++l)
            {
                if(i==l)
                     ++l;
                b[j][k]=a[j+1][l];
            }
        }
        dtr+=pow(-1,i)*a[0][i]*det(b,m-1);
    }
    return dtr;
}
void inv(int a[10][10],int m)
{
    int i,j,k,l,p,q,b[10][10],c[10][10],d;
    float in[10][10];
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
        {
            for(k=0,p=0;k<m-1;++k,++p)
            {
                for(l=0,q=0;l<m-1;++l,++q)
                {
                    if(p==i)
                        ++p;
                    if(q==j)
                        ++q;
                    b[k][l]=a[p][q];
                }
            }
            c[i][j]=pow(-1,i+j)*det(b,m-1);
        }
    }
    d=det(a,m);
    printf("\n\nThe inverse matrix\n\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
        {
            in[i][j]=c[i][j];
            in[i][j]/=d;
            printf("%f\t",in[i][j]);
        }
        printf("\n");
    }
}

void readmatrix(int x[10][10],int ord)
{
    int i,j;
   
    for(i=0;i<ord;i++)
        {
        for(j=0;j<ord;j++)
            {
            scanf("%d",&x[i][j]);
            }
        }
}

void showmatrix(int g[10][10],int ord)
{
    int i,j;
        for(i=0;i<ord;i++)
        {
        for(j=0;j<ord;j++)
                    {
            printf("%d\t",g[i][j]);
            }
        printf("\n");
                }
}

Output:
nn@linuxmint ~ $ gcc c22.c -lm
nn@linuxmint ~ $ ./a.out
Enter the order of the matrix:
2
Enter the elements for the matrix:
4
2
1
3
Matrix:
4    2   
1    3   
Transpose of the above matrix:
4    1   
2    3   

Detarminant=10


The inverse matrix

0.300000    -0.100000   
-0.200000    0.400000   
nn@linuxmint ~ $

0 comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...