From 8bf74929e3f74e938d4f74c85203a5acc039fff1 Mon Sep 17 00:00:00 2001 From: leren1 <98456022+leren1@users.noreply.github.com> Date: Fri, 4 Mar 2022 17:25:42 +0100 Subject: [PATCH] Refactor algorithm & add Junit test (fixes #2959) (#2960) --- .../com/thealgorithms/maths/Gaussian.java | 55 +++++++++---------- .../com/thealgorithms/maths/GaussianTest.java | 32 +++++++++++ 2 files changed, 57 insertions(+), 30 deletions(-) create mode 100644 src/test/java/com/thealgorithms/maths/GaussianTest.java diff --git a/src/main/java/com/thealgorithms/maths/Gaussian.java b/src/main/java/com/thealgorithms/maths/Gaussian.java index 29ea4f617..754506549 100644 --- a/src/main/java/com/thealgorithms/maths/Gaussian.java +++ b/src/main/java/com/thealgorithms/maths/Gaussian.java @@ -1,58 +1,53 @@ -/** - * \file - * \brief [Gaussian elimination - * method](https://en.wikipedia.org/wiki/Gaussian_elimination) - * @author [Sachwin Kohli](https://github.com/Sachwin-Kohli) - */ package com.thealgorithms.maths; -import java.util.*; +import java.util.ArrayList; -/** - * Main function - */ public class Gaussian { - public static void main(String[] args) { - int mat_size, i, j, step; - Scanner sc = new Scanner(System.in); - - System.out.println("Matrix Size : "); - mat_size = sc.nextInt(); + public static ArrayList gaussian(int mat_size, ArrayList matrix) { + ArrayList answerArray = new ArrayList(); + int i, j = 0; double[][] mat = new double[mat_size + 1][mat_size + 1]; double[][] x = new double[mat_size][mat_size + 1]; - System.out.println("Enter value of the matrix"); - System.out.println(' '); + // Values from arraylist to matrix for (i = 0; i < mat_size; i++) { for (j = 0; j <= mat_size; j++) { - mat[i][j] = sc.nextInt(); + mat[i][j] = matrix.get(i); } } - // perform Gaussian elimination + mat = gaussianElimination(mat_size, i, mat); + answerArray = valueOfGaussian(mat_size, x, mat); + return answerArray; + } + + // Perform Gaussian elimination + public static double[][] gaussianElimination(int mat_size, int i, double[][] mat) { + int step = 0; for (step = 0; step < mat_size - 1; step++) { for (i = step; i < mat_size - 1; i++) { double a = (mat[i + 1][step] / mat[step][step]); - for (j = step; j <= mat_size; j++) { + for (int j = step; j <= mat_size; j++) { mat[i + 1][j] = mat[i + 1][j] - (a * mat[step][j]); } } } + return mat; + } + + // calcilate the x_1, x_2,... values of the gaussian and save it in an arraylist. + public static ArrayList valueOfGaussian(int mat_size, double[][] x, double[][] mat) { + ArrayList answerArray = new ArrayList(); + int i, j; - System.out.println("Matrix using Gaussian Elimination method: "); - System.out.println(" "); for (i = 0; i < mat_size; i++) { for (j = 0; j <= mat_size; j++) { x[i][j] = mat[i][j]; - System.out.print(mat[i][j] + " "); } - System.out.println(); } - System.out.println("Value of the Gaussian Elimination method: "); - System.out.println(" "); for (i = mat_size - 1; i >= 0; i--) { double sum = 0; @@ -65,8 +60,8 @@ public class Gaussian { } else { x[i][i] = (x[i][mat_size] - sum) / (x[i][i]); } - System.out.print("x" + i + "=" + x[i][i]); - System.out.println(" "); + answerArray.add(x[i][j]); } + return answerArray; } -} +} \ No newline at end of file diff --git a/src/test/java/com/thealgorithms/maths/GaussianTest.java b/src/test/java/com/thealgorithms/maths/GaussianTest.java new file mode 100644 index 000000000..85e3b7e88 --- /dev/null +++ b/src/test/java/com/thealgorithms/maths/GaussianTest.java @@ -0,0 +1,32 @@ +package com.thealgorithms.maths; + +import org.junit.jupiter.api.Test; +import java.util.ArrayList; + +import static com.thealgorithms.maths.Gaussian.gaussian; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class GaussianTest { + + // easy pass test for the whole class. Matrix of 2*3. + @Test + void passTest1() + { + ArrayList list = new ArrayList(); + ArrayList gaussian = new ArrayList(); + ArrayList answer = new ArrayList(); + answer.add(0.0); + answer.add(1.0); + + int matrixSize = 2; + list.add(1.0); + list.add(1.0); + list.add(1.0); + list.add(2.0); + list.add(1.0); + list.add(1.0); + gaussian=gaussian(matrixSize,list); + + assertEquals(answer,gaussian); + } +} \ No newline at end of file