quzn
October 29, 2021, 5:22am
1
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;
quzn
October 29, 2021, 9:15am
3
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();
quzn
October 29, 2021, 2:57pm
5
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]
quzn
October 29, 2021, 4:11pm
7
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);
system
Closed
November 15, 2021, 1:41pm
11
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.