You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2011/05/17 23:38:45 UTC

svn commit: r1104575 - in /commons/proper/math/trunk/src: main/java/org/apache/commons/math/linear/SparseFieldVector.java test/java/org/apache/commons/math/linear/SparseFieldVectorTest.java

Author: erans
Date: Tue May 17 21:38:45 2011
New Revision: 1104575

URL: http://svn.apache.org/viewvc?rev=1104575&view=rev
Log:
MATH-574
Allow outer product of vectors of different sizes.

Modified:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/SparseFieldVector.java
    commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/SparseFieldVectorTest.java

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/SparseFieldVector.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/SparseFieldVector.java?rev=1104575&r1=1104574&r2=1104575&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/SparseFieldVector.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/linear/SparseFieldVector.java Tue May 17 21:38:45 2011
@@ -409,8 +409,8 @@ public class SparseFieldVector<T extends
      * if the dimensions do not match.
      */
     public FieldMatrix<T> outerProduct(SparseFieldVector<T> v) {
-        checkVectorDimensions(v.getDimension());
-        SparseFieldMatrix<T> res = new SparseFieldMatrix<T>(field, virtualSize, virtualSize);
+        final int n = v.getDimension();
+        SparseFieldMatrix<T> res = new SparseFieldMatrix<T>(field, virtualSize, n);
         OpenIntToFieldHashMap<T>.Iterator iter = entries.iterator();
         while (iter.hasNext()) {
             iter.advance();
@@ -425,14 +425,14 @@ public class SparseFieldVector<T extends
 
     /** {@inheritDoc} */
     public FieldMatrix<T> outerProduct(T[] v) {
-        checkVectorDimensions(v.length);
-        FieldMatrix<T> res = new SparseFieldMatrix<T>(field, virtualSize, virtualSize);
+        final int n = v.length;
+        FieldMatrix<T> res = new SparseFieldMatrix<T>(field, virtualSize, n);
         OpenIntToFieldHashMap<T>.Iterator iter = entries.iterator();
         while (iter.hasNext()) {
             iter.advance();
             int row = iter.key();
             FieldElement<T>value = iter.value();
-            for (int col = 0; col < virtualSize; col++) {
+            for (int col = 0; col < n; col++) {
                 res.setEntry(row, col, value.multiply(v[col]));
             }
         }

Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/SparseFieldVectorTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/SparseFieldVectorTest.java?rev=1104575&r1=1104574&r2=1104575&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/SparseFieldVectorTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/linear/SparseFieldVectorTest.java Tue May 17 21:38:45 2011
@@ -170,6 +170,28 @@ public class SparseFieldVectorTest {
 
     }
 
+    @Test
+    public void testOuterProduct() {
+        final SparseFieldVector<Fraction> u
+            = new SparseFieldVector<Fraction>(FractionField.getInstance(),
+                                              new Fraction[] {new Fraction(1),
+                                                              new Fraction(2),
+                                                              new Fraction(-3)});
+        final SparseFieldVector<Fraction> v
+            = new SparseFieldVector<Fraction>(FractionField.getInstance(),
+                                              new Fraction[] {new Fraction(4),
+                                                              new Fraction(-2)});
+
+        final FieldMatrix<Fraction> uv = u.outerProduct(v);
+
+        final double tol = Math.ulp(1d);
+        Assert.assertEquals(new Fraction(4).doubleValue(), uv.getEntry(0, 0).doubleValue(), tol);
+        Assert.assertEquals(new Fraction(-2).doubleValue(), uv.getEntry(0, 1).doubleValue(), tol);
+        Assert.assertEquals(new Fraction(8).doubleValue(), uv.getEntry(1, 0).doubleValue(), tol);
+        Assert.assertEquals(new Fraction(-4).doubleValue(), uv.getEntry(1, 1).doubleValue(), tol);
+        Assert.assertEquals(new Fraction(-12).doubleValue(), uv.getEntry(2, 0).doubleValue(), tol);
+        Assert.assertEquals(new Fraction(6).doubleValue(), uv.getEntry(2, 1).doubleValue(), tol);
+    }
 
     @Test
     public void testMisc() {