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 Boot Gradle Plugin
Java Program to Find Minimum Element in an Array using Linear Search
Guide to @JsonFormat in Jackson
Handling URL Encoded Form Data in Spring REST
How to Get All Spring-Managed Beans?
Spring Boot With H2 Database
Tìm hiểu cơ chế Lazy Evaluation của Stream trong Java 8
Add Multiple Items to an Java ArrayList
Java Byte Array to InputStream
Java Program to Implement Bit Array
Quick Guide to Spring Controllers
Java Program to Generate Date Between Given Range
Lấy ngày giờ hiện tại trong Java
Jackson Ignore Properties on Marshalling
A Guide to TreeSet in Java
Simple Single Sign-On with Spring Security OAuth2
Query Entities by Dates and Times with Spring Data JPA
A Guide to Apache Commons Collections CollectionUtils
Java Program to Implement Queue using Two Stacks
Introduction to Spring Method Security
Spring Cloud AWS – Messaging Support
So sánh Array và ArrayList trong Java
Class Loaders in Java
Java Program to Perform Preorder Recursive Traversal of a Given Binary Tree
How to Store Duplicate Keys in a Map in Java?
Java Program to Find Inverse of a Matrix
Java Program to Implement Ternary Search Tree
Spring Cloud Bus
Sending Emails with Java
Đồng bộ hóa các luồng trong Java
Java Program to Implement Word Wrap Problem
A Guide to TreeMap in Java