Author: luc Date: Sun Dec 7 07:36:32 2008 New Revision: 724144 URL: http://svn.apache.org/viewvc?rev=724144&view=rev Log: added Frobenius matrix norm JIRA: MATH-232
Modified: commons/proper/math/trunk/src/java/org/apache/commons/math/linear/AbstractRealMatrix.java commons/proper/math/trunk/src/java/org/apache/commons/math/linear/RealMatrix.java commons/proper/math/trunk/src/site/xdoc/changes.xml commons/proper/math/trunk/src/test/org/apache/commons/math/linear/RealMatrixImplTest.java Modified: commons/proper/math/trunk/src/java/org/apache/commons/math/linear/AbstractRealMatrix.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/linear/AbstractRealMatrix.java?rev=724144&r1=724143&r2=724144&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/linear/AbstractRealMatrix.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/linear/AbstractRealMatrix.java Sun Dec 7 07:36:32 2008 @@ -217,6 +217,20 @@ } /** [EMAIL PROTECTED] */ + public double getFrobeniusNorm() { + final int rowCount = getRowDimension(); + final int columnCount = getColumnDimension(); + double sum2 = 0; + for (int col = 0; col < columnCount; ++col) { + for (int row = 0; row < rowCount; ++row) { + final double mij = getEntry(row, col); + sum2 += mij * mij; + } + } + return Math.sqrt(sum2); + } + + /** [EMAIL PROTECTED] */ public RealMatrix getSubMatrix(final int startRow, final int endRow, final int startColumn, final int endColumn) throws MatrixIndexException { Modified: commons/proper/math/trunk/src/java/org/apache/commons/math/linear/RealMatrix.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/java/org/apache/commons/math/linear/RealMatrix.java?rev=724144&r1=724143&r2=724144&view=diff ============================================================================== --- commons/proper/math/trunk/src/java/org/apache/commons/math/linear/RealMatrix.java (original) +++ commons/proper/math/trunk/src/java/org/apache/commons/math/linear/RealMatrix.java Sun Dec 7 07:36:32 2008 @@ -114,6 +114,14 @@ double getNorm(); /** + * Returns the <a href="http://mathworld.wolfram.com/FrobeniusNorm.html"> + * Frobenius norm</a> of the matrix. + * + * @return norm + */ + double getFrobeniusNorm(); + + /** * Gets a submatrix. Rows and columns are indicated * counting from 0 to n-1. * Modified: commons/proper/math/trunk/src/site/xdoc/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/site/xdoc/changes.xml?rev=724144&r1=724143&r2=724144&view=diff ============================================================================== --- commons/proper/math/trunk/src/site/xdoc/changes.xml (original) +++ commons/proper/math/trunk/src/site/xdoc/changes.xml Sun Dec 7 07:36:32 2008 @@ -39,6 +39,9 @@ </properties> <body> <release version="2.0" date="TBD" description="TBD"> + <action dev="luc" type="add" issue="MATH-232" > + Added Frobenius matrix norm. + </action> <action dev="luc" type="add" issue="MATH-231" > Added an abstract matrix implementation simplifying extension by users. </action> Modified: commons/proper/math/trunk/src/test/org/apache/commons/math/linear/RealMatrixImplTest.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/org/apache/commons/math/linear/RealMatrixImplTest.java?rev=724144&r1=724143&r2=724144&view=diff ============================================================================== --- commons/proper/math/trunk/src/test/org/apache/commons/math/linear/RealMatrixImplTest.java (original) +++ commons/proper/math/trunk/src/test/org/apache/commons/math/linear/RealMatrixImplTest.java Sun Dec 7 07:36:32 2008 @@ -159,6 +159,14 @@ assertEquals("testData2 norm",7d,m2.getNorm(),entryTolerance); } + /** test Frobenius norm */ + public void testFrobeniusNorm() { + RealMatrixImpl m = new RealMatrixImpl(testData); + RealMatrixImpl m2 = new RealMatrixImpl(testData2); + assertEquals("testData Frobenius norm", Math.sqrt(117.0), m.getFrobeniusNorm(), entryTolerance); + assertEquals("testData2 Frobenius norm", Math.sqrt(52.0), m2.getFrobeniusNorm(), entryTolerance); + } + /** test m-n = m + -n */ public void testPlusMinus() { RealMatrixImpl m = new RealMatrixImpl(testData);