Brief description of class still missing. More...
#include <Covariance.h>
Public Member Functions | |
| void | add (double *val) |
| Covariance (int n) | |
| DoubleMatrix | matrix () const |
| double | mean (int i) const |
| void | reset () |
| Ellipse | stddev2D () const |
| ~Covariance () | |
Brief description of class still missing.
Full description of class still missing
| QGpCoreTools::Covariance::Covariance | ( | int | n | ) |
| 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++;
}
| DoubleMatrix QGpCoreTools::Covariance::matrix | ( | ) | const |
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;}
| void QGpCoreTools::Covariance::reset | ( | ) |
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;
}
| Ellipse QGpCoreTools::Covariance::stddev2D | ( | ) | const |
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;
}