Closed GoogleCodeExporter closed 9 years ago
Thanks for the bug report. I see a few problems with the test, the largest one
being that the Colt matrix is always 4x4 while EJML keeps on growing.
I also did some tests in Octave, which is a wrapper around LAPACK, and it
appears to have a similar response to EJML.
octave:15> a=rand(3,3);
octave:16> det(a)-det(a')
ans = -2.7756e-17
octave:11> a=rand(60,60);
octave:12> det(a)-det(a')
ans = 5.7220e-06
a=rand(80,80);
octave:14> det(a)-det(a')
ans = 96
Could you make the following change?
DoubleMatrix2D matrixCern = doubleFactory2D.random(4,4);
to
DoubleMatrix2D matrixCern = doubleFactory2D.random(i,i);
Original comment by peter.ab...@gmail.com
on 2 Oct 2013 at 10:30
Thanks for the fast response and sorry for this silly error on my side.
The results between Colt and EJML are quite similar now. It was actually my
first concern to check whether this is a problem unique to EJML or more some
kind of problem that also affects other libraries.
1 0.0 0.0 0.0
2 6.938893903907228E-18 0.0 0.0
3 0.0 -6.938893903907228E-18 0.0
4 6.071532165918825E-18 -1.734723475976807E-18 0.0
5 2.7755575615628914E-17 5.551115123125783E-17 0.0
6 6.938893903907228E-18 -2.2985086056692694E-17 0.0
7 3.0357660829594124E-18 -2.2551405187698492E-17 0.0
8 1.3877787807814457E-17 6.938893903907228E-17 0.0
9 -2.7755575615628914E-17 0.0 0.0
10 4.3368086899420177E-19 -6.938893903907228E-18 0.0
11 6.938893903907228E-17 2.0816681711721685E-17 0.0
12 -1.3877787807814457E-17 0.0 0.0
13 1.6479873021779667E-17 5.204170427930421E-17 0.0
14 -2.7755575615628914E-17 -1.942890293094024E-16 0.0
15 -1.3877787807814457E-17 -4.163336342344337E-17 0.0
16 -3.469446951953614E-17 -3.469446951953614E-17 0.0
17 -5.551115123125783E-17 4.5102810375396984E-17 0.0
18 2.986976985197565E-17 5.692061405548898E-18 0.0
19 2.0816681711721685E-17 7.979727989493313E-17 0.0
20 2.2551405187698492E-17 -1.214306433183765E-17 0.0
21 -1.3877787807814457E-17 1.249000902703301E-16 0.0
22 4.5102810375396984E-17 -2.0816681711721685E-17 0.0
23 6.661338147750939E-16 9.992007221626409E-16 0.0
24 -4.884981308350689E-15 -2.4424906541753444E-15 0.0
25 7.216449660063518E-16 2.220446049250313E-16 0.0
26 -3.2751579226442118E-15 -1.6514567491299204E-15 0.0
27 1.942890293094024E-15 -6.106226635438361E-16 0.0
28 9.71445146547012E-16 0.0 0.0
29 -1.7208456881689926E-15 2.9976021664879227E-15 0.0
30 4.6629367034256575E-15 4.440892098500626E-16 0.0
31 9.103828801926284E-15 -2.7977620220553945E-14 0.0
32 -2.6645352591003757E-14 4.618527782440651E-14 0.0
33 2.5951463200613034E-15 9.506284648352903E-15 0.0
34 -1.0231815394945443E-12 -4.405364961712621E-13 0.0
35 3.268496584496461E-13 2.5579538487363607E-13 0.0
36 -2.4868995751603507E-14 1.1723955140041653E-13 0.0
37 9.379164112033322E-13 -5.115907697472721E-13 0.0
38 2.2737367544323206E-13 5.684341886080801E-13 0.0
39 5.542233338928781E-13 -4.973799150320701E-13 0.0
40 -1.8971491044794675E-12 -1.3358203432289883E-12 0.0
41 -6.423306331271306E-12 -2.4442670110147446E-12 0.0
42 3.865352482534945E-12 4.774847184307873E-12 0.0
43 6.548361852765083E-11 -3.637978807091713E-12 0.0
44 -2.9558577807620168E-12 -1.1937117960769683E-11 0.0
45 -9.276845958083868E-11 2.5283952709287405E-10 0.0
46 -2.3283064365386963E-10 6.402842700481415E-10 0.0
47 -1.0986695997416973E-9 -9.64064383879304E-10 0.0
48 4.0745362639427185E-9 -8.149072527885437E-10 0.0
49 3.92901711165905E-10 -3.055902197957039E-10 0.0
50 -1.3969838619232178E-9 3.259629011154175E-9 0.0
51 4.6566128730773926E-9 1.3504177331924438E-8 0.0
52 9.313225746154785E-9 2.3283064365386963E-9 0.0
53 1.30385160446167E-8 -2.60770320892334E-8 0.0
54 6.48200511932373E-7 4.470348358154297E-8 0.0
55 -6.332993507385254E-8 4.0978193283081055E-8 0.0
56 5.245208740234375E-6 4.5299530029296875E-6 0.0
57 -1.5832483768463135E-7 -1.2293457984924316E-7 0.0
58 -5.066394805908203E-7 -8.642673492431641E-7 0.0
59 -2.682209014892578E-6 4.351139068603516E-6 0.0
60 2.384185791015625E-6 -5.900859832763672E-6 0.0
61 -2.8520822525024414E-5 -1.621246337890625E-5 0.0
62 1.41143798828125E-4 2.09808349609375E-4 0.0
63 3.814697265625E-6 -8.20159912109375E-5 0.0
64 8.678436279296875E-5 8.58306884765625E-6 0.0
65 4.2724609375E-4 0.004180908203125 0.0
66 -5.6743621826171875E-5 1.1968612670898438E-4 0.0
67 7.62939453125E-6 -1.02996826171875E-4 0.0
68 -0.0142822265625 -0.0169677734375 0.0
69 0.3828125 0.4921875 0.0
70 -0.03515625 -0.09375 0.0
71 0.052490234375 -0.006103515625 0.0
72 0.01953125 -0.0556640625 0.0
73 0.0015606880187988281 0.0026330947875976562 0.0
74 -28.59375 -7.75 0.0
75 1.09375 0.046875 0.0
76 -12.0 -22.9375 0.0
77 -6.0 -62.0 0.0
78 64.0 832.0 0.0
79 -2272.0 640.0 0.0
80 148.0 -88.0 0.0
81 -64.0 -816.0 0.0
82 -13056.0 -20480.0 0.0
83 -1408.0 -2848.0 0.0
84 -6784.0 14848.0 0.0
85 -139264.0 700416.0 0.0
86 -58368.0 86016.0 0.0
87 786432.0 -32768.0 0.0
88 311296.0 638976.0 0.0
89 1015808.0 -81920.0 0.0
90 655360.0 1.2189696E7 0.0
91 -6.5011712E7 -1.6777216E7 0.0
92 1.92937984E8 2.3986176E8 0.0
93 1.8874368E7 8.912896E7 0.0
94 5.519704064E9 -1.241513984E9 0.0
95 1.92937984E8 5.0331648E8 0.0
96 1.879048192E10 -2.6306674688E10 0.0
97 4.69762048E9 4.966055936E9 0.0
98 4.7244640256E10 -4.4023414784E10 0.0
99 2.147483648E9 2.147483648E9 0.0
Original comment by os...@united-forum.de
on 2 Oct 2013 at 10:48
Code snippet to reproduce (both are now based on the same random values,
hopefully since Colt also uses row-major-ordering):
for(int d = 1; d < 100; d++) {
// Dimension
System.out.print(d + "\t");
double[][] values = new double[d][d];
Random RNG = new Random();
for (int i = 0; i < values.length; i++) {
for (int j = 0; j < values[i].length; j++) {
values[i][j] = RNG.nextDouble();
}
}
// Error using Colt
DenseDoubleMatrix2D matrixCern = new DenseDoubleMatrix2D(values);
Algebra algebra = new Algebra();
System.out.print(algebra.det(matrixCern) - algebra.det(algebra.transpose(matrixCern)) + "\t");
// Error using EJML ...
Random random = new Random();
DenseMatrix64F matrix = new DenseMatrix64F(values);
System.out.print(CommonOps.det(matrix) - CommonOps.det(CommonOps.transpose(matrix, null)) + "\t");
// ... for det(A) - det((A^t)^t), to differentiate whether det() or ^t seems to be erroneous.
System.out.println(CommonOps.det(matrix) - CommonOps.det(CommonOps.transpose(CommonOps.transpose(matrix, null), null)));
}
Original comment by os...@united-forum.de
on 2 Oct 2013 at 10:49
It certainly did look weird. The problem might just be because the determinant
is very large. Here is what the error looks like when it is rescaled by the
magnitude:
det(a)-det(a')
ans = -520
(det(a)-det(a'))/det(a)
ans = 8.8078e-15
Original comment by peter.ab...@gmail.com
on 2 Oct 2013 at 11:09
Below are the results for the relative error (rescaled by det(A)), which seems
to be "stable". I am still quite surprised by the fact that the absolute error
of the algorithm increases so quickly with regards to the dimension.
Thanks again for the fast reply :-)
Results for (det(A) - det(A^t)) / det(A)
1 0.0 0.0
2 -0.0 -0.0
3 -0.0 -0.0
4 1.824441488823891E-16 1.824441488823891E-16
5 1.206920119610065E-15 -4.023067065366889E-16
6 0.0 -1.3428689459092415E-16
7 -2.8129604068761855E-15 2.163815697597064E-16
8 -8.604406468453307E-16 -2.3662117788246626E-15
9 -2.7105802646278556E-15 -5.70648476763758E-16
10 -0.0 -1.1863194498221541E-16
11 -6.074482570322987E-16 -8.099310093763981E-16
12 -1.729802377919336E-16 -0.0
13 -4.627622848423366E-15 3.3054448917309567E-15
14 0.0 -1.4352639892649032E-15
15 1.3567507497480756E-13 7.672226889947382E-14
16 3.2231009313347807E-16 -1.9338605588008712E-15
17 -3.8228562721225634E-15 -1.7521424580561732E-15
18 9.997976599385661E-16 1.888506690995067E-15
19 -6.247301478393343E-16 -5.497625300986159E-15
20 -3.7817716192992067E-14 1.3789885462637529E-14
21 1.3257632294239314E-15 1.4914836331019226E-15
22 -3.391086168759087E-16 2.2042060096934056E-15
23 -1.1932444388975158E-15 -4.772977755590059E-16
24 -1.3527729664966746E-14 2.0419214588628925E-15
25 5.670520777691471E-13 2.3057251956158276E-13
26 -9.728603632988551E-16 3.729298059312255E-15
27 7.601173118479366E-15 -7.812316816214996E-15
28 3.953139494077823E-15 2.888832707210715E-15
29 -5.6842554005956695E-15 -4.440824531715365E-15
30 -3.605704636428275E-15 -3.605704636428263E-15
31 -4.3905315117264786E-15 -9.220116174625617E-15
32 8.274404030208207E-15 1.155294147613977E-14
33 -3.526813576366259E-15 -8.942991568643024E-15
34 -2.3403138353939926E-16 -1.1701569176969995E-16
35 -4.109194601518285E-15 -2.301148976850253E-15
36 -1.2902167445123622E-15 1.4075091758316651E-15
37 9.167595566845657E-16 -9.167595566845628E-16
38 -6.021428015681001E-15 1.254464169933536E-15
39 1.4666345060552747E-15 -1.0083112229130145E-14
40 5.637349574566548E-15 -4.3998825947836655E-15
41 6.706256346968483E-16 -1.9112830588860036E-14
42 2.6484328156639312E-14 1.6420283457116783E-14
43 -2.369582275869506E-15 -2.1541657053359203E-16
44 4.370918348461875E-15 -6.712481749423625E-15
45 -1.3610540851897579E-15 -8.71074614521448E-15
46 1.1221363621600939E-14 4.98727272071156E-15
47 6.538054155955505E-15 2.124867600685546E-15
48 -1.4405870482795975E-15 -3.781541001733941E-15
49 2.9575547105016463E-14 2.160700591609985E-14
50 5.371192946031127E-16 6.08735200550192E-15
51 -6.403539546510777E-15 -2.022170383108658E-15
52 2.5915609515594963E-16 7.385948711944562E-15
53 -1.734728425344786E-14 -7.059941265938121E-15
54 -1.9534733138010694E-14 1.7063471716936757E-14
55 3.7159207638150917E-14 -5.955209259040166E-14
56 -1.6499754968925105E-14 -3.4020113337989656E-15
57 -1.1276188001243333E-14 -3.3476183128690753E-15
58 2.2142936535296792E-16 -9.078603979471747E-15
59 2.6195912977776717E-15 -1.007535114529887E-14
60 -7.218352908713267E-15 8.478700241980608E-15
61 4.862190273069208E-14 1.435776186517924E-13
62 1.2988855662485257E-14 -8.962310407114962E-15
63 -5.658997373946862E-15 -1.5433629201673266E-15
64 2.431250334383285E-13 -4.76682078678957E-13
65 7.074369030257145E-15 -5.264646720191408E-15
66 -2.4194913067697545E-14 -1.9606222658306205E-14
67 2.947617799949015E-15 -1.4738088999745222E-14
68 2.4286851190253887E-14 1.6874630372448863E-14
69 -4.445551216908515E-15 3.810472471635848E-15
70 3.3609724209992E-15 -2.868029799252456E-14
71 -1.3589070386757636E-15 9.706478847684006E-16
72 -7.166334982735422E-15 8.745357945032958E-15
73 8.492006754479673E-15 -3.569104288114665E-15
74 -2.962006382824995E-15 -3.7594696397394136E-15
75 1.2562495539536512E-14 1.5330503031298824E-14
76 -2.552930253167302E-14 2.3497119245568902E-14
77 3.5304772438571084E-15 -1.922148721655588E-14
78 7.055066079538765E-15 -4.385207739635053E-14
79 8.523075328026016E-15 2.0889890509868004E-14
80 -4.81174680867302E-15 4.277108274375968E-15
81 1.4987386309760915E-14 4.995795436586945E-15
82 -5.788268509573278E-14 4.488552865125873E-14
83 1.8521702981816478E-14 1.438876099413821E-14
84 -1.4199364969082557E-14 -5.409281892983787E-16
85 -0.0 -8.994127563298831E-15
86 -8.059996059903619E-16 3.089665156296395E-15
87 -7.778038821309324E-16 -2.644533199245204E-15
88 -3.744325346365828E-15 -1.5841376465393997E-15
89 1.0332265573379568E-13 -5.942740983380247E-14
90 0.0 1.5999003321621432E-14
91 -4.611493620212044E-14 -1.7877891933431448E-14
92 2.5119513874937508E-14 -3.6075897586347066E-15
93 -2.7657005469684424E-14 -2.228364440700316E-14
94 -2.2271996746778896E-14 1.3622677621816062E-14
95 1.3426279255787078E-14 -2.2057458777364554E-14
96 -1.8108939130105014E-14 -4.527234782526444E-15
97 -2.828897622020963E-14 -4.2365133469878996E-15
98 -2.463523591844831E-15 -1.4429209609376787E-14
99 1.6092441856954997E-16 6.919749998490604E-15
Original comment by os...@united-forum.de
on 2 Oct 2013 at 11:41
Original comment by peter.ab...@gmail.com
on 2 Oct 2013 at 11:46
Original issue reported on code.google.com by
os...@united-forum.de
on 2 Oct 2013 at 9:37