This is java program to find the solution to the linear equations of any number of variables using the method of Gauss-Jordan algorithm.
Here is the source code of the Java Program to Implement Gauss Jordan Elimination. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
//This is a sample program to find the solution to the linear equations using the method of Gauss-Jordan algorithm
import java.util.Scanner;
public class Gauss_Jordan_Elimination
{
private static final double EPSILON = 1e-8;
private final int N; // N-by-N system
private double[][] a; // N-by-N+1 augmented matrix
// Gauss-Jordan elimination with partial pivoting
public Gauss_Jordan_Elimination(double[][] A, double[] b)
{
N = b.length;
// build augmented matrix
a = new double[N][N+N+1];
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
a[i][j] = A[i][j];
// only need if you want to find certificate of infeasibility (or compute inverse)
for (int i = 0; i < N; i++)
a[i][N+i] = 1.0;
for (int i = 0; i < N; i++)
a[i][N+N] = b[i];
solve();
assert check(A, b);
}
private void solve()
{
// Gauss-Jordan elimination
for (int p = 0; p < N; p++)
{
int max = p;
for (int i = p+1; i < N; i++)
{
if (Math.abs(a[i][p]) > Math.abs(a[max][p]))
{
max = i;
}
}
// exchange row p with row max
swap(p, max);
// singular or nearly singular
if (Math.abs(a[p][p]) <= EPSILON)
{
continue;
// throw new RuntimeException("Matrix is singular or nearly singular");
}
// pivot
pivot(p, p);
}
// show();
}
// swap row1 and row2
private void swap(int row1, int row2)
{
double[] temp = a[row1];
a[row1] = a[row2];
a[row2] = temp;
}
// pivot on entry (p, q) using Gauss-Jordan elimination
private void pivot(int p, int q)
{ // everything but row p and column q
for (int i = 0; i < N; i++) {
double alpha = a[i][q] / a[p][q];
for (int j = 0; j <= N+N; j++)
{
if (i != p && j != q) a[i][j] -= alpha * a[p][j];
}
}
// zero out column q
for (int i = 0; i < N; i++)
if (i != p) a[i][q] = 0.0;
// scale row p (ok to go from q+1 to N, but do this for consistency with simplex pivot)
for (int j = 0; j <= N+N; j++)
if (j != q) a[p][j] /= a[p][q];
a[p][q] = 1.0;
}
// extract solution to Ax = b
public double[] primal()
{
double[] x = new double[N];
for (int i = 0; i < N; i++)
{
if (Math.abs(a[i][i]) > EPSILON)
x[i] = a[i][N+N] / a[i][i];
else if (Math.abs(a[i][N+N]) > EPSILON)
return null;
}
return x;
}
// extract solution to yA = 0, yb != 0
public double[] dual()
{
double[] y = new double[N];
for (int i = 0; i < N; i++)
{
if ( (Math.abs(a[i][i]) <= EPSILON) && (Math.abs(a[i][N+N]) > EPSILON) )
{
for (int j = 0; j < N; j++)
y[j] = a[i][N+j];
return y;
}
}
return null;
}
// does the system have a solution?
public boolean isFeasible()
{
return primal() != null;
}
// print the tableaux
private void show()
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
System.out.print(" "+a[i][j]);
}
System.out.print("| ");
for (int j = N; j < N+N; j++)
{
System.out.print(" "+a[i][j]);
}
System.out.print("| \n"+a[i][N+N]);
}
System.out.println();
}
// check that Ax = b or yA = 0, yb != 0
private boolean check(double[][] A, double[] b)
{
// check that Ax = b
if (isFeasible())
{
double[] x = primal();
for (int i = 0; i < N; i++)
{
double sum = 0.0;
for (int j = 0; j < N; j++)
{
sum += A[i][j] * x[j];
}
if (Math.abs(sum - b[i]) > EPSILON)
{
System.out.println("not feasible");
System.out.println(i+" = "+b[i]+", sum = "+sum+"\n");
return false;
}
}
return true;
}
// or that yA = 0, yb != 0
else
{
double[] y = dual();
for (int j = 0; j < N; j++)
{
double sum = 0.0;
for (int i = 0; i < N; i++)
{
sum += A[i][j] * y[i];
}
if (Math.abs(sum) > EPSILON)
{
System.out.println("invalid certificate of infeasibility");
System.out.println("sum = "+sum+"\n");
return false;
}
}
double sum = 0.0;
for (int i = 0; i < N; i++)
{
sum += y[i] * b[i];
}
if (Math.abs(sum) < EPSILON)
{
System.out.println("invalid certificate of infeasibility");
System.out.println("yb = "+sum+"\n");
return false;
}
return true;
}
}
public static void test(double[][] A, double[] b)
{
Gauss_Jordan_Elimination gaussian = new Gauss_Jordan_Elimination(A, b);
if (gaussian.isFeasible())
{
System.out.println("Solution to Ax = b");
double[] x = gaussian.primal();
for (int i = 0; i < x.length; i++)
{
System.out.println(" "+x[i]+"\n");
}
}
else
{
System.out.println("Certificate of infeasibility");
double[] y = gaussian.dual();
for (int j = 0; j < y.length; j++)
{
System.out.println(" "+y[j]+"\n");
}
}
System.out.println();
}
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter the number of variables in the equations: ");
int n = input.nextInt();
System.out.println("Enter the coefficients of each variable for each equations");
System.out.println("ax + by + cz + ... = d");
double [][]mat = new double[n][n];
double []constants = new double[n];
//input
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
mat[i][j] = input.nextDouble();
}
constants[i] = input.nextDouble();
}
test(mat, constants);
}
}
Output:
$ javac Gauss_Jordan_Elimination.java $ java Gauss_Jordan_Elimination Enter the number of variables in the equations: 2 Enter the coefficients of each variable for each equations ax + by + cz + ... = d 1 2 3 6 5 4 Solution to Ax = b -1.0 2.0
Related posts:
Giới thiệu Java 8
Java Program to Implement Leftist Heap
Java Program to Check whether Directed Graph is Connected using DFS
Quick Guide to Spring Controllers
Guide to the Synchronized Keyword in Java
Lấy ngày giờ hiện tại trong Java
Java Program to Implement the Schonhage-Strassen Algorithm for Multiplication of Two Numbers
Sorting Query Results with Spring Data
Spring @Primary Annotation
Java Program to Check whether Directed Graph is Connected using BFS
Convert String to int or Integer in Java
Spring Boot - Tracing Micro Service Logs
Java Program to Represent Graph Using 2D Arrays
Java Program to Implement Sieve Of Eratosthenes
String Processing with Apache Commons Lang 3
Spring Boot - OAuth2 with JWT
Setting a Request Timeout for a Spring REST API
Java Program to Create a Minimal Set of All Edges Whose Addition will Convert it to a Strongly Conne...
Guide to CountDownLatch in Java
Spring Boot Tutorial – Bootstrap a Simple Application
Java Program to Compare Binary and Sequential Search
Java Streams vs Vavr Streams
Hướng dẫn Java Design Pattern – Iterator
Consumer trong Java 8
Guide to Java 8 groupingBy Collector
Hướng dẫn Java Design Pattern – Abstract Factory
Java Program to Generate All Possible Combinations of a Given List of Numbers
Java Program to Generate Date Between Given Range
Java Program to Implement Meldable Heap
Read an Outlook MSG file
Using JWT with Spring Security OAuth
Unsatisfied Dependency in Spring