psteitz     2004/10/11 23:19:50

  Modified:    math/xdocs/userguide linear.xml
               math/src/java/org/apache/commons/math/linear RealMatrix.java
                        RealMatrixImpl.java
               math/src/test/org/apache/commons/math/linear
                        RealMatrixImplTest.java
  Log:
  Removed data mutators from RealMatrix interface and RealMatrixImpl.
  
  Revision  Changes    Path
  1.9       +4 -5      jakarta-commons/math/xdocs/userguide/linear.xml
  
  Index: linear.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/math/xdocs/userguide/linear.xml,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- linear.xml        17 May 2004 05:57:38 -0000      1.8
  +++ linear.xml        12 Oct 2004 06:19:50 -0000      1.9
  @@ -56,11 +56,10 @@
   
   // One more with three rows, two columns
   double[][] matrixData2 = { {1d,2d}, {2d,5d}, {1d, 7d}};
  -RealMatrix n = new RealMatixImpl();
  -n.setData(matrixData2); 
  +RealMatrix n = new RealMatixImpl(matrixData2);
   
  -// Note: both constructor and setData make
  -// Fresh copies of input double[][] arrays
  +// Note: constructor makes a
  +// Fresh copy of the input double[][] array
   
   // Now multiply m by n
   RealMatrix p = m.multiply(n);
  
  
  
  1.25      +1 -27     
