SVD result error

Dear developers,
I have a 12*12 singular matrix which determinant is zero. I use TDecompSVD to calculate its pseudoinverse.

TDecompSVD covMatrixSVD(covMatrix);
covMatrixSVD.GetSig().Print();
TMatrixD covInvert = covMatrixSVD.Invert();
covInvert.Print();

But all elements in the invert have a same large strange value 6.984e+19. What is the reason of this error and how can I get correct results?
The vector S shows as followed.

      |        1  |
  ------------------
    0 |2.8164e-06
    1 |5.52016e-07
    2 |4.13232e-07
    3 |3.14697e-07
    4 |2.69679e-07
    5 |1.37825e-07
    6 |1.00029e-07
    7 |7.69837e-08
    8 |5.5811e-08
    9 |3.87082e-08
   10 |1.5507e-08
   11 |1.19313e-21

Try to “dump” everything (maybe @Eddy_Offermann will be able to deduce something):

Double_t d1, d2;
TDecompSVD covMatrixSVD(covMatrix);
cout << endl << "... before Invert ..." << endl << endl;
covMatrixSVD.Print();
covMatrixSVD.Det(d1, d2);
cout << "determinant = " << d1 * TMath::Power(2., d2) << endl;
Bool_t status;
TMatrixD covInvertSVD = covMatrixSVD.Invert(status);
cout << endl << "... after Invert ..." << endl << endl;
cout << "Invert status = " << status << endl << endl;
covMatrixSVD.Print();
covMatrixSVD.Det(d1, d2);
cout << "determinant = " << d1 * TMath::Power(2., d2) << endl;
cout << endl << "... Invert result ..." << endl;
covInvertSVD.Print();
cout << "determinant = " << covInvertSVD.Determinant() << endl;

That is the output

... before Invert ...

fTol       = 2.2204e-16
fDet1      = 0.0000e+00
fDet2      = 0.0000e+00
fCondition = -1.0000e+00
fRowLwb    = 0
fColLwb    = 0

12x12 matrix is as follows

     |       0    |       1    |       2    |       3    |       4    |       5    |       6    |       7    |       8    |       9    |      10    |      11    |
--------------------------------------------------------------------------------------------------------------------------------------------
   0 |          1           0           0           0           0          0           0           0           0           0          0           0
   1 |          0           1           0           0           0          0           0           0           0           0          0           0
   2 |          0           0           1           0           0          0           0           0           0           0          0           0
   3 |          0           0           0           1           0          0           0           0           0           0          0           0
   4 |          0           0           0           0           1          0           0           0           0           0          0           0
   5 |          0           0           0           0           0          1           0           0           0           0          0           0
   6 |          0           0           0           0           0          0           1           0           0           0          0           0
   7 |          0           0           0           0           0          0           0           1           0           0          0           0
   8 |          0           0           0           0           0          0           0           0           1           0          0           0
   9 |          0           0           0           0           0          0           0           0           0           1          0           0
  10 |          0           0           0           0           0          0           0           0           0           0          1           0
  11 |          0           0           0           0           0          0           0           0           0           0          0           1


