| //Licensed to the Apache Software Foundation (ASF) under one |
| //or more contributor license agreements. See the NOTICE file |
| //distributed with this work for additional information |
| //regarding copyright ownership. The ASF licenses this file |
| //to you under the Apache License, Version 2.0 (the |
| //"License"); you may not use this file except in compliance |
| //with the License. You may obtain a copy of the License at |
| |
| //http://www.apache.org/licenses/LICENSE-2.0 |
| |
| //Unless required by applicable law or agreed to in writing, |
| //software distributed under the License is distributed on an |
| //"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| //KIND, either express or implied. See the License for the |
| //specific language governing permissions and limitations |
| //under the License. |
| |
| package org.apache.commons.math4.stat.descriptive.moment; |
| |
| import org.apache.commons.math4.TestUtils; |
| import org.apache.commons.math4.exception.DimensionMismatchException; |
| import org.apache.commons.math4.linear.RealMatrix; |
| import org.junit.Test; |
| import org.junit.Assert; |
| |
| public class VectorialCovarianceTest { |
| private double[][] points; |
| |
| public VectorialCovarianceTest() { |
| points = new double[][] { |
| { 1.2, 2.3, 4.5}, |
| {-0.7, 2.3, 5.0}, |
| { 3.1, 0.0, -3.1}, |
| { 6.0, 1.2, 4.2}, |
| {-0.7, 2.3, 5.0} |
| }; |
| } |
| |
| @Test |
| public void testMismatch() { |
| try { |
| new VectorialCovariance(8, true).increment(new double[5]); |
| Assert.fail("an exception should have been thrown"); |
| } catch (DimensionMismatchException dme) { |
| Assert.assertEquals(5, dme.getArgument()); |
| Assert.assertEquals(8, dme.getDimension()); |
| } |
| } |
| |
| @Test |
| public void testSimplistic() { |
| VectorialCovariance stat = new VectorialCovariance(2, true); |
| stat.increment(new double[] {-1.0, 1.0}); |
| stat.increment(new double[] { 1.0, -1.0}); |
| RealMatrix c = stat.getResult(); |
| Assert.assertEquals( 2.0, c.getEntry(0, 0), 1.0e-12); |
| Assert.assertEquals(-2.0, c.getEntry(1, 0), 1.0e-12); |
| Assert.assertEquals( 2.0, c.getEntry(1, 1), 1.0e-12); |
| } |
| |
| @Test |
| public void testBasicStats() { |
| |
| VectorialCovariance stat = new VectorialCovariance(points[0].length, true); |
| for (int i = 0; i < points.length; ++i) { |
| stat.increment(points[i]); |
| } |
| |
| Assert.assertEquals(points.length, stat.getN()); |
| |
| RealMatrix c = stat.getResult(); |
| double[][] refC = new double[][] { |
| { 8.0470, -1.9195, -3.4445}, |
| {-1.9195, 1.0470, 3.2795}, |
| {-3.4445, 3.2795, 12.2070} |
| }; |
| |
| for (int i = 0; i < c.getRowDimension(); ++i) { |
| for (int j = 0; j <= i; ++j) { |
| Assert.assertEquals(refC[i][j], c.getEntry(i, j), 1.0e-12); |
| } |
| } |
| |
| } |
| |
| @Test |
| public void testSerial(){ |
| VectorialCovariance stat = new VectorialCovariance(points[0].length, true); |
| Assert.assertEquals(stat, TestUtils.serializeAndRecover(stat)); |
| } |
| } |