Gauss Jordan Method

#include<stdio.h>

void make1( float a[][20],int, int,int );
void make0( float a[][20],int, int,int );
void show(float a[][20],int r,int c);
int rankA(float a[][20],int r);
int rankAB(float a[][20],int r,int c);

main()
{
    float a[ 20 ][ 20 ];
    int r,c,i,j;
    printf("\nEnter number of variables=");
    scanf("%d",&r);
    c=r+1;
    for(i=0;i<r;i++)
    {
        for(j=0;j<c-1;j++)
        {
            printf("\nEnter coefficient of x%d=",j);
            scanf("%f",&a[i][j]);
        }
        for(;j<c;j++)
        {
            printf("\nEnter constant value=");
            scanf("%f",&a[i][j]);
        }
    }
    printf("\nThe augmented matrix is \n");
    show(a,r,c);
    for(i=0;i<r;i++)
    {
            make1(a,i,r,c);
            show(a,r,c);
            make0(a,i,r,c);
            show(a,r,c);
    }
    if(rankA(a,r)==r && rankAB(a,r,c)==r)
    {
        printf("\nSolutions are\n");
        for(i=0;i<r;i++)
            printf("x%d%d=%f\t",i,i,a[i][c-1]);
    }
    else if(rankA(a,r)==rankAB(a,r,c))
        printf("\nInfinite solutions\n");
    else
        printf("\nNo solutions\n");
}

int rankA(float a[][20],int r)
{
    int rnk=0,i,j;
    for(i=0;i<r;i++)
    {
        if(a[i][i]!=0)
            rnk++;
    }
    return rnk;
}

int rankAB(float a[][20],int r,int c)
{
    int rnk=0,i,j;
    for(i=0;i<r;i++)
    {
        if(a[i][i]!=0)
            rnk++;
        else if(a[i][c]!=0)
            rnk++;
    }
    return rnk;
}
void show(float a[][20],int r,int c)
{
    int i,j;
    for(i=0;i<r;i++)
    {
        for(j=0;j<c-1;j++)
        {
            printf("%20f",a[i][j]);
        }
        printf(" | %20f",a[i][j]);
        printf("\n");
    }
    printf("\n");
}

void make1( float a[][20], int i,int r,int c )
{
  
    float t=a[i][i];
    int j=i;
    printf("\nMaking 1\n");
    if(t==0)
        return;
    for(j=i;j<c;j++)
    {
        a[i][j]=a[i][j]/t;
    }
}

void make0( float a[][20], int k,int r,int c )
{
    int i,j;
    float temp;
    printf("\nMaking 0\n");
    for(i=0;i<r;i++)
    {
      
        if(i!=k)
        {
            temp=a[i][k];
            for(j=k;j<c;j++)
            {
                a[i][j]=a[i][j]-a[k][j]*temp;
            }
        }
    }
}

No comments:

Post a Comment