samer@0: /* samer@0: * Copyright (c) 2000, Samer Abdallah, King's College London. samer@0: * All rights reserved. samer@0: * samer@0: * This software is provided AS iS and WITHOUT ANY WARRANTY; samer@0: * without even the implied warranty of MERCHANTABILITY or samer@0: * FITNESS FOR A PARTICULAR PURPOSE. samer@0: */ samer@0: samer@0: package samer.models; samer@0: import samer.core.*; samer@0: import samer.core.types.*; samer@0: import samer.maths.*; samer@0: import samer.tools.*; samer@0: import java.util.*; samer@0: samer@0: /** samer@0: Collect covariance statistics assuming input is zero mean. samer@0: */ samer@0: public class Covariance extends NamedTask samer@0: { samer@0: VVector vector; samer@0: Matrix C; samer@0: int n, count; samer@0: double [] x; samer@0: double [][] _C; samer@0: VDouble rate; samer@0: double [] sig; samer@0: samer@0: public Covariance(VVector vec) throws Exception samer@0: { samer@0: super("covariance"); samer@0: Shell.push(node); samer@0: samer@0: n=vec.size(); samer@0: C = new Matrix("C",n,n); // second moment: sum products samer@0: rate=new VDouble("rate",0.001); samer@0: Shell.pop(); samer@0: samer@0: sig= new double[n]; samer@0: _C=C.getArray(); samer@0: x=vec.array(); samer@0: vector=vec; samer@0: } samer@0: samer@0: public void dispose() { rate.dispose(); C.dispose(); } samer@0: samer@0: public void reset() { C.zero(); } samer@0: public void getCorrelation(Matrix R) { samer@0: double [][] _R=R.getArray(); samer@0: samer@0: // first get std devs and put 1s down diagonal samer@0: for (int i=0; i