Hi Eddy, Thanks for your patch. Now in CVS. Thanks to Chris for reporting and identifying the problem. Rene Brun On Wed, 5 Feb 2003, Eddy Offermann wrote: > Hi Chris, > > Thanks for finding that bug ! > Your patch is a bit too "strong". I would cahnge the < 1.0 into == 0.0 > > Eddy > > > X-Authentication-Warning: pcroot.cern.ch: majordomo set sender to > owner-roottalk@root.cern.ch using -f > > Date: Wed, 05 Feb 2003 12:15:11 -0500 > > From: Chris Crawford <chris2@lns.mit.edu> > > User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020830 > > X-Accept-Language: en-us, en > > MIME-Version: 1.0 > > To: roottalk@pcroot.cern.ch > > Subject: [ROOT] TMatrix::Invert() bug > > Content-Transfer-Encoding: 7bit > > > > 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); > > } > > > > > > Eddy A.J.M. Offermann > Renaissance Technologies Corp. > Route 25A, East Setauket NY 11733 > e-mail: eddy@rentec.com > http://www.rentec.com >
This archive was generated by hypermail 2b29 : Thu Jan 01 2004 - 17:50:09 MET