I used the Gauss-Jordan exception in C ++ to solve a system of linear equations. The code is working fine. I wonder why lines 1,2,3 in void gauss() cannot be replaced with line 4 (after receiving the wrong output)?
#include <iostream> using namespace std; class Gauss { float a[50][50]; int n; public: void accept() { cout<<"Enter no. of variables: "; cin>>n; for(int i=0;i<n;i++) { for(int j=0;j<n+1;j++) { if(j==n) cout<<"Constant no."<<i+1<<" = "; else cout<<"a["<<i+1<<"]["<<j+1<<"] = "; cin>>a[i][j]; } } } void display() { for(int i=0;i<n;i++) { cout<<"\n"; for(int j=0;j<n+1;j++) { if(j==n) cout<<" "; cout<<a[i][j]<<"\t"; } } } void gauss()//converting augmented matrix to row echelon form { float temp;//Line 1 for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { temp=a[j][i]/a[i][i];//Line 2 for(int k=i;k<n+1;k++) { a[j][k]-=temp*a[i][k];//Line 3 //a[j][k]-=a[j][i]*a[i][k]/a[i][i];//Line 4 } } } } void EnterJordan()//converting to reduced row echelon form { float temp; for(int i=n-1;i>=0;i--) { for(int j=i-1;j>=0;j--) { temp=a[j][i]/a[i][i]; for(int k=n;k>=i;k--) { a[j][k]-=temp*a[i][k]; } } } float x[n]; for(int i=0;i<n;i++)//making leading coefficients zero x[i]=0; for(int i=0;i<n;i++) { for(int j=0;j<n+1;j++) { if(x[i]==0&&j!=n) x[i]=a[i][j]; if(x[i]!=0) a[i][j]/=x[i]; } } } void credits() { for(int i=0;i<n;i++) { cout<<"\nx"<<i+1<<" = "<<a[i][n]<<endl; } } }; int main() { Gauss obj; obj.accept(); cout<<"\n\nAugmented matrix: \n\n\n"; obj.display(); obj.gauss(); cout<<"\n\nRow Echelon form: \n\n\n"; obj.display(); obj.EnterJordan(); cout<<"\n\nReduced row echelon form:\n\n\n"; obj.display(); cout<<"\n\nSolution: \n\n\n"; obj.credits(); return 0; }
Note: My code does not take into account the separation problem when the axis is zero (I select a diagonal element as a support every time). For a specific example, I tried, however, such a case did not occur.
Extended Matrix:
2 1 -1 8 -3 -1 2 -11 -2 1 2 -3
Output Matrix:
1 0 0 2 0 1 0 3 0 0 1 -1
and solution:
x1 = 2 x2 = 3 x3 = -1
Using row 4, the output matrix:
1 0 0 -0.75 0 1 -0 8 0 0 1 -1.5
and solution:
x1 = -0.75 x2 = 8 x3 = -1.5
source share