C++ Program for Gauss-Elimination for solving a System of Linear Equations

//Gauss Elimination
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int n,i,j,k;
    cout.precision(4);        //set precision
    cout.setf(ios::fixed);
    cout<<"\nEnter the no. of equations\n";        
    cin>>n;                //input the no. of equations
    float a[n][n+1],x[n];        //declare an array to store the elements of augmented-matrix    
    cout<<"\nEnter the elements of the augmented-matrix row-wise:\n";
    for (i=0;i<n;i++)
        for (j=0;j<=n;j++)    
            cin>>a[i][j];    //input the elements of array
    for (i=0;i<n;i++)                    //Pivotisation
        for (k=i+1;k<n;k++)
            if (abs(a[i][i])<abs(a[k][i]))
                for (j=0;j<=n;j++)
                {
                    double temp=a[i][j];
                    a[i][j]=a[k][j];
                    a[k][j]=temp;
                }
    cout<<"\nThe matrix after Pivotisation is:\n";
    for (i=0;i<n;i++)            //print the new matrix
    {
        for (j=0;j<=n;j++)
            cout<<a[i][j]<<setw(16);
        cout<<"\n";
    }    
    for (i=0;i<n-1;i++)            //loop to perform the gauss elimination
        for (k=i+1;k<n;k++)
            {
                double t=a[k][i]/a[i][i];
                for (j=0;j<=n;j++)
                    a[k][j]=a[k][j]-t*a[i][j];    //make the elements below the pivot elements equal to zero or elimnate the variables
            }
    
    cout<<"\n\nThe matrix after gauss-elimination is as follows:\n";
    for (i=0;i<n;i++)            //print the new matrix
    {
        for (j=0;j<=n;j++)
            cout<<a[i][j]<<setw(16);
        cout<<"\n";
    }
    for (i=n-1;i>=0;i--)                //back-substitution
    {                        //x is an array whose values correspond to the values of x,y,z..
        x[i]=a[i][n];                //make the variable to be calculated equal to the rhs of the last equation
        for (j=i+1;j<n;j++)
            if (j!=i)            //then subtract all the lhs values except the coefficient of the variable whose value                                   is being calculated
                x[i]=x[i]-a[i][j]*x[j];
        x[i]=x[i]/a[i][i];            //now finally divide the rhs by the coefficient of the variable to be calculated
    }
    cout<<"\nThe values of the variables are as follows:\n";
    for (i=0;i<n;i++)
        cout<<x[i]<<endl;            // Print the values of x, y,z,....    
    return 0;
}


c++ program
Sample 1

c++ program
Sample 2

Tutorial Video:

[wpedon id="7041" align="center"]

22 thoughts on “C++ Program for Gauss-Elimination for solving a System of Linear Equations

  1. Дякую, те що треба!
    циклів надто багато , без образ.

    1. Hi there!
      Actually I also noticed that there are some errors while using this code in Visual Studio. It turns out that we cannot define arrays this way in Visual Studio.
      You can run the program on other compilers like Dev C++ if you want.

  2. What are the cases when its impossible to solve & has more than one solution ?
    Explain plz 🙂

    1. Hello Sakib,
      I’m afraid, the program is not designed to handle the cases of infinite or no solution. However, you may some times get one of the solutions for the case of infinite solutions.

    2. You could add a little code by yourself to determine if the system has no solution by checking if the Echelon Form you get after the Gaussian Elimination part has a row with all zeroes except in the last column. If you find such a row then the system has no solution. Similarly if a row has all zeroes then you have infinite solutions. Hope it helps!

      1. A row with all zeroes but its last column a[i][n] being non zero makes up an invalid equation, like~ 0*x+0*y+….= nonzero
        Which is incorrect 😀
        Thanks Manas Sharma ^_^ 🙂

  3. hey, whenever i run this program, its keeps returning ‘nan’ for the values of x, what do i do?

  4. the code doesn’t work with me .. any help ?
    I used code block and doesn’t work
    I’ll appreciate your help ,thanks

      1. Hi Sara, Hi Manas,

        the header should be changed a llitle bit:
        #include
        #include
        #include // Reason – call of overloaded ‘abs(float&)’ is ambiguous
        using namespace std;

        The usage of namespace should also be eliminated 😉 …

        The compilation using g++-5 and g++-8 using
        g++-5 gauss_elim.pp -o gauss_elimin -Wall -Wextra -std=c++11 -O2

        works properly!

        Best regards and thank you for sharing this code!
        Pavel

  5. small question >>> why did you use >>> float a[n][n+1] in the code not float a[n][n+1]

  6. what code should i add to have:
    1 0 0 0 value
    0 1 0 0 value
    0 0 1 0 value
    0 0 0 1 value

  7. Plz email me and help me with ny question about this program

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.