Add DCS & Geman-McClure unit tests
parent
2969d61519
commit
47d787b478
|
|
@ -322,7 +322,7 @@ TEST(NoiseModel, WhitenInPlace)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
TEST(NoiseModel, robustFunction)
|
TEST(NoiseModel, robustFunctionHuber)
|
||||||
{
|
{
|
||||||
const double k = 5.0, error1 = 1.0, error2 = 10.0;
|
const double k = 5.0, error1 = 1.0, error2 = 10.0;
|
||||||
const mEstimator::Huber::shared_ptr huber = mEstimator::Huber::Create(k);
|
const mEstimator::Huber::shared_ptr huber = mEstimator::Huber::Create(k);
|
||||||
|
|
@ -332,8 +332,28 @@ TEST(NoiseModel, robustFunction)
|
||||||
DOUBLES_EQUAL(0.5, weight2, 1e-8);
|
DOUBLES_EQUAL(0.5, weight2, 1e-8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(NoiseModel, robustFunctionGemanMcClure)
|
||||||
|
{
|
||||||
|
const double k = 1.0, error1 = 1.0, error2 = 10.0;
|
||||||
|
const mEstimator::GemanMcClure::shared_ptr gmc = mEstimator::GemanMcClure::Create(k);
|
||||||
|
const double weight1 = gmc->weight(error1),
|
||||||
|
weight2 = gmc->weight(error2);
|
||||||
|
DOUBLES_EQUAL(0.5 , weight1, 1e-8);
|
||||||
|
DOUBLES_EQUAL(0.00990099, weight2, 1e-8);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(NoiseModel, robustFunctionDCS)
|
||||||
|
{
|
||||||
|
const double k = 1.0, error1 = 1.0, error2 = 10.0;
|
||||||
|
const mEstimator::DCS::shared_ptr dcs = mEstimator::DCS::Create(k);
|
||||||
|
const double weight1 = dcs->weight(error1),
|
||||||
|
weight2 = dcs->weight(error2);
|
||||||
|
DOUBLES_EQUAL(1.0 , weight1, 1e-8);
|
||||||
|
DOUBLES_EQUAL(0.01980198, weight2, 1e-8);
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
TEST(NoiseModel, robustNoise)
|
TEST(NoiseModel, robustNoiseHuber)
|
||||||
{
|
{
|
||||||
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();
|
||||||
|
|
@ -342,7 +362,7 @@ TEST(NoiseModel, robustNoise)
|
||||||
mEstimator::Huber::Create(k, mEstimator::Huber::Scalar),
|
mEstimator::Huber::Create(k, mEstimator::Huber::Scalar),
|
||||||
Unit::Create(2));
|
Unit::Create(2));
|
||||||
|
|
||||||
robust->WhitenSystem(A,b);
|
robust->WhitenSystem(A, b);
|
||||||
|
|
||||||
DOUBLES_EQUAL(error1, b(0), 1e-8);
|
DOUBLES_EQUAL(error1, b(0), 1e-8);
|
||||||
DOUBLES_EQUAL(sqrt(k*error2), b(1), 1e-8);
|
DOUBLES_EQUAL(sqrt(k*error2), b(1), 1e-8);
|
||||||
|
|
@ -353,6 +373,53 @@ TEST(NoiseModel, robustNoise)
|
||||||
DOUBLES_EQUAL(sqrt(k/100.0)*1000.0, A(1,1), 1e-8);
|
DOUBLES_EQUAL(sqrt(k/100.0)*1000.0, A(1,1), 1e-8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(NoiseModel, robustNoiseGemanMcClure)
|
||||||
|
{
|
||||||
|
const double k = 1.0, error1 = 1.0, error2 = 100.0;
|
||||||
|
const double a00 = 1.0, a01 = 10.0, a10 = 100.0, a11 = 1000.0;
|
||||||
|
Matrix A = (Matrix(2, 2) << a00, a01, a10, a11).finished();
|
||||||
|
Vector b = Vector2(error1, error2);
|
||||||
|
const Robust::shared_ptr robust = Robust::Create(
|
||||||
|
mEstimator::GemanMcClure::Create(k, mEstimator::GemanMcClure::Scalar),
|
||||||
|
Unit::Create(2));
|
||||||
|
|
||||||
|
robust->WhitenSystem(A, b);
|
||||||
|
|
||||||
|
const double sqrt_weight_error1 = sqrt(0.5);
|
||||||
|
const double sqrt_weight_error2 = sqrt(k/(k + error2*error2));
|
||||||
|
|
||||||
|
DOUBLES_EQUAL(sqrt_weight_error1*error1, b(0), 1e-8);
|
||||||
|
DOUBLES_EQUAL(sqrt_weight_error2*error2, b(1), 1e-8);
|
||||||
|
|
||||||
|
DOUBLES_EQUAL(sqrt_weight_error1*a00, A(0,0), 1e-8);
|
||||||
|
DOUBLES_EQUAL(sqrt_weight_error1*a01, A(0,1), 1e-8);
|
||||||
|
DOUBLES_EQUAL(sqrt_weight_error2*a10, A(1,0), 1e-8);
|
||||||
|
DOUBLES_EQUAL(sqrt_weight_error2*a11, A(1,1), 1e-8);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(NoiseModel, robustNoiseDCS)
|
||||||
|
{
|
||||||
|
const double k = 1.0, error1 = 1.0, error2 = 100.0;
|
||||||
|
const double a00 = 1.0, a01 = 10.0, a10 = 100.0, a11 = 1000.0;
|
||||||
|
Matrix A = (Matrix(2, 2) << a00, a01, a10, a11).finished();
|
||||||
|
Vector b = Vector2(error1, error2);
|
||||||
|
const Robust::shared_ptr robust = Robust::Create(
|
||||||
|
mEstimator::DCS::Create(k, mEstimator::DCS::Scalar),
|
||||||
|
Unit::Create(2));
|
||||||
|
|
||||||
|
robust->WhitenSystem(A, b);
|
||||||
|
|
||||||
|
const double sqrt_weight = sqrt(2.0*k/(k + error2*error2));
|
||||||
|
|
||||||
|
DOUBLES_EQUAL(error1, b(0), 1e-8);
|
||||||
|
DOUBLES_EQUAL(sqrt_weight*error2, b(1), 1e-8);
|
||||||
|
|
||||||
|
DOUBLES_EQUAL(a00, A(0,0), 1e-8);
|
||||||
|
DOUBLES_EQUAL(a01, A(0,1), 1e-8);
|
||||||
|
DOUBLES_EQUAL(sqrt_weight*a10, A(1,0), 1e-8);
|
||||||
|
DOUBLES_EQUAL(sqrt_weight*a11, A(1,1), 1e-8);
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
#define TEST_GAUSSIAN(gaussian)\
|
#define TEST_GAUSSIAN(gaussian)\
|
||||||
EQUALITY(info, gaussian->information());\
|
EQUALITY(info, gaussian->information());\
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue