All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions
QGpCoreTools::Covariance Class Reference

Brief description of class still missing. More...

#include <Covariance.h>

List of all members.

Public Member Functions

void add (double *val)
 Covariance (int n)
DoubleMatrix matrix () const
double mean (int i) const
void reset ()
Ellipse stddev2D () const
 ~Covariance ()

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

Description of constructor still missing n is the number of random variables

References reset(), and TRACE.

  {
    TRACE;
    ASSERT(n>=1);
    _n=n;
    _nx=_n*(_n+1)/2;
    _sums=new double[_n];
    _xProducts=new double[_nx];
    reset();
  }

Description of destructor still missing

References TRACE.

  {
    TRACE;
    delete [] _xProducts;
    delete [] _sums;
  }

Member Function Documentation

void QGpCoreTools::Covariance::add ( double *  val)

Add vector val to the covariance computation

References TRACE.

Referenced by TapePositioningSystem::Triangulator::covariance().

  {
    TRACE;
    for(int i=0; i<_n; i++) {
      _sums[i]+=val[i];
    }
    int k=0;
    for(int i=0; i<_n; i++) {
      for(int j=i; j<_n; j++) {
        _xProducts[k++]+=val[i]*val[j];
      }
    }
    _count++;
  }

References QGpCoreTools::Matrix< T >::at(), and TRACE.

Referenced by stddev2D().

  {
    TRACE;
    DoubleMatrix cov(_n);
    int k=0;
    double c=1.0/(_count-1);
    double c2=c/_count;
    for(int i=0; i<_n; i++) {
      for(int j=i; j<_n; j++) {
        double v=_xProducts[k++]*c-_sums[i]*_sums[j]*c2;
        cov.at(i, j)=v;
        cov.at(j, i)=v;
      }
    }
    return cov;
  }
double QGpCoreTools::Covariance::mean ( int  i) const [inline]

Referenced by stddev2D(), and CoordReader::terminate().

{return _sums[i]/_count;}

References TRACE.

Referenced by Covariance().

  {
    TRACE;
    for(int i=0; i<_n; i++) {
      _sums[i]=0.0;
    }
    for(int i=0; i<_nx; i++) {
      _xProducts[i]=0.0;
    }
    _count=0;
  }

References QGpCoreTools::Matrix< T >::columnAt(), QGpCoreTools::DoubleMatrix::eigenVectors(), matrix(), mean(), QGpCoreTools::Ellipse::setCenter(), QGpCoreTools::Ellipse::setMajorRadius(), QGpCoreTools::Ellipse::setMinorRadius(), QGpCoreTools::Ellipse::setOrientation(), QGpCoreTools::sqrt(), and TRACE.

Referenced by CoordReader::terminate().

  {
    TRACE;
    Ellipse res;
    if(_n!=2) {
      return res;
    }
    if(_count>1) {
      DoubleMatrix cov=matrix();
      QVector<double> eigenValues;
      DoubleMatrix eigenVectors=cov.eigenVectors(eigenValues);
      Point2D majorAxis=eigenVectors.columnAt(0);
      //Point2D minorAxis=eigenVectors.columnAt(1);
      res.setCenter(Point2D(mean(0), mean(1)));
      if(eigenValues.at(0)>0.0) {
        res.setMajorRadius(::sqrt(eigenValues.at(0)));
      } else {
        res.setMajorRadius(0.0);
      }
      if(eigenValues.at(1)>0.0) {
        res.setMinorRadius(::sqrt(eigenValues.at(1)));
      } else {
        res.setMinorRadius(0.0);
      }
      res.setOrientation(Point2D().azimuthTo(majorAxis));
    } else {
      res.setCenter(Point2D(mean(0), mean(1)));
    }
    return res;
  }

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines