Hello,
I am having trouble inverting TMatrixD matricies with small elements. For an example:
cplager@PointyIII> root
*******************************************
* *
* W E L C O M E to R O O T *
* *
* Version 4.02/00 17 December 2004 *
* *
* You are welcome to visit our Web site *
* http://root.cern.ch *
* *
*******************************************
FreeType Engine v2.1.3 used to render TrueType fonts.
Compiled for win32gcc with thread support.
CINT/ROOT C/C++ Interpreter version 5.15.159, Nov 14 2004
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
root [0] TMatrixD m(1,1)
root [1] m(0,0) = 5.58332e-22;
root [2] m.Invert()
(class TMatrixD)284111368
root [3] m(0,0)
Fatal in <TMatrixD>: IsValid() violated at line 204 of `include/TMatrixD.h'
aborting
On a linux machine with an older version of root, I get slightly more information, but the same result:
cplager@b0pcucla10> root
*******************************************
* *
* W E L C O M E to R O O T *
* *
* Version 4.00/08 1 December 2004 *
* *
* You are welcome to visit our Web site *
* http://root.cern.ch *
* *
*******************************************
FreeType Engine v2.1.3 used to render TrueType fonts.
Compiled for linux with thread support.
CINT/ROOT C/C++ Interpreter version 5.15.138, May 23 2004
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
root [0] TMatrixD m(1,1)
root [1] m(0,0) = 5.58332e-22;
Inroot [2] m.Invert()
mError in <InvertLU>: LU[0,0]=5.5833e-22 < 2.2204e-16
((class TMatrixD)149216040
root [3] m(0,0)
Fatal in <TMatrixD>: IsValid() violated at line 179 of `include/TMatrixD.h'
aborting
Note that we can’t upgrade our version of root as it is tied to the rest of our production.
Is there a way around this? (Is it fixed in newer versions of root?)
Cheers,
Charles