Hello, TMatrix::Invert() fails on symmetric, matrixes with a zero in the diagonal (even nonsingular ones). Example: (v3.05/00) root [11] float x[]={0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1} float x[]={0,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1} root [12] TMatrix n(4,4,x) TMatrix n(4,4,x) root [13] n->Determinant() n->Determinant() (const Double_t)3.00000000000000000e+00 root [14] n->Invert() n->Invert() Fatal in <TMatrix::>: val != 0.0 violated at line 895 of `matrix/src/TMatrix.cxx' aborting Here is patch to fix the problem: --- TMatrix.cxx.~1.37.~ 2002-12-10 14:00:48.000000000 +0000 +++ TMatrix.cxx 2003-02-05 16:57:59.000000000 +0000 @@ -1159,6 +1159,9 @@ TVector diag(fNrows); if (symmetric) { diag = TMatrixDiag(*this); + for (int idx=0; idx<diag.fNrows; idx++) { + if (diag.fElements[idx] < 1.0) diag.fElements[idx] = 1.0; + } this->NormByDiag(diag); }
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:09 MET