Author: tdunning
Date: Sat May 5 23:01:29 2012
New Revision: 1334531
URL: http://svn.apache.org/viewvc?rev=1334531&view=rev
Log:
MAHOUT-1005 - Fixed error in transcription from JAMA, added test case to prove
the case.
Modified:
mahout/trunk/math/src/main/java/org/apache/mahout/math/solver/EigenDecomposition.java
mahout/trunk/math/src/test/java/org/apache/mahout/math/solver/EigenDecompositionTest.java
Modified:
mahout/trunk/math/src/main/java/org/apache/mahout/math/solver/EigenDecomposition.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/solver/EigenDecomposition.java?rev=1334531&r1=1334530&r2=1334531&view=diff
==============================================================================
---
mahout/trunk/math/src/main/java/org/apache/mahout/math/solver/EigenDecomposition.java
(original)
+++
mahout/trunk/math/src/main/java/org/apache/mahout/math/solver/EigenDecomposition.java
Sat May 5 23:01:29 2012
@@ -142,7 +142,7 @@ public class EigenDecomposition {
// Scale to avoid under/overflow.
- double scale = d.norm(1);
+ double scale = d.viewPart(0, i).norm(1);
double h = 0.0;
@@ -876,8 +876,6 @@ public class EigenDecomposition {
}
}
-
-
private static boolean isSymmetric(Matrix a) {
/*
Symmetry flag.
Modified:
mahout/trunk/math/src/test/java/org/apache/mahout/math/solver/EigenDecompositionTest.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/math/src/test/java/org/apache/mahout/math/solver/EigenDecompositionTest.java?rev=1334531&r1=1334530&r2=1334531&view=diff
==============================================================================
---
mahout/trunk/math/src/test/java/org/apache/mahout/math/solver/EigenDecompositionTest.java
(original)
+++
mahout/trunk/math/src/test/java/org/apache/mahout/math/solver/EigenDecompositionTest.java
Sat May 5 23:01:29 2012
@@ -32,6 +32,23 @@ import static org.junit.Assert.assertEqu
public class EigenDecompositionTest {
@Test
+ public void testDegenerateMatrix() {
+ double[][] m = new double[][]{
+ new double[]{0.641284, 0.767303, 0.000000, 0.000000, 0.000000, 0.000000,
0.000000},
+ new double[]{0.767303, 3.050159, 2.561342, 0.000000, 0.000000, 0.000000,
0.000000},
+ new double[]{0.000000, 2.561342, 5.000609, 0.810507, 0.000000, 0.000000,
0.000000},
+ new double[]{0.000000, 0.000000, 0.810507, 0.550477, 0.142853, 0.000000,
0.000000},
+ new double[]{0.000000, 0.000000, 0.000000, 0.142853, 0.254566, 0.000000,
0.000000},
+ new double[]{0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.256073,
0.000000},
+ new double[]{0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000,
0.000000}};
+ Matrix x = new DenseMatrix(m);
+ EigenDecomposition eig = new EigenDecomposition(x, true);
+ Matrix d = eig.getD();
+ Matrix v = eig.getV();
+ check("EigenvalueDecomposition (evil)...", x.times(v), v.times(d));
+ }
+
+ @Test
public void testDeficientRank() {
Matrix a = new DenseMatrix(10, 3).assign(new DoubleFunction() {
Random gen = RandomUtils.getRandom();