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