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();


Reply via email to