~ubuntu-branches/ubuntu/natty/commons-math/natty

« back to all changes in this revision

Viewing changes to src/java/org/apache/commons/math/stat/descriptive/moment/VectorialCovariance.java

  • Committer: Bazaar Package Importer
  • Author(s): Damien Raude-Morvan
  • Date: 2009-08-22 01:13:25 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20090822011325-hi4peq1ua5weguwn
Tags: 2.0-1
* New upstream release.
* Set Maintainer field to Debian Java Team
* Add myself as Uploaders
* Switch to Quilt patch system:
  - Refresh all patchs
  - Remove B-D on dpatch, Add B-D on quilt
  - Include patchsys-quilt.mk in debian/rules
* Bump Standards-Version to 3.8.3:
  - Add a README.source to describe patch system
* Maven POMs:
  - Add a Build-Depends-Indep dependency on maven-repo-helper
  - Use mh_installpom and mh_installjar to install the POM and the jar to the
    Maven repository
* Use default-jdk/jre:
  - Depends on java5-runtime-headless
  - Build-Depends on default-jdk
  - Use /usr/lib/jvm/default-java as JAVA_HOME
* Move api documentation to /usr/share/doc/libcommons-math-java/api
* Build-Depends on junit4 instead of junit

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Licensed to the Apache Software Foundation (ASF) under one or more
3
 
 * contributor license agreements.  See the NOTICE file distributed with
4
 
 * this work for additional information regarding copyright ownership.
5
 
 * The ASF licenses this file to You under the Apache License, Version 2.0
6
 
 * (the "License"); you may not use this file except in compliance with
7
 
 * the License.  You may obtain a copy of the License at
8
 
 *
9
 
 *      http://www.apache.org/licenses/LICENSE-2.0
10
 
 *
11
 
 * Unless required by applicable law or agreed to in writing, software
12
 
 * distributed under the License is distributed on an "AS IS" BASIS,
13
 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
 
 * See the License for the specific language governing permissions and
15
 
 * limitations under the License.
16
 
 */
17
 
package org.apache.commons.math.stat.descriptive.moment;
18
 
 
19
 
import java.io.Serializable;
20
 
import java.util.Arrays;
21
 
 
22
 
import org.apache.commons.math.DimensionMismatchException;
23
 
import org.apache.commons.math.linear.RealMatrix;
24
 
import org.apache.commons.math.linear.RealMatrixImpl;
25
 
 
26
 
/**
27
 
 * Returns the covariance matrix of the available vectors.
28
 
 * @since 1.2
29
 
 * @version $Revision: 619928 $ $Date: 2008-02-08 09:19:17 -0700 (Fri, 08 Feb 2008) $
30
 
 */
31
 
public class VectorialCovariance implements Serializable {
32
 
 
33
 
    /** Serializable version identifier */
34
 
    private static final long serialVersionUID = 4118372414238930270L;
35
 
 
36
 
    /** Sums for each component. */
37
 
    private double[] sums;
38
 
 
39
 
    /** Sums of products for each component. */
40
 
    private double[] productsSums;
41
 
 
42
 
    /** Indicator for bias correction. */
43
 
    private boolean isBiasCorrected;
44
 
 
45
 
    /** Number of vectors in the sample. */
46
 
    private long n;
47
 
 
48
 
    /** Constructs a VectorialMean.
49
 
     * @param dimension vectors dimension
50
 
     * @param isBiasCorrected if true, computed the unbiased sample covariance,
51
 
     * otherwise computes the biased population covariance
52
 
     */
53
 
    public VectorialCovariance(int dimension, boolean isBiasCorrected) {
54
 
        sums         = new double[dimension];
55
 
        productsSums = new double[dimension * (dimension + 1) / 2];
56
 
        n            = 0;
57
 
        this.isBiasCorrected = isBiasCorrected;
58
 
    }
59
 
 
60
 
    /**
61
 
     * Add a new vector to the sample.
62
 
     * @param v vector to add
63
 
     * @exception DimensionMismatchException if the vector does not have the right dimension
64
 
     */
65
 
    public void increment(double[] v) throws DimensionMismatchException {
66
 
        if (v.length != sums.length) {
67
 
            throw new DimensionMismatchException(v.length, sums.length);
68
 
        }
69
 
        int k = 0;
70
 
        for (int i = 0; i < v.length; ++i) {
71
 
            sums[i] += v[i];
72
 
            for (int j = 0; j <= i; ++j) {
73
 
                productsSums[k++] += v[i] * v[j];
74
 
            }
75
 
        }
76
 
        n++;
77
 
    }
78
 
 
79
 
    /**
80
 
     * Get the covariance matrix.
81
 
     * @return covariance matrix
82
 
     */
83
 
    public RealMatrix getResult() {
84
 
 
85
 
        int dimension = sums.length;
86
 
        RealMatrixImpl result = new RealMatrixImpl(dimension, dimension);
87
 
 
88
 
        if (n > 1) {
89
 
            double[][] resultData = result.getDataRef();
90
 
            double c = 1.0 / (n * (isBiasCorrected ? (n - 1) : n));
91
 
            int k = 0;
92
 
            for (int i = 0; i < dimension; ++i) {
93
 
                for (int j = 0; j <= i; ++j) {
94
 
                    double e = c * (n * productsSums[k++] - sums[i] * sums[j]);
95
 
                    resultData[i][j] = e;
96
 
                    resultData[j][i] = e;
97
 
                }
98
 
            }
99
 
        }
100
 
 
101
 
        return result;
102
 
 
103
 
    }
104
 
 
105
 
    /**
106
 
     * Get the number of vectors in the sample.
107
 
     * @return number of vectors in the sample
108
 
     */
109
 
    public long getN() {
110
 
        return n;
111
 
    }
112
 
 
113
 
    /**
114
 
     * Clears the internal state of the Statistic
115
 
     */
116
 
    public void clear() {
117
 
        n = 0;
118
 
        Arrays.fill(sums, 0.0);
119
 
        Arrays.fill(productsSums, 0.0);
120
 
    }
121
 
 
122
 
}
 
 
b'\\ No newline at end of file'