12x12 matrix is as follows

     |       0    |       1    |       2    |       3    |       4    |       5    |       6    |       7    |       8    |       9    |      10    |      11    |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
   0 |  4.014e-07   3.064e-07   2.496e-07   1.428e-07    1.48e-07  6.455e-08   5.019e-08  -5.457e-08  -1.118e-07  -3.473e-07 -4.149e-07  -4.344e-07
   1 |  3.064e-07   3.089e-07   2.594e-07   1.301e-07   1.425e-07   6.63e-08   5.573e-08  -4.465e-08  -1.074e-07  -3.217e-07 -3.973e-07  -3.982e-07
   2 |  2.496e-07   2.594e-07   2.761e-07   1.429e-07    1.28e-07  6.026e-08   4.488e-08  -4.657e-08  -1.041e-07   -2.91e-07 -3.499e-07  -3.696e-07
   3 |  1.428e-07   1.301e-07   1.429e-07   1.339e-07   1.047e-07  3.675e-08   1.868e-08  -3.579e-08  -5.834e-08  -1.674e-07 -2.213e-07  -2.268e-07
   4 |   1.48e-07   1.425e-07    1.28e-07   1.047e-07   1.706e-07  8.025e-08   3.803e-08  -3.817e-08  -7.498e-08  -1.884e-07 -2.566e-07   -2.54e-07
   5 |  6.455e-08    6.63e-08   6.026e-08   3.675e-08   8.025e-08  1.414e-07   7.081e-08  -3.935e-08  -7.667e-08  -1.062e-07  -1.59e-07  -1.391e-07
   6 |  5.019e-08   5.573e-08   4.488e-08   1.868e-08   3.803e-08  7.081e-08   1.977e-07   6.748e-08   -7.31e-08  -1.443e-07  -1.75e-07  -1.511e-07
   7 | -5.457e-08  -4.465e-08  -4.657e-08  -3.579e-08  -3.817e-08 -3.935e-08   6.748e-08    2.22e-07   7.916e-08  -5.579e-08 -3.066e-08  -2.308e-08
   8 | -1.118e-07  -1.074e-07  -1.041e-07  -5.834e-08  -7.498e-08 -7.667e-08   -7.31e-08   7.916e-08   3.035e-07   1.498e-07  3.751e-08   3.641e-08
   9 | -3.473e-07  -3.217e-07   -2.91e-07  -1.674e-07  -1.884e-07 -1.062e-07  -1.443e-07  -5.579e-08   1.498e-07   6.985e-07  4.348e-07    3.39e-07
  10 | -4.149e-07  -3.973e-07  -3.499e-07  -2.213e-07  -2.566e-07  -1.59e-07   -1.75e-07  -3.066e-08   3.751e-08   4.348e-07  9.242e-07    6.08e-07
  11 | -4.344e-07  -3.982e-07  -3.696e-07  -2.268e-07   -2.54e-07 -1.391e-07  -1.511e-07  -2.308e-08   3.641e-08    3.39e-07   6.08e-07   1.013e-06
Vector (12) fSig is as follows
 
     |        1  |
------------------
   0 |0
   1 |0
   2 |0
   3 |0
   4 |0
   5 |0
   6 |0
   7 |0
   8 |0
   9 |0
  10 |0
  11 |0

determinant = 0

Vector (12)  is as follows

     |        1  |
------------------
   0 |2.8164e-06
   1 |5.52016e-07
   2 |4.13232e-07
   3 |3.14697e-07
   4 |2.69679e-07
   5 |1.37825e-07
   6 |1.00029e-07
   7 |7.69837e-08
   8 |5.5811e-08
   9 |3.87082e-08
  10 |1.5507e-08
  11 |1.19313e-21


... after Invert ...

Invert status = 1

fTol       = 2.2204e-16
fDet1      = 0.0000e+00
fDet2      = 0.0000e+00
fCondition = -1.0000e+00
fRowLwb    = 0
fColLwb    = 0

12x12 matrix is as follows

     |       0    |       1    |       2    |       3    |       4    |
----------------------------------------------------------------------
   0 |    -0.3258     0.09536     -0.1944     0.04005     -0.2749
   1 |    -0.3021     0.09066     -0.1439     0.05755     -0.1742
   2 |    -0.2734     0.07938     -0.1681     0.03155     -0.1447
   3 |    -0.1645     0.02372     -0.1056      0.0702    -0.06012
   4 |    -0.1844     0.03296    -0.08749     0.09001       0.116
   5 |    -0.1052     0.05682    -0.03805     0.07928      0.4226
   6 |     -0.109     0.05513      0.2655     -0.2082      0.5714
   7 |   0.005231      -0.102      0.5596     -0.3992      0.0164
   8 |    0.09125     -0.4564      0.3964     0.04846     -0.5062
   9 |     0.3679     -0.6094     -0.2962      0.3665      0.2609
  10 |     0.4966      0.1332     -0.4452     -0.6448     -0.1318
  11 |     0.5035      0.6005      0.2574      0.4687    -0.09531


     |       5    |       6    |       7    |       8    |       9    |
----------------------------------------------------------------------
   0 |     0.3798     -0.4762      0.4278      -0.147      0.2359
   1 |      0.244    -0.03283     -0.1974      0.2822     -0.4471
   2 |    0.07994      0.3757     -0.5463       0.158      0.0923
   3 |    -0.2195       0.439     0.07517     -0.4751      0.4681
   4 |    -0.4769      0.1939      0.4726    -0.03127     -0.5454
   5 |    -0.4189     -0.3724    -0.08442       0.483      0.3918
   6 |        0.2     -0.2052     -0.2778     -0.5098     -0.2007
   7 |     0.2617       0.332      0.3233      0.3621      0.1381
   8 |    -0.3367     -0.3026     -0.2337     -0.1408    -0.06707
   9 |     0.3144       0.111      0.0763     0.04944   -0.008715
  10 |    -0.1078    -0.07484    -0.03741    -0.02159    -0.04053
  11 |    0.07995     0.01257    0.001701   -0.009158    -0.01674
     |      10    |      11    |
