Added tests for R/covariance/information
parent
d45f6336d8
commit
5b4daf7527
|
|
@ -33,19 +33,12 @@ using namespace gtsam;
|
||||||
using namespace noiseModel;
|
using namespace noiseModel;
|
||||||
using namespace boost::assign;
|
using namespace boost::assign;
|
||||||
|
|
||||||
static const double kSigma = 2, s_1=1.0/kSigma, kVariance = kSigma*kSigma, prc = 1.0/kVariance;
|
static const double kSigma = 2, kInverseSigma = 1.0 / kSigma,
|
||||||
static const Matrix R = (Matrix(3, 3) <<
|
kVariance = kSigma * kSigma, prc = 1.0 / kVariance;
|
||||||
s_1, 0.0, 0.0,
|
static const Matrix R = Matrix3::Identity() * kInverseSigma;
|
||||||
0.0, s_1, 0.0,
|
static const Matrix kCovariance = Matrix3::Identity() * kVariance;
|
||||||
0.0, 0.0, s_1).finished();
|
|
||||||
static const Matrix kCovariance = (Matrix(3, 3) <<
|
|
||||||
kVariance, 0.0, 0.0,
|
|
||||||
0.0, kVariance, 0.0,
|
|
||||||
0.0, 0.0, kVariance).finished();
|
|
||||||
static const Vector3 kSigmas(kSigma, kSigma, kSigma);
|
static const Vector3 kSigmas(kSigma, kSigma, kSigma);
|
||||||
|
|
||||||
//static double inf = numeric_limits<double>::infinity();
|
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
TEST(NoiseModel, constructors)
|
TEST(NoiseModel, constructors)
|
||||||
{
|
{
|
||||||
|
|
@ -58,8 +51,8 @@ TEST(NoiseModel, constructors)
|
||||||
m.push_back(Gaussian::Covariance(kCovariance,false));
|
m.push_back(Gaussian::Covariance(kCovariance,false));
|
||||||
m.push_back(Gaussian::Information(kCovariance.inverse(),false));
|
m.push_back(Gaussian::Information(kCovariance.inverse(),false));
|
||||||
m.push_back(Diagonal::Sigmas(kSigmas,false));
|
m.push_back(Diagonal::Sigmas(kSigmas,false));
|
||||||
m.push_back(Diagonal::Variances((Vector(3) << kVariance, kVariance, kVariance).finished(),false));
|
m.push_back(Diagonal::Variances((Vector3(kVariance, kVariance, kVariance)),false));
|
||||||
m.push_back(Diagonal::Precisions((Vector(3) << prc, prc, prc).finished(),false));
|
m.push_back(Diagonal::Precisions(Vector3(prc, prc, prc),false));
|
||||||
m.push_back(Isotropic::Sigma(3, kSigma,false));
|
m.push_back(Isotropic::Sigma(3, kSigma,false));
|
||||||
m.push_back(Isotropic::Variance(3, kVariance,false));
|
m.push_back(Isotropic::Variance(3, kVariance,false));
|
||||||
m.push_back(Isotropic::Precision(3, prc,false));
|
m.push_back(Isotropic::Precision(3, prc,false));
|
||||||
|
|
@ -82,25 +75,23 @@ TEST(NoiseModel, constructors)
|
||||||
DOUBLES_EQUAL(distance,mi->Mahalanobis(unwhitened),1e-9);
|
DOUBLES_EQUAL(distance,mi->Mahalanobis(unwhitened),1e-9);
|
||||||
|
|
||||||
// test R matrix
|
// test R matrix
|
||||||
Matrix expectedR((Matrix(3, 3) <<
|
|
||||||
s_1, 0.0, 0.0,
|
|
||||||
0.0, s_1, 0.0,
|
|
||||||
0.0, 0.0, s_1).finished());
|
|
||||||
|
|
||||||
BOOST_FOREACH(Gaussian::shared_ptr mi, m)
|
BOOST_FOREACH(Gaussian::shared_ptr mi, m)
|
||||||
EXPECT(assert_equal(expectedR,mi->R()));
|
EXPECT(assert_equal(R,mi->R()));
|
||||||
|
|
||||||
|
// test covariance
|
||||||
|
BOOST_FOREACH(Gaussian::shared_ptr mi, m)
|
||||||
|
EXPECT(assert_equal(kCovariance,mi->covariance()));
|
||||||
|
|
||||||
|
// test covariance
|
||||||
|
BOOST_FOREACH(Gaussian::shared_ptr mi, m)
|
||||||
|
EXPECT(assert_equal(kCovariance.inverse(),mi->information()));
|
||||||
|
|
||||||
// test Whiten operator
|
// test Whiten operator
|
||||||
Matrix H((Matrix(3, 4) <<
|
Matrix H((Matrix(3, 4) <<
|
||||||
0.0, 0.0, 1.0, 1.0,
|
0.0, 0.0, 1.0, 1.0,
|
||||||
0.0, 1.0, 0.0, 1.0,
|
0.0, 1.0, 0.0, 1.0,
|
||||||
1.0, 0.0, 0.0, 1.0).finished());
|
1.0, 0.0, 0.0, 1.0).finished());
|
||||||
|
Matrix expected = kInverseSigma * H;
|
||||||
Matrix expected((Matrix(3, 4) <<
|
|
||||||
0.0, 0.0, s_1, s_1,
|
|
||||||
0.0, s_1, 0.0, s_1,
|
|
||||||
s_1, 0.0, 0.0, s_1).finished());
|
|
||||||
|
|
||||||
BOOST_FOREACH(Gaussian::shared_ptr mi, m)
|
BOOST_FOREACH(Gaussian::shared_ptr mi, m)
|
||||||
EXPECT(assert_equal(expected,mi->Whiten(H)));
|
EXPECT(assert_equal(expected,mi->Whiten(H)));
|
||||||
|
|
||||||
|
|
@ -122,7 +113,7 @@ TEST(NoiseModel, equals)
|
||||||
{
|
{
|
||||||
Gaussian::shared_ptr g1 = Gaussian::SqrtInformation(R),
|
Gaussian::shared_ptr g1 = Gaussian::SqrtInformation(R),
|
||||||
g2 = Gaussian::SqrtInformation(eye(3,3));
|
g2 = Gaussian::SqrtInformation(eye(3,3));
|
||||||
Diagonal::shared_ptr d1 = Diagonal::Sigmas((Vector(3) << kSigma, kSigma, kSigma).finished()),
|
Diagonal::shared_ptr d1 = Diagonal::Sigmas(Vector3(kSigma, kSigma, kSigma)),
|
||||||
d2 = Diagonal::Sigmas(Vector3(0.1, 0.2, 0.3));
|
d2 = Diagonal::Sigmas(Vector3(0.1, 0.2, 0.3));
|
||||||
Isotropic::shared_ptr i1 = Isotropic::Sigma(3, kSigma),
|
Isotropic::shared_ptr i1 = Isotropic::Sigma(3, kSigma),
|
||||||
i2 = Isotropic::Sigma(3, 0.7);
|
i2 = Isotropic::Sigma(3, 0.7);
|
||||||
|
|
@ -141,7 +132,7 @@ TEST(NoiseModel, equals)
|
||||||
///* ************************************************************************* */
|
///* ************************************************************************* */
|
||||||
//TEST(NoiseModel, ConstrainedSmart )
|
//TEST(NoiseModel, ConstrainedSmart )
|
||||||
//{
|
//{
|
||||||
// Gaussian::shared_ptr nonconstrained = Constrained::MixedSigmas((Vector(3) << sigma, 0.0, sigma), true);
|
// Gaussian::shared_ptr nonconstrained = Constrained::MixedSigmas((Vector3(sigma, 0.0, sigma), true);
|
||||||
// Diagonal::shared_ptr n1 = boost::dynamic_pointer_cast<Diagonal>(nonconstrained);
|
// Diagonal::shared_ptr n1 = boost::dynamic_pointer_cast<Diagonal>(nonconstrained);
|
||||||
// Constrained::shared_ptr n2 = boost::dynamic_pointer_cast<Constrained>(nonconstrained);
|
// Constrained::shared_ptr n2 = boost::dynamic_pointer_cast<Constrained>(nonconstrained);
|
||||||
// EXPECT(n1);
|
// EXPECT(n1);
|
||||||
|
|
@ -160,8 +151,8 @@ TEST(NoiseModel, ConstrainedConstructors )
|
||||||
Constrained::shared_ptr actual;
|
Constrained::shared_ptr actual;
|
||||||
size_t d = 3;
|
size_t d = 3;
|
||||||
double m = 100.0;
|
double m = 100.0;
|
||||||
Vector sigmas = (Vector(3) << kSigma, 0.0, 0.0).finished();
|
Vector3 sigmas(kSigma, 0.0, 0.0);
|
||||||
Vector mu = Vector3(200.0, 300.0, 400.0);
|
Vector3 mu(200.0, 300.0, 400.0);
|
||||||
actual = Constrained::All(d);
|
actual = Constrained::All(d);
|
||||||
// TODO: why should this be a thousand ??? Dummy variable?
|
// TODO: why should this be a thousand ??? Dummy variable?
|
||||||
EXPECT(assert_equal(gtsam::repeat(d, 1000.0), actual->mu()));
|
EXPECT(assert_equal(gtsam::repeat(d, 1000.0), actual->mu()));
|
||||||
|
|
@ -187,7 +178,7 @@ TEST(NoiseModel, ConstrainedMixed )
|
||||||
{
|
{
|
||||||
Vector feasible = Vector3(1.0, 0.0, 1.0),
|
Vector feasible = Vector3(1.0, 0.0, 1.0),
|
||||||
infeasible = Vector3(1.0, 1.0, 1.0);
|
infeasible = Vector3(1.0, 1.0, 1.0);
|
||||||
Diagonal::shared_ptr d = Constrained::MixedSigmas((Vector(3) << kSigma, 0.0, kSigma).finished());
|
Diagonal::shared_ptr d = Constrained::MixedSigmas(Vector3(kSigma, 0.0, kSigma));
|
||||||
// NOTE: we catch constrained variables elsewhere, so whitening does nothing
|
// NOTE: we catch constrained variables elsewhere, so whitening does nothing
|
||||||
EXPECT(assert_equal(Vector3(0.5, 1.0, 0.5),d->whiten(infeasible)));
|
EXPECT(assert_equal(Vector3(0.5, 1.0, 0.5),d->whiten(infeasible)));
|
||||||
EXPECT(assert_equal(Vector3(0.5, 0.0, 0.5),d->whiten(feasible)));
|
EXPECT(assert_equal(Vector3(0.5, 0.0, 0.5),d->whiten(feasible)));
|
||||||
|
|
@ -346,7 +337,7 @@ TEST(NoiseModel, robustNoise)
|
||||||
{
|
{
|
||||||
const double k = 10.0, error1 = 1.0, error2 = 100.0;
|
const double k = 10.0, error1 = 1.0, error2 = 100.0;
|
||||||
Matrix A = (Matrix(2, 2) << 1.0, 10.0, 100.0, 1000.0).finished();
|
Matrix A = (Matrix(2, 2) << 1.0, 10.0, 100.0, 1000.0).finished();
|
||||||
Vector b = (Vector(2) << error1, error2).finished();
|
Vector b = Vector2(error1, error2);
|
||||||
const Robust::shared_ptr robust = Robust::Create(
|
const Robust::shared_ptr robust = Robust::Create(
|
||||||
mEstimator::Huber::Create(k, mEstimator::Huber::Scalar),
|
mEstimator::Huber::Create(k, mEstimator::Huber::Scalar),
|
||||||
Unit::Create(2));
|
Unit::Create(2));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue