This is java program to find the solution to the linear equations of any number of variables. The class provides a simple implementation of the Gauss-Seidel method. If the matrix isn’t diagonally dominant the program tries to convert it(if possible) by rearranging the rows.
Here is the source code of the Java Program to Implement Gauss-Seidel Method. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
//This class provides a simple implementation of the GaussSeidel method for solving systems of linear equations. //If the matrix isn't diagonally dominant the program tries to convert it(if possible) by rearranging the rows. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.Arrays; import java.util.StringTokenizer; public class Gauss_Seidel { public static final int MAX_ITERATIONS = 100; private double[][] M; public Gauss_Seidel(double [][] matrix) { M = matrix; } public void print() { int n = M.length; for (int i = 0; i < n; i++) { for (int j = 0; j < n + 1; j++) System.out.print(M[i][j] + " "); System.out.println(); } } public boolean transformToDominant(int r, boolean[] V, int[] R) { int n = M.length; if (r == M.length) { double[][] T = new double[n][n+1]; for (int i = 0; i < R.length; i++) { for (int j = 0; j < n + 1; j++) T[i][j] = M[R[i]][j]; } M = T; return true; } for (int i = 0; i < n; i++) { if (V[i]) continue; double sum = 0; for (int j = 0; j < n; j++) sum += Math.abs(M[i][j]); if (2 * Math.abs(M[i][r]) > sum) { // diagonally dominant? V[i] = true; R[r] = i; if (transformToDominant(r + 1, V, R)) return true; V[i] = false; } } return false; } public boolean makeDominant() { boolean[] visited = new boolean[M.length]; int[] rows = new int[M.length]; Arrays.fill(visited, false); return transformToDominant(0, visited, rows); } public void solve() { int iterations = 0; int n = M.length; double epsilon = 1e-15; double[] X = new double[n]; // Approximations double[] P = new double[n]; // Prev Arrays.fill(X, 0); while (true) { for (int i = 0; i < n; i++) { double sum = M[i][n]; // b_n for (int j = 0; j < n; j++) if (j != i) sum -= M[i][j] * X[j]; // Update x_i to use in the next row calculation X[i] = 1/M[i][i] * sum; } System.out.print("X_" + iterations + " = {"); for (int i = 0; i < n; i++) System.out.print(X[i] + " "); System.out.println("}"); iterations++; if (iterations == 1) continue; boolean stop = true; for (int i = 0; i < n && stop; i++) if (Math.abs(X[i] - P[i]) > epsilon) stop = false; if (stop || iterations == MAX_ITERATIONS) break; P = (double[])X.clone(); } } public static void main(String[] args) throws IOException { int n; double[][] M; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); PrintWriter writer = new PrintWriter(System.out, true); System.out.println("Enter the number of variables in the equation:"); n = Integer.parseInt(reader.readLine()); M = new double[n][n+1]; System.out.println("Enter the augmented matrix:"); for (int i = 0; i < n; i++) { StringTokenizer strtk = new StringTokenizer(reader.readLine()); while (strtk.hasMoreTokens()) for (int j = 0; j < n + 1 && strtk.hasMoreTokens(); j++) M[i][j] = Integer.parseInt(strtk.nextToken()); } Gauss_Seidel gausSeidel = new Gauss_Seidel(M); if (!gausSeidel.makeDominant()) { writer.println("The system isn't diagonally dominant: " + "The method cannot guarantee convergence."); } writer.println(); gausSeidel.print(); gausSeidel.solve(); } }
Output:
$ javac Gauss_Seidel.java $ java Gauss_Seidel Enter the number of variables in the equation: 2 Enter the augmented matrix: 1 2 3 6 5 4 6.0 5.0 4.0 1.0 2.0 3.0 X_0 = {0.6666666666666666 1.1666666666666667 } X_1 = {-0.30555555555555564 1.652777777777778 } X_2 = {-0.7106481481481481 1.855324074074074 } X_3 = {-0.8794367283950617 1.9397183641975309 } X_4 = {-0.9497653034979425 1.9748826517489713 } X_5 = {-0.9790688764574759 1.9895344382287379 } X_6 = {-0.9912786985239483 1.9956393492619742 } X_7 = {-0.9963661243849785 1.9981830621924892 } X_8 = {-0.9984858851604077 1.9992429425802039 } X_9 = {-0.9993691188168363 1.999684559408418 } X_10 = {-0.9997371328403484 1.999868566420174 } X_11 = {-0.9998904720168117 1.9999452360084058 } X_12 = {-0.999954363340338 1.999977181670169 } X_13 = {-0.9999809847251406 1.9999904923625702 } X_14 = {-0.9999920769688085 1.9999960384844042 } X_15 = {-0.9999966987370034 1.9999983493685016 } X_16 = {-0.9999986244737512 1.9999993122368755 } X_17 = {-0.9999994268640631 1.9999997134320315 } X_18 = {-0.9999997611933598 1.9999998805966799 } X_19 = {-0.9999999004972331 1.9999999502486165 } X_20 = {-0.9999999585405137 1.9999999792702567 } X_21 = {-0.999999982725214 1.999999991362607 } X_22 = {-0.9999999928021724 1.9999999964010862 } X_23 = {-0.999999997000905 1.9999999985004524 } X_24 = {-0.999999998750377 1.9999999993751885 } X_25 = {-0.9999999994793237 1.9999999997396618 } X_26 = {-0.9999999997830514 1.9999999998915257 } X_27 = {-0.9999999999096048 1.9999999999548024 } X_28 = {-0.9999999999623352 1.9999999999811675 } X_29 = {-0.9999999999843061 1.999999999992153 } X_30 = {-0.9999999999934606 1.9999999999967302 } X_31 = {-0.9999999999972751 1.9999999999986375 } X_32 = {-0.9999999999988646 1.9999999999994322 } X_33 = {-0.9999999999995268 1.9999999999997633 } X_34 = {-0.9999999999998028 1.9999999999999014 } X_35 = {-0.9999999999999176 1.9999999999999587 } X_36 = {-0.9999999999999656 1.9999999999999827 } X_37 = {-0.9999999999999855 1.9999999999999927 } X_38 = {-0.9999999999999938 1.999999999999997 } X_39 = {-0.9999999999999973 1.9999999999999987 } X_40 = {-0.9999999999999988 1.9999999999999993 } X_41 = {-0.9999999999999993 1.9999999999999996 }
Related posts:
Spring 5 and Servlet 4 – The PushBuilder
Java Program to Check if a Matrix is Invertible
A Guide to System.exit()
Java Program to Check Cycle in a Graph using Topological Sort
Hướng dẫn Java Design Pattern – Mediator
Luồng Daemon (Daemon Thread) trong Java
Câu lệnh điều khiển vòng lặp trong Java (break, continue)
Java Program to Represent Graph Using 2D Arrays
Initialize a HashMap in Java
A Guide to the ViewResolver in Spring MVC
Java Program to Encode a Message Using Playfair Cipher
Lập trình đa luồng với Callable và Future trong Java
Spring Boot - Hystrix
Tạo số và chuỗi ngẫu nhiên trong Java
Spring RestTemplate Request/Response Logging
Từ khóa throw và throws trong Java
Introduction to Eclipse Collections
Java Program to Repeatedly Search the Same Text (such as Bible by building a Data Structure)
Java Program to Create a Minimal Set of All Edges Whose Addition will Convert it to a Strongly Conne...
Java Program to Implement Hash Trie
Introduction to Apache Commons Text
Different Ways to Capture Java Heap Dumps
Template Engines for Spring
New Features in Java 13
Java Program to Implement First Fit Decreasing for 1-D Objects and M Bins
Java Program to Check whether Graph is a Bipartite using 2 Color Algorithm
Java Program to Implement Kosaraju Algorithm
Understanding Memory Leaks in Java
Convert Hex to ASCII in Java
How to Find an Element in a List with Java
Xây dựng ứng dụng Client-Server với Socket trong Java
Hashtable trong java