----------------------------------------------------------------------
   0 |    -0.2349     -0.2887
   1 |     0.6194     -0.2887
   2 |    -0.5532     -0.2887
   3 |     0.4218     -0.2887
   4 |    -0.2559     -0.2887
   5 |    0.08955     -0.2887
   6 |   -0.04484     -0.2887
   7 |    0.00683     -0.2887
   8 |    -0.0201     -0.2887
   9 |   -0.01787     -0.2887
  10 |    0.01482     -0.2887
  11 |    -0.0256     -0.2887


12x12 matrix is as follows

     |       0    |       1    |       2    |       3    |       4    |
----------------------------------------------------------------------
   0 |    -0.3258     0.09536     -0.1944     0.04005     -0.2749
   1 |    -0.3021     0.09066     -0.1439     0.05755     -0.1742
   2 |    -0.2734     0.07938     -0.1681     0.03155     -0.1447
   3 |    -0.1645     0.02372     -0.1056      0.0702    -0.06012
   4 |    -0.1844     0.03296    -0.08749     0.09001       0.116
   5 |    -0.1052     0.05682    -0.03805     0.07928      0.4226
   6 |     -0.109     0.05513      0.2655     -0.2082      0.5714
   7 |   0.005231      -0.102      0.5596     -0.3992      0.0164
   8 |    0.09125     -0.4564      0.3964     0.04846     -0.5062
   9 |     0.3679     -0.6094     -0.2962      0.3665      0.2609
  10 |     0.4966      0.1332     -0.4452     -0.6448     -0.1318
  11 |     0.5035      0.6005      0.2574      0.4687    -0.09531


     |       5    |       6    |       7    |       8    |       9    |
----------------------------------------------------------------------
   0 |     0.3798     -0.4762      0.4278      -0.147      0.2359
   1 |      0.244    -0.03283     -0.1974      0.2822     -0.4471
   2 |    -0.2734     0.07938     -0.1681     0.03155     -0.1447
   3 |    -0.1645     0.02372     -0.1056      0.0702    -0.06012
   4 |    -0.1844     0.03296    -0.08749     0.09001       0.116
   5 |    -0.1052     0.05682    -0.03805     0.07928      0.4226
   6 |     -0.109     0.05513      0.2655     -0.2082      0.5714
   7 |   0.005231      -0.102      0.5596     -0.3992      0.0164
   8 |    0.09125     -0.4564      0.3964     0.04846     -0.5062
   9 |     0.3679     -0.6094     -0.2962      0.3665      0.2609
  10 |     0.4966      0.1332     -0.4452     -0.6448     -0.1318
  11 |     0.5035      0.6005      0.2574      0.4687    -0.09531


     |       5    |       6    |       7    |       8    |       9    |
----------------------------------------------------------------------
   0 |     0.3798     -0.4762      0.4278      -0.147      0.2359
   1 |      0.244    -0.03283     -0.1974      0.2822     -0.4471
   2 |    0.07994      0.3757     -0.5463       0.158      0.0923
   3 |    -0.2195       0.439     0.07517     -0.4751      0.4681
   4 |    -0.4769      0.1939      0.4726    -0.03127     -0.5454
   5 |    -0.4189     -0.3724    -0.08442       0.483      0.3918
   6 |        0.2     -0.2052     -0.2778     -0.5098     -0.2007
   7 |     0.2617       0.332      0.3233      0.3621      0.1381
   8 |    -0.3367     -0.3026     -0.2337     -0.1408    -0.06707
   9 |     0.3144       0.111      0.0763     0.04944   -0.008715
  10 |    -0.1078    -0.07484    -0.03741    -0.02159    -0.04053
  11 |    0.07995     0.01257    0.001701   -0.009158    -0.01674


     |      10    |      11    |
