Return-Path: X-Original-To: apmail-commons-commits-archive@minotaur.apache.org Delivered-To: apmail-commons-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 025FAD95F for ; Tue, 17 Jul 2012 21:10:58 +0000 (UTC) Received: (qmail 1168 invoked by uid 500); 17 Jul 2012 21:10:57 -0000 Delivered-To: apmail-commons-commits-archive@commons.apache.org Received: (qmail 1116 invoked by uid 500); 17 Jul 2012 21:10:57 -0000 Mailing-List: contact commits-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@commons.apache.org Delivered-To: mailing list commits@commons.apache.org Received: (qmail 1108 invoked by uid 99); 17 Jul 2012 21:10:57 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 17 Jul 2012 21:10:57 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 17 Jul 2012 21:10:55 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id D4DD82388962 for ; Tue, 17 Jul 2012 21:10:34 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1362647 - /commons/proper/math/trunk/src/test/java/org/apache/commons/math3/linear/SchurTransformerTest.java Date: Tue, 17 Jul 2012 21:10:34 -0000 To: commits@commons.apache.org From: tn@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120717211034.D4DD82388962@eris.apache.org> Author: tn Date: Tue Jul 17 21:10:34 2012 New Revision: 1362647 URL: http://svn.apache.org/viewvc?rev=1362647&view=rev Log: Added more random tests for SchurTransformer. Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/linear/SchurTransformerTest.java Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/linear/SchurTransformerTest.java URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/linear/SchurTransformerTest.java?rev=1362647&r1=1362646&r2=1362647&view=diff ============================================================================== --- commons/proper/math/trunk/src/test/java/org/apache/commons/math3/linear/SchurTransformerTest.java (original) +++ commons/proper/math/trunk/src/test/java/org/apache/commons/math3/linear/SchurTransformerTest.java Tue Jul 17 21:10:34 2012 @@ -17,6 +17,9 @@ package org.apache.commons.math3.linear; +import java.util.Random; + +import org.apache.commons.math3.distribution.NormalDistribution; import org.junit.Test; import org.junit.Assert; @@ -63,18 +66,6 @@ public class SchurTransformerTest { checkAEqualPTPt(MatrixUtils.createRealMatrix(testRandom)); } - private void checkAEqualPTPt(RealMatrix matrix) { - SchurTransformer transformer = new SchurTransformer(matrix); - RealMatrix p = transformer.getP(); - RealMatrix t = transformer.getT(); - RealMatrix pT = transformer.getPT(); - - RealMatrix result = p.multiply(t).multiply(pT); - - double norm = result.subtract(matrix).getNorm(); - Assert.assertEquals(0, norm, 4.0e-14); - } - @Test public void testPOrthogonal() { checkOrthogonal(new SchurTransformer(MatrixUtils.createRealMatrix(testSquare5)).getP()); @@ -89,12 +80,6 @@ public class SchurTransformerTest { checkOrthogonal(new SchurTransformer(MatrixUtils.createRealMatrix(testRandom)).getPT()); } - private void checkOrthogonal(RealMatrix m) { - RealMatrix mTm = m.transpose().multiply(m); - RealMatrix id = MatrixUtils.createRealIdentityMatrix(mTm.getRowDimension()); - Assert.assertEquals(0, mTm.subtract(id).getNorm(), 1.0e-14); - } - @Test public void testSchurForm() { checkSchurForm(new SchurTransformer(MatrixUtils.createRealMatrix(testSquare5)).getT()); @@ -102,6 +87,73 @@ public class SchurTransformerTest { checkSchurForm(new SchurTransformer(MatrixUtils.createRealMatrix(testRandom)).getT()); } + @Test + public void testRandomData() { + for (int run = 0; run < 100; run++) { + Random r = new Random(System.currentTimeMillis()); + + // matrix size + int size = r.nextInt(20) + 4; + + double[][] data = new double[size][size]; + for (int i = 0; i < size; i++) { + for (int j = 0; j < size; j++) { + data[i][j] = r.nextInt(100); + } + } + + RealMatrix m = MatrixUtils.createRealMatrix(data); + RealMatrix s = checkAEqualPTPt(m); + checkSchurForm(s); + } + } + + @Test + public void testRandomDataNormalDistribution() { + for (int run = 0; run < 100; run++) { + Random r = new Random(System.currentTimeMillis()); + NormalDistribution dist = new NormalDistribution(0.0, r.nextDouble() * 5); + + // matrix size + int size = r.nextInt(20) + 4; + + double[][] data = new double[size][size]; + for (int i = 0; i < size; i++) { + for (int j = 0; j < size; j++) { + data[i][j] = dist.sample(); + } + } + + RealMatrix m = MatrixUtils.createRealMatrix(data); + RealMatrix s = checkAEqualPTPt(m); + checkSchurForm(s); + } + } + + /////////////////////////////////////////////////////////////////////////// + // Test helpers + /////////////////////////////////////////////////////////////////////////// + + private RealMatrix checkAEqualPTPt(RealMatrix matrix) { + SchurTransformer transformer = new SchurTransformer(matrix); + RealMatrix p = transformer.getP(); + RealMatrix t = transformer.getT(); + RealMatrix pT = transformer.getPT(); + + RealMatrix result = p.multiply(t).multiply(pT); + + double norm = result.subtract(matrix).getNorm(); + Assert.assertEquals(0, norm, 1.0e-10); + + return t; + } + + private void checkOrthogonal(RealMatrix m) { + RealMatrix mTm = m.transpose().multiply(m); + RealMatrix id = MatrixUtils.createRealIdentityMatrix(mTm.getRowDimension()); + Assert.assertEquals(0, mTm.subtract(id).getNorm(), 1.0e-14); + } + private void checkSchurForm(final RealMatrix m) { final int rows = m.getRowDimension(); final int cols = m.getColumnDimension();