From f84d4135bcee56a8f5e12b0e55b6d6add311d9d3 Mon Sep 17 00:00:00 2001 From: kvadrik <41710943+kvadrik@users.noreply.github.com> Date: Sat, 14 Mar 2026 23:55:10 +0200 Subject: [PATCH 01/11] Added quadratic mean Added a quadratic mean of the given numbers, sqrt ((n1^2+n2^2+...+nk^2)/k). --- src/main/java/com/thealgorithms/maths/Means.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/thealgorithms/maths/Means.java b/src/main/java/com/thealgorithms/maths/Means.java index 5445a3caebc7..9cf2075e5fc9 100644 --- a/src/main/java/com/thealgorithms/maths/Means.java +++ b/src/main/java/com/thealgorithms/maths/Means.java @@ -107,6 +107,13 @@ public static Double harmonic(final Iterable numbers) { return size / sumOfReciprocals; } + public static Double quadratic(final Iterable numbers) { + checkIfNotEmpty(numbers); + double sum = StreamSupport.stream(numbers.spliterator(), false).reduce(0d, (x, y) -> x * x + y * y); + int size = IterableUtils.size(numbers); + return Math.sqrt(sum / size); + } + /** * Validates that the input iterable is not empty. * From 255ab52e968225ac211d1649228191f5e20baa02 Mon Sep 17 00:00:00 2001 From: kvadrik <41710943+kvadrik@users.noreply.github.com> Date: Sun, 15 Mar 2026 00:20:05 +0200 Subject: [PATCH 02/11] Added tests for quadratic mean --- .../com/thealgorithms/maths/MeansTest.java | 54 ++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/maths/MeansTest.java b/src/test/java/com/thealgorithms/maths/MeansTest.java index deee0a931910..aa8eb07ede3a 100644 --- a/src/test/java/com/thealgorithms/maths/MeansTest.java +++ b/src/test/java/com/thealgorithms/maths/MeansTest.java @@ -172,6 +172,54 @@ void testHarmonicMeanWithLinkedList() { assertEquals(expected, Means.harmonic(numbers), EPSILON); } + // ========== Quadratic Mean Tests ========== + + @Test + void testQuadraticMeanThrowsExceptionForEmptyList() { + List numbers = new ArrayList<>(); + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> Means.quadratic(numbers)); + assertTrue(exception.getMessage().contains("Empty list")); + } + + @Test + void testHarmonicMeanTwoNumbers() { + List numbers = Arrays.asList(2.0, 6.0); + double expected = Math.sqrt(20.0); + assertEquals(expected, Means.quadratic(numbers), EPSILON); + } + + @Test + void testHarmonicMeanTwoNumbers() { + List numbers = Arrays.asList(1.0, 7.0); + assertEquals(5.0, Means.quadratic(numbers), EPSILON); + } + + @Test + void testQuadraticMeanWithLinkedList() { + LinkedList numbers = new LinkedList<>(Arrays.asList(3.0, 6.0, 9.0)); + double expected = Math.sqrt(42.0); + assertEquals(expected, Means.quadratic(numbers), EPSILON); + } + + @Test + void testQuadraticMeanWithLinkedList() { + LinkedList numbers = new LinkedList<>(Arrays.asList(1.0, 2.0, 4.0)); + double expected = Math.sqrt(7.0); + assertEquals(expected, Means.quadratic(numbers), EPSILON); + } + + @Test + void testQuadraticMeanWithLinkedList() { + LinkedList numbers = new LinkedList<>(Arrays.asList(1.0, 5.0, 11.0)); + assertEquals(7.0, Means.quadratic(numbers), EPSILON); + } + + @Test + void testQuadraticMeanWithLinkedList() { + LinkedList numbers = new LinkedList<>(Arrays.asList(5.0, 5.0, 5.0)); + assertEquals(5.0, Means.quadratic(numbers), EPSILON); + } + // ========== Additional Edge Case Tests ========== @Test @@ -198,21 +246,25 @@ void testAllMeansConsistencyForIdenticalValues() { double arithmetic = Means.arithmetic(numbers); double geometric = Means.geometric(numbers); double harmonic = Means.harmonic(numbers); + double quadratic = Means.quadratic(numbers); assertEquals(7.5, arithmetic, EPSILON); assertEquals(7.5, geometric, EPSILON); assertEquals(7.5, harmonic, EPSILON); + assertEquals(7.5, quadratic, EPSILON); } @Test void testMeansRelationship() { - // For positive numbers, harmonic mean ≤ geometric mean ≤ arithmetic mean + // For positive numbers, harmonic mean ≤ geometric mean ≤ arithmetic mean ≤ quadratic mean List numbers = Arrays.asList(2.0, 4.0, 8.0); double arithmetic = Means.arithmetic(numbers); double geometric = Means.geometric(numbers); double harmonic = Means.harmonic(numbers); + double quadratic = Means.quadratic(numbers); assertTrue(harmonic <= geometric, "Harmonic mean should be ≤ geometric mean"); assertTrue(geometric <= arithmetic, "Geometric mean should be ≤ arithmetic mean"); + assertTrue(arithmetic <= quadratic, "Arithmetic mean should be ≤ quadratic mean"); } } From b7941abaec4e6eac8caa587bc760913ba31cddf3 Mon Sep 17 00:00:00 2001 From: kvadrik <41710943+kvadrik@users.noreply.github.com> Date: Sun, 15 Mar 2026 00:23:11 +0200 Subject: [PATCH 03/11] Corrected quadratic mean --- src/main/java/com/thealgorithms/maths/Means.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/thealgorithms/maths/Means.java b/src/main/java/com/thealgorithms/maths/Means.java index 9cf2075e5fc9..e5e48e386b7d 100644 --- a/src/main/java/com/thealgorithms/maths/Means.java +++ b/src/main/java/com/thealgorithms/maths/Means.java @@ -109,9 +109,9 @@ public static Double harmonic(final Iterable numbers) { public static Double quadratic(final Iterable numbers) { checkIfNotEmpty(numbers); - double sum = StreamSupport.stream(numbers.spliterator(), false).reduce(0d, (x, y) -> x * x + y * y); + double sumOfSquares = StreamSupport.stream(numbers.spliterator(), false).reduce(0d, (x, y) -> x + y * y); int size = IterableUtils.size(numbers); - return Math.sqrt(sum / size); + return Math.sqrt(sumOfSquares / size); } /** From 0db086fa286be806d2fddef02335bd40caae0603 Mon Sep 17 00:00:00 2001 From: kvadrik <41710943+kvadrik@users.noreply.github.com> Date: Sun, 15 Mar 2026 00:35:36 +0200 Subject: [PATCH 04/11] Added comment to quadratic mean --- src/main/java/com/thealgorithms/maths/Means.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/main/java/com/thealgorithms/maths/Means.java b/src/main/java/com/thealgorithms/maths/Means.java index e5e48e386b7d..37a7c2befbfc 100644 --- a/src/main/java/com/thealgorithms/maths/Means.java +++ b/src/main/java/com/thealgorithms/maths/Means.java @@ -107,6 +107,21 @@ public static Double harmonic(final Iterable numbers) { return size / sumOfReciprocals; } + /** + * Computes the quadratic mean (root mean square) of the given numbers. + *

+ * The quadratic mean is calculated as: √[(x₁^2 × x₂^2 × ... × xₙ^2)/n] + *

+ *

+ * Example: For numbers [1, 7], the quadratic mean is √[(1^2+7^2)/2] = √25 = 5.0 + *

+ * + * @param numbers the input numbers (must not be empty) + * @return the quadratic mean of the input numbers + * @throws IllegalArgumentException if the input is empty + * @see Quadratic + * Mean + */ public static Double quadratic(final Iterable numbers) { checkIfNotEmpty(numbers); double sumOfSquares = StreamSupport.stream(numbers.spliterator(), false).reduce(0d, (x, y) -> x + y * y); From a41656fbdfa5002ccff09caa18d247690afacc4d Mon Sep 17 00:00:00 2001 From: kvadrik <41710943+kvadrik@users.noreply.github.com> Date: Sun, 15 Mar 2026 00:52:48 +0200 Subject: [PATCH 05/11] Corrected quadratic mean tests --- .../com/thealgorithms/maths/MeansTest.java | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/test/java/com/thealgorithms/maths/MeansTest.java b/src/test/java/com/thealgorithms/maths/MeansTest.java index aa8eb07ede3a..927aa5c0dd7e 100644 --- a/src/test/java/com/thealgorithms/maths/MeansTest.java +++ b/src/test/java/com/thealgorithms/maths/MeansTest.java @@ -182,43 +182,42 @@ void testQuadraticMeanThrowsExceptionForEmptyList() { } @Test - void testHarmonicMeanTwoNumbers() { - List numbers = Arrays.asList(2.0, 6.0); - double expected = Math.sqrt(20.0); - assertEquals(expected, Means.quadratic(numbers), EPSILON); + void testQuadraticMeanSingleNumber() { + LinkedHashSet numbers = new LinkedHashSet<>(Arrays.asList(2.5)); + assertEquals(2.5, Means.quadratic(numbers), EPSILON); } @Test - void testHarmonicMeanTwoNumbers() { + void testQuadraticMeanTwoNumbers() { List numbers = Arrays.asList(1.0, 7.0); assertEquals(5.0, Means.quadratic(numbers), EPSILON); } @Test - void testQuadraticMeanWithLinkedList() { - LinkedList numbers = new LinkedList<>(Arrays.asList(3.0, 6.0, 9.0)); - double expected = Math.sqrt(42.0); + void testQuadraticMeanMultipleNumbers() { + List numbers = new Vector<>(Arrays.asList(1.0, 2.5, 3.0, 7.5, 10.0)); + double expected = Math.sqrt(34.5); assertEquals(expected, Means.quadratic(numbers), EPSILON); } @Test - void testQuadraticMeanWithLinkedList() { - LinkedList numbers = new LinkedList<>(Arrays.asList(1.0, 2.0, 4.0)); - double expected = Math.sqrt(7.0); + void testQuadraticMeanThreeNumbers() { + LinkedList numbers = Arrays.asList(3.0, 6.0, 9.0); + double expected = Math.sqrt(42.0); assertEquals(expected, Means.quadratic(numbers), EPSILON); - } + } @Test - void testQuadraticMeanWithLinkedList() { - LinkedList numbers = new LinkedList<>(Arrays.asList(1.0, 5.0, 11.0)); - assertEquals(7.0, Means.quadratic(numbers), EPSILON); - } + void testQuadraticMeanIdenticalNumbers() { + LinkedList numbers = Arrays.asList(5.0, 5.0, 5.0); + assertEquals(5.0, Means.quadratic(numbers), EPSILON); + } @Test void testQuadraticMeanWithLinkedList() { - LinkedList numbers = new LinkedList<>(Arrays.asList(5.0, 5.0, 5.0)); - assertEquals(5.0, Means.quadratic(numbers), EPSILON); - } + LinkedList numbers = new LinkedList<>(Arrays.asList(1.0, 5.0, 11.0)); + assertEquals(7.0, Means.quadratic(numbers), EPSILON); + } // ========== Additional Edge Case Tests ========== From b5b709d2d65b8b44541c341b4569ab80360be2a2 Mon Sep 17 00:00:00 2001 From: kvadrik <41710943+kvadrik@users.noreply.github.com> Date: Sun, 15 Mar 2026 01:14:54 +0200 Subject: [PATCH 06/11] Replaced sqrt by pow --- src/main/java/com/thealgorithms/maths/Means.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/maths/Means.java b/src/main/java/com/thealgorithms/maths/Means.java index 37a7c2befbfc..6480b365e681 100644 --- a/src/main/java/com/thealgorithms/maths/Means.java +++ b/src/main/java/com/thealgorithms/maths/Means.java @@ -126,7 +126,7 @@ public static Double quadratic(final Iterable numbers) { checkIfNotEmpty(numbers); double sumOfSquares = StreamSupport.stream(numbers.spliterator(), false).reduce(0d, (x, y) -> x + y * y); int size = IterableUtils.size(numbers); - return Math.sqrt(sumOfSquares / size); + return Math.pow(sumOfSquares / size, 0.5); } /** From f2420e6d10e7b103828a581440d67094265d53ed Mon Sep 17 00:00:00 2001 From: kvadrik <41710943+kvadrik@users.noreply.github.com> Date: Sun, 15 Mar 2026 01:28:39 +0200 Subject: [PATCH 07/11] Error fixed --- src/test/java/com/thealgorithms/maths/MeansTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/thealgorithms/maths/MeansTest.java b/src/test/java/com/thealgorithms/maths/MeansTest.java index 927aa5c0dd7e..97285bda12ba 100644 --- a/src/test/java/com/thealgorithms/maths/MeansTest.java +++ b/src/test/java/com/thealgorithms/maths/MeansTest.java @@ -195,21 +195,21 @@ void testQuadraticMeanTwoNumbers() { @Test void testQuadraticMeanMultipleNumbers() { - List numbers = new Vector<>(Arrays.asList(1.0, 2.5, 3.0, 7.5, 10.0)); + Vector numbers = new Vector<>(Arrays.asList(1.0, 2.5, 3.0, 7.5, 10.0)); double expected = Math.sqrt(34.5); assertEquals(expected, Means.quadratic(numbers), EPSILON); } @Test void testQuadraticMeanThreeNumbers() { - LinkedList numbers = Arrays.asList(3.0, 6.0, 9.0); + List numbers = Arrays.asList(3.0, 6.0, 9.0); double expected = Math.sqrt(42.0); assertEquals(expected, Means.quadratic(numbers), EPSILON); } @Test void testQuadraticMeanIdenticalNumbers() { - LinkedList numbers = Arrays.asList(5.0, 5.0, 5.0); + List numbers = Arrays.asList(5.0, 5.0, 5.0); assertEquals(5.0, Means.quadratic(numbers), EPSILON); } From 8adc27cb2d717a2b68f75ec6ad2418c9d85c7151 Mon Sep 17 00:00:00 2001 From: kvadrik <41710943+kvadrik@users.noreply.github.com> Date: Sun, 15 Mar 2026 01:34:17 +0200 Subject: [PATCH 08/11] Extra whitespace removed --- src/test/java/com/thealgorithms/maths/MeansTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/maths/MeansTest.java b/src/test/java/com/thealgorithms/maths/MeansTest.java index 97285bda12ba..17d181c4f2b5 100644 --- a/src/test/java/com/thealgorithms/maths/MeansTest.java +++ b/src/test/java/com/thealgorithms/maths/MeansTest.java @@ -218,7 +218,7 @@ void testQuadraticMeanWithLinkedList() { LinkedList numbers = new LinkedList<>(Arrays.asList(1.0, 5.0, 11.0)); assertEquals(7.0, Means.quadratic(numbers), EPSILON); } - + // ========== Additional Edge Case Tests ========== @Test From 4b9bbefea7bb6c824718f9b8ebc8dde0aa8a5738 Mon Sep 17 00:00:00 2001 From: kvadrik <41710943+kvadrik@users.noreply.github.com> Date: Sun, 15 Mar 2026 01:35:49 +0200 Subject: [PATCH 09/11] Extra whitespace removed --- src/test/java/com/thealgorithms/maths/MeansTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/thealgorithms/maths/MeansTest.java b/src/test/java/com/thealgorithms/maths/MeansTest.java index 17d181c4f2b5..49fad1a1688d 100644 --- a/src/test/java/com/thealgorithms/maths/MeansTest.java +++ b/src/test/java/com/thealgorithms/maths/MeansTest.java @@ -211,13 +211,13 @@ void testQuadraticMeanThreeNumbers() { void testQuadraticMeanIdenticalNumbers() { List numbers = Arrays.asList(5.0, 5.0, 5.0); assertEquals(5.0, Means.quadratic(numbers), EPSILON); - } + } @Test void testQuadraticMeanWithLinkedList() { LinkedList numbers = new LinkedList<>(Arrays.asList(1.0, 5.0, 11.0)); assertEquals(7.0, Means.quadratic(numbers), EPSILON); - } + } // ========== Additional Edge Case Tests ========== From 6d3629e8faa214faf395ff09890ad9d7c41b58de Mon Sep 17 00:00:00 2001 From: kvadrik <41710943+kvadrik@users.noreply.github.com> Date: Sun, 15 Mar 2026 01:41:03 +0200 Subject: [PATCH 10/11] Removed extra white space --- src/test/java/com/thealgorithms/maths/MeansTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/maths/MeansTest.java b/src/test/java/com/thealgorithms/maths/MeansTest.java index 49fad1a1688d..853fdbea3963 100644 --- a/src/test/java/com/thealgorithms/maths/MeansTest.java +++ b/src/test/java/com/thealgorithms/maths/MeansTest.java @@ -264,6 +264,6 @@ void testMeansRelationship() { assertTrue(harmonic <= geometric, "Harmonic mean should be ≤ geometric mean"); assertTrue(geometric <= arithmetic, "Geometric mean should be ≤ arithmetic mean"); - assertTrue(arithmetic <= quadratic, "Arithmetic mean should be ≤ quadratic mean"); + assertTrue(arithmetic <= quadratic, "Arithmetic mean should be ≤ quadratic mean"); } } From 721174e45a44a43a8bed44b8dad95ffaf9d97773 Mon Sep 17 00:00:00 2001 From: kvadrik <41710943+kvadrik@users.noreply.github.com> Date: Sun, 15 Mar 2026 01:42:19 +0200 Subject: [PATCH 11/11] Removed extra white space --- src/main/java/com/thealgorithms/maths/Means.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/maths/Means.java b/src/main/java/com/thealgorithms/maths/Means.java index 6480b365e681..d77eb1d3f661 100644 --- a/src/main/java/com/thealgorithms/maths/Means.java +++ b/src/main/java/com/thealgorithms/maths/Means.java @@ -128,7 +128,7 @@ public static Double quadratic(final Iterable numbers) { int size = IterableUtils.size(numbers); return Math.pow(sumOfSquares / size, 0.5); } - + /** * Validates that the input iterable is not empty. *