----------------------------------------------------------------------
   0 |    -0.2349     -0.2887
   1 |     0.6194     -0.2887
   2 |    -0.5532     -0.2887
   3 |     0.4218     -0.2887
   4 |    -0.2559     -0.2887
   5 |    0.08955     -0.2887
   6 |   -0.04484     -0.2887
   7 |    0.00683     -0.2887
   8 |    -0.0201     -0.2887
   9 |   -0.01787     -0.2887
  10 |    0.01482     -0.2887
  11 |    -0.0256     -0.2887


Vector (12) fSig is as follows

     |        1  |
------------------
   0 |2.8164e-06
   1 |5.52016e-07
   2 |4.13232e-07
   3 |3.14697e-07
   4 |2.69679e-07
   5 |1.37825e-07
   6 |1.00029e-07
   7 |7.69837e-08
   8 |5.5811e-08
   9 |3.87082e-08
  10 |1.5507e-08
  11 |1.19313e-21

determinant = 0

... Invert result ...

12x12 matrix is as follows

     |       0    |       1    |       2    |       3    |       4    |
----------------------------------------------------------------------
   0 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   1 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   2 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   3 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   4 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   5 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   6 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   7 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   8 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   9 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
  10 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
  11 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19


     |       5    |       6    |       7    |       8    |       9    |
----------------------------------------------------------------------
   0 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   1 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   2 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   3 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   4 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   5 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   6 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   7 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   8 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
   9 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
  10 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19
  11 |  6.984e+19   6.984e+19   6.984e+19   6.984e+19   6.984e+19


     |      10    |      11    |
----------------------------------------------------------------------
   0 |  6.984e+19   6.984e+19
   1 |  6.984e+19   6.984e+19
   2 |  6.984e+19   6.984e+19
   3 |  6.984e+19   6.984e+19
   4 |  6.984e+19   6.984e+19
   5 |  6.984e+19   6.984e+19
   6 |  6.984e+19   6.984e+19
   7 |  6.984e+19   6.984e+19
   8 |  6.984e+19   6.984e+19
   9 |  6.984e+19   6.984e+19
  10 |  6.984e+19   6.984e+19
  11 |  6.984e+19   6.984e+19

determinant = 4.33459e+95

Please submit a root file in which your covariance matrix is stored:

TFile *f1 = TFile::Open("matrix.root","RECREATE");
covMatrix.Write("cov");
 f1->Close();

PhysRevD.101.092001.root (50.6 KB)
The covariance matrix root file

It does not contain a TMatrixD object:

root [0] TFile f("~/Downloads/PhysRevD.101.092001.root")
(TFile &) Name: /Users/eddyo/Downloads/PhysRevD.101.092001.root Title: 
root [1] f.ls()
TFile**		/Users/eddyo/Downloads/PhysRevD.101.092001.root	
 TFile*		/Users/eddyo/Downloads/PhysRevD.101.092001.root	
  KEY: TH1I	readme_only;1	TList At(0): TH1D of xsec with total errors, At(1):  TH1D of xsec with statistical errors only, At(2): TMatrixD total error matrix.
  KEY: TList	muonmomentum;1	Doubly linked list
  KEY: TList	muontheta;1	Doubly linked list
  KEY: TList	protonmomentum;1	Doubly linked list
  KEY: TList	protontheta;1	Doubly linked list
  KEY: TList	neutronmomentum;1	Doubly linked list
  KEY: TList	dalphat;1	Doubly linked list
  KEY: TList	dpt;1	Doubly linked list
  KEY: TList	dphit;1	Doubly linked list
  KEY: TList	dpTx;1	Doubly linked list
  KEY: TList	dpTy;1	Doubly linked list
root [2] 

TList At(2) is the matrix

Please provide either the TMatrixD object or a small script how to extract it from this root file

In your file, each “TList” has a matrix “At(2)”, so you need to show which of them you are using precisely.

I cycled through all the TList’s and can not find your 12 x 12 matrix:

muonmomentum    : 36 x 36
muontheta       : 23 x 23
protonmomentum  : 29 x 29
protontheta     : 30 x 30
neutronmomentum : 28 x 28
dalphat         : 15 x 15
dpt             : 28 x 28
dphit           : 26 x 26
dpTx            : 26 x 26
dpTy            : 35 x 35

Anyhow, most likely your observation is due to the setting of the parameter

fTol

The TDecompSVD documentation reads:

fTol is used to set the threshold on the minimum allowed value of the singular values: min_singular = fTol*max(fSig[i])

If the singular value is smaller that this minimum it is set to zero.
So in your case do

covMatrixSVD.SetTol(1.e-25);

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.