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:
Vòng lặp for, while, do-while trong Java
Java Program to Implement AVL Tree
Java Web Services – Jersey JAX-RS – REST và sử dụng REST API testing tools với Postman
Configuring a DataSource Programmatically in Spring Boot
Comparing Objects in Java
Spring Security OAuth2 – Simple Token Revocation
OAuth2.0 and Dynamic Client Registration
So sánh HashMap và Hashtable trong Java
Java Deep Learning Essentials - Yusuke Sugomori
Phân biệt JVM, JRE, JDK
Composition, Aggregation, and Association in Java
File Upload with Spring MVC
Java Program to Implement Bit Array
REST Pagination in Spring
Java Program to Implement the Monoalphabetic Cypher
Spring 5 Functional Bean Registration
Java Program to Implement Circular Singly Linked List
Hướng dẫn sử dụng String Format trong Java
Spring Boot - Google OAuth2 Sign-In
Java Program to Generate Random Partition out of a Given Set of Numbers or Characters
Spring Boot - CORS Support
Base64 encoding và decoding trong Java 8
Deque và ArrayDeque trong Java
Java Program to Perform the Sorting Using Counting Sort
Why String is Immutable in Java?
A Quick Guide to Using Keycloak with Spring Boot
Java Program to Apply DFS to Perform the Topological Sorting of a Directed Acyclic Graph
Send email with SMTPS (eg. Google GMail)
Rest Web service: Filter và Interceptor với Jersey 2.x (P2)
Guide to Java OutputStream
Spring Cloud – Tracing Services with Zipkin
The Registration Process With Spring Security