view src/samer/models/Covariance.java @ 5:b67a33c44de7

Remove some crap, etc
author samer
date Fri, 05 Apr 2019 21:34:25 +0100
parents bf79fb79ee13
children
line wrap: on
line source
/*
 *	Copyright (c) 2000, Samer Abdallah, King's College London.
 *	All rights reserved.
 *
 *	This software is provided AS iS and WITHOUT ANY WARRANTY; 
 *	without even the implied warranty of MERCHANTABILITY or 
 *	FITNESS FOR A PARTICULAR PURPOSE.
 */

package samer.models;
import  samer.core.*;
import  samer.core.types.*;
import  samer.maths.*;
import  samer.tools.*;
import  java.util.*;

/**
	Collect covariance statistics assuming input is zero mean.
*/
public class Covariance extends NamedTask
{
	VVector		vector;
	Matrix		C;
	int			n, count;
	double	[] 	x;
	double	[][] _C;
	VDouble	rate;
	double	[] sig;

	public Covariance(VVector vec) throws Exception
	{
		super("covariance");
		Shell.push(node);
		
		n=vec.size();
		C = new Matrix("C",n,n);	// second moment: sum products
		rate=new VDouble("rate",0.001);
		Shell.pop();

		sig= new double[n];
		_C=C.getArray();
		x=vec.array();
		vector=vec;
	}

	public void dispose() { rate.dispose(); C.dispose(); }

	public void reset() { C.zero(); }
	public void getCorrelation(Matrix R) {
		double [][] _R=R.getArray();
		
		// first get std devs and put 1s down diagonal
		for (int i=0; i<n; i++) {
			sig[i] = Math.sqrt(_C[i][i]);
		}

		for (int i=0; i<n; i++) {
			for (int j=0; j<i; j++) { // off diagonal
				_R[i][j] = _C[i][j]/(sig[i]*sig[j]);
//				_R[j][i] = _R[i][j];
			}
			_R[i][i]=1;
		}
		R.changed();
	}

	
	public void starting() {}
	public void stopping() {}
	public void run()
	{
		double eta=rate.value;
		
		for (int i=0; i<n; i++) {
			double  [] a=_C[i];
			double  k=x[i];
			for (int j=0; j<=i; j++) {
				a[j] += eta*(k*x[j]-a[j]);
			}
		}
		C.changed();
	}
}