Hi, I find the documentation of the linear algebra classes a bit lacking making it hard to figure out how to use them in the first place, and good practices thereafter. Once I have stuff figured out it usually is easy, though, and I really enjoy using it.
I have the following problem: speaking intuitively, I want to convert a covariance matrix C to a different coordinate system. This means sandwiching C between the linearized transformation matrix A and its transposed A^T, i.e. C’ = ACA^T. Now, since C is symmetric, positive (semi-)definite, C’ is as well. Is there a way to tell ROOT that a matrix expression is symmetric, even though the individual factors aren’t?
I.e., I want to express the fact that something like
TMatrixDSym D = TMatrixDSym (A, TMatrixD::kMult,
TMatrixD (C, TMatrixD::kMultTranspose, A));
does indeed give a symmetric matric (the example gives a nice series of C++ errors). Alternatively, I’m looking for a way to convert a TMatrixT to a TMatrixTSym.
(There’s also
enum EMatrixCreatorsOp1 { kZero,kUnit,kTransposed,kInverted,kAtA };
in TMatrixT.h, so I could perhaps take the square root of C (i.e. its Cholesky decomposition), multiply the decomposition matrix U with A^T from above, and then multiply the resulting matrix with itself via TMatrixT::kAtA to obtain the symmetric matrix I’m after. Not really elegant, and I couldn’t find any documentation indicating whether kAtA really does what I think it does.)