jakarta-commons/math/src/java/org/apache/commons/math/linear/RealMatrix.java
  
  Index: RealMatrix.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/linear/RealMatrix.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- RealMatrix.java   9 Oct 2004 22:39:22 -0000       1.24
  +++ RealMatrix.java   12 Oct 2004 06:19:50 -0000      1.25
  @@ -94,14 +94,6 @@
       double[][] getData();
   
       /**
  -     * Overwrites the underlying data for the matrix with
  -     * a fresh copy of <code>data</code>.
  -     *
  -     * @param  data  2-dimensional array of entries
  -     */
  -    void setData(double[][] data);
  -
  -    /**
        * Returns the <a 
href="http://mathworld.wolfram.com/MaximumAbsoluteRowSumNorm.html";>
        * maximum absolute row sum norm</a> of the matrix.
        *
  @@ -197,24 +189,6 @@
        * @throws MatrixIndexException if the row or column index is not valid
        */
       double getEntry(int row, int column) throws MatrixIndexException;
  -
  -    /**
  -     * Sets the entry in the specified row and column to the specified value.
  -     * <p>
  -     * Row and column indices start at 0 and must satisfy 
  -     * <ul>
  -     * <li><code>0 <= row < rowDimension</code></li>
  -     * <li><code> 0 <= column < columnDimension</code></li>
  -     * </ul>
  -     * otherwise a <code>MatrixIndexException</code> is thrown.
  -     * 
  -     * @param row    row location of entry to be set 
  -     * @param column    column location of entry to be set
  -     * @param value  value to set 
  -     * @throws MatrixIndexException if the row or column index is not valid
  -     */
  -    void setEntry(int row, int column, double value)
  -        throws MatrixIndexException;
   
       /**
        * Returns the transpose of this matrix.
  
  
  
  1.33      +8 -57     
jakarta-commons/math/src/java/org/apache/commons/math/linear/RealMatrixImpl.java
  
  Index: RealMatrixImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/linear/RealMatrixImpl.java,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- RealMatrixImpl.java       10 Oct 2004 18:00:33 -0000      1.32
  +++ RealMatrixImpl.java       12 Oct 2004 06:19:50 -0000      1.33
  @@ -21,8 +21,8 @@
   
   
   /**
  - * Implementation for RealMatrix using a double[][] array to store entries
  - * and <a href="http://www.math.gatech.edu/~bourbaki/math2601/Web-notes/2num.pdf";>
  + * Implementation for RealMatrix using a double[][] array to store entries and
  + * <a href="http://www.math.gatech.edu/~bourbaki/math2601/Web-notes/2num.pdf";>
    * LU decompostion</a> to support linear system
    * solution and inverse.
    * <p>
  @@ -34,12 +34,11 @@
    * <p>
    * <strong>Usage notes</strong>:<br>
    * <ul><li>
  - * The LU decomposition is stored and reused on subsequent calls.  If matrix
  - * data are modified using any of the public setXxx methods, the saved
  - * decomposition is discarded.  If data are modified via references to the
  - * underlying array obtained using <code>getDataRef()</code>, then the stored
  - * LU decomposition will not be discarded.  In this case, you need to
  - * explicitly invoke <code>LUDecompose()</code> to recompute the decomposition
  + * The LU decomposition is cached and reused on subsequent calls.   
  + * If data are modified via references to the underlying array obtained using
  + * <code>getDataRef()</code>, then the stored LU decomposition will not be
  + * discarded.  In this case, you need to explicitly invoke 
  + * <code>LUDecompose()</code> to recompute the decomposition
    * before using any of the methods above.</li>
    * <li>
    * As specified in the [EMAIL PROTECTED] RealMatrix} interface, matrix element 
indexing
  @@ -280,17 +279,6 @@
       }
   
       /**
  -     * Overwrites the underlying data for the matrix
  -     * with a fresh copy of <code>inData</code>.
  -     *
  -     * @param  inData 2-dimensional array of entries
  -     */
  -    public void setData(double[][] inData) {
  -        copyIn(inData);
  -        lu = null;
  -    }
  -
  -    /**
        * Returns a reference to the underlying data array.
        * <p>
        * Does not make a fresh copy of the underlying data.
  @@ -302,19 +290,6 @@
       }
   
       /**
  -     * Overwrites the underlying data for the matrix
  -     * with a reference to <code>inData</code>.
  -     * <p>
  -     * Does not make a fresh copy of <code>data</code>.
  -     *
  -     * @param  inData 2-dimensional array of entries
  -     */
  -    public void setDataRef(double[][] inData) {
  -        this.data = inData;
  -        lu = null;
  -    }
  -
  -    /**
        *
        * @return norm
        */
  @@ -495,30 +470,6 @@
               throw new MatrixIndexException("matrix entry does not exist");
           }
           return data[row][column];
  -    }
  -
  -    /**
  -     * Sets the entry in the specified row and column to the specified value.
  -     * <p>
  -     * Row and column indices start at 0 and must satisfy 
  -     * <ul>
  -     * <li><code>0 <= row < rowDimension</code></li>
  -     * <li><code> 0 <= column < columnDimension</code></li>
  -     * </ul>
  -     * otherwise a <code>MatrixIndexException</code> is thrown.
  -     * 
  -     * @param row    row location of entry to be set 
  -     * @param column    column location of entry to be set
  -     * @param value  value to set 
  -     * @throws MatrixIndexException if the row or column index is not valid
  -     */
  -    public void setEntry(int row, int column, double value)
  -        throws MatrixIndexException {
  -        if (!isValidCoordinate(row,column)) {
  -            throw new MatrixIndexException("matrix entry does not exist");
  -        }
  -        data[row][column] = value;
  -        lu = null;
       }
   
       /**
  
  
  
  1.20      +28 -46    
jakarta-commons/math/src/test/org/apache/commons/math/linear/RealMatrixImplTest.java
  
  Index: RealMatrixImplTest.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/math/src/test/org/apache/commons/math/linear/RealMatrixImplTest.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- RealMatrixImplTest.java   10 Oct 2004 18:01:16 -0000      1.19
  +++ RealMatrixImplTest.java   12 Oct 2004 06:19:50 -0000      1.20
  @@ -111,25 +111,13 @@
           assertEquals("testData2 row dimension",m2.getRowDimension(),2);
           assertEquals("testData2 column dimension",m2.getColumnDimension(),3);
           assertTrue("testData2 is not square",!m2.isSquare());
  -        RealMatrixImpl m3 = new RealMatrixImpl();
  -        m3.setData(testData);
       } 
       
       /** test copy functions */
       public void testCopyFunctions() {
           RealMatrixImpl m = new RealMatrixImpl(testData);
  -        RealMatrixImpl m2 = new RealMatrixImpl(testData2);
  -        m2.setData(m.getData());
  -        assertClose("getData",m2,m,entryTolerance);
  -        // no dangling reference...
  -        m2.setEntry(1,1,2000d);
  -        RealMatrixImpl m3 = new RealMatrixImpl(testData);
  -        assertClose("no getData side effect",m,m3,entryTolerance);
  -        m3 = (RealMatrixImpl) m.copy();
  -        double[][] stompMe = {{1d,2d,3d}};
  -        m3.setDataRef(stompMe);
  -        assertClose("no copy side effect",m,new RealMatrixImpl(testData),
  -            entryTolerance);
  +        RealMatrixImpl m2 = new RealMatrixImpl(m.getData());
  +        assertEquals(m2,m);
       }           
       
       /** test add */
  @@ -418,22 +406,14 @@
           }
       }
       
  -    public void testEntryMutators() {
  +    public void testGetEntry() {
           RealMatrix m = new RealMatrixImpl(testData);
           assertEquals("get entry",m.getEntry(0,1),2d,entryTolerance);
  -        m.setEntry(1,2,100d);
  -        assertEquals("get entry",m.getEntry(1,2),100d,entryTolerance);
  -        try {
  -            double x = m.getEntry(-1,2);
  -            fail("expecting MatrixIndexException");
  -        } catch (MatrixIndexException ex) {
  -            ;
  -        }
           try {
  -            m.setEntry(1,4,200d);
  -            fail("expecting MatrixIndexException");
  +            m.getEntry(10, 4);
  +            fail ("Expecting MatrixIndexException");
           } catch (MatrixIndexException ex) {
  -            ;
  +            // expected
           }
       }
           
  @@ -475,8 +455,7 @@
           RealMatrix m = new RealMatrixImpl(matrixData);
           // One more with three rows, two columns
           double[][] matrixData2 = { {1d,2d}, {2d,5d}, {1d, 7d}};
  -        RealMatrix n = new RealMatrixImpl();
  -        n.setData(matrixData2); 
  +        RealMatrix n = new RealMatrixImpl(matrixData2);
           // Now multiply m by n
           RealMatrix p = m.multiply(n);
           assertEquals(2, p.getRowDimension());
  @@ -652,24 +631,24 @@
       }
       
       /** extracts the l  and u matrices from compact lu representation */
  -    protected void splitLU(RealMatrix lu, RealMatrix lower, RealMatrix upper) 
throws InvalidMatrixException {
  -        if (!lu.isSquare() || !lower.isSquare() || !upper.isSquare() ||
  -                lower.getRowDimension() != upper.getRowDimension() 
  -                || lower.getRowDimension() != lu.getRowDimension()) {
  +    protected void splitLU(RealMatrix lu, double[][] lowerData, double[][] 
upperData) throws InvalidMatrixException {   
  +        if (!lu.isSquare() || lowerData.length != lowerData[0].length || 
upperData.length != upperData[0].length ||
  +                lowerData.length != upperData.length
  +                || lowerData.length != lu.getRowDimension()) {
               throw new InvalidMatrixException("incorrect dimensions");
           }    
           int n = lu.getRowDimension();
           for (int i = 0; i < n; i++) {
               for (int j = 0; j < n; j++) {
                   if (j < i) {
  -                    lower.setEntry(i, j, lu.getEntry(i, j));
  -                    upper.setEntry(i, j, 0d);
  +                    lowerData[i][j] = lu.getEntry(i, j);
  +                    upperData[i][j] = 0d;
                   } else if (i == j) {
  -                    lower.setEntry(i, j, 1d);
  -                    upper.setEntry(i, j, lu.getEntry(i, j));
  +                    lowerData[i][j] = 1d;
  +                    upperData[i][j] = lu.getEntry(i, j);
                   } else {
  -                    lower.setEntry(i, j, 0d);
  -                    upper.setEntry(i, j, lu.getEntry(i, j));
  +                    lowerData[i][j] = 0d;
  +                    upperData[i][j] = lu.getEntry(i, j);
                   }   
               }
           }
  @@ -681,21 +660,24 @@
               throw new IllegalArgumentException("dimension mismatch");
           }
           int n = matrix.getRowDimension();
  -        RealMatrix out = new RealMatrixImpl(n, n);
  +        int m = matrix.getColumnDimension();
  +        double out[][] = new double[m][n];
           for (int i = 0; i < n; i++) {
  -            for (int j = 0; j < n; j++) {
  -                out.setEntry(i, j, matrix.getEntry(permutation[i], j));
  +            for (int j = 0; j < m; j++) {
  +                out[i][j] = matrix.getEntry(permutation[i], j);
               }
           }
  -        return out;
  +        return new RealMatrixImpl(out);
       }
       
       /** Extracts l and u matrices from lu and verifies that matrix = l times u 
modulo permutation */
       protected void verifyDecomposition(RealMatrix matrix, RealMatrix lu) throws 
Exception{
           int n = matrix.getRowDimension();
  -        RealMatrix lower = new RealMatrixImpl(n, n);
  -        RealMatrix upper = new RealMatrixImpl(n, n);
  -        splitLU(lu, lower, upper);
  +        double[][] lowerData = new double[n][n];
  +        double[][] upperData = new double[n][n];
  +        splitLU(lu, lowerData, upperData);
  +        RealMatrix lower =new RealMatrixImpl(lowerData);
  +        RealMatrix upper = new RealMatrixImpl(upperData);
           int[] permutation = ((RealMatrixImpl) matrix).getPermutation();
           RealMatrix permuted = permuteRows(matrix, permutation);
           assertClose("lu decomposition does not work", permuted, 
lower.multiply(upper), normTolerance);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to