inverted sign of square root to make inv sqrt positive for simple covariance matrices
parent
bf315781af
commit
f1f21a8589
|
@ -618,7 +618,8 @@ Matrix inverse_square_root(const Matrix& A) {
|
|||
svd(A,U,S,V);
|
||||
|
||||
// invert and sqrt diagonal of S
|
||||
for(size_t i = 0; i<m; i++) S(i) = pow(S(i),-0.5);
|
||||
// We also arbitrarily choose sign to make result have positive signs
|
||||
for(size_t i = 0; i<m; i++) S(i) = - pow(S(i),-0.5);
|
||||
return vector_scale(S, V); // V*S;
|
||||
}
|
||||
|
||||
|
|
|
@ -593,13 +593,14 @@ TEST( matrix, inverse_square_root )
|
|||
);
|
||||
Matrix actual = inverse_square_root(measurement_covariance);
|
||||
|
||||
Matrix square_root_inverse_covariance = Matrix_(3,3,
|
||||
-2.0, 0.0, 0.0,
|
||||
0.0, -2.0, 0.0,
|
||||
0.0, 0.0, -10.0
|
||||
Matrix expected = Matrix_(3,3,
|
||||
2.0, 0.0, 0.0,
|
||||
0.0, 2.0, 0.0,
|
||||
0.0, 0.0, 10.0
|
||||
);
|
||||
|
||||
EQUALITY(square_root_inverse_covariance,actual);
|
||||
EQUALITY(expected,actual);
|
||||
EQUALITY(measurement_covariance,inverse(actual*actual));
|
||||
}
|
||||
|
||||
/* ************************************************************************* */
|
||||
|
|
Loading…
Reference in New Issue