4#ifndef ROOT_Math_CholeskyDecomp 
    5#define ROOT_Math_CholeskyDecomp 
   35namespace CholeskyDecompHelpers {
 
   38   template<
class F, 
unsigned N, 
class M> 
struct _decomposer;
 
   40   template<
class F, 
unsigned N, 
class M> 
struct _inverter;
 
   42   template<
class F, 
unsigned N, 
class V> 
struct _solver;
 
   98      fOk = _decomposer<F, N, M>()(
fL, 
m);
 
  117      fOk = _decomposer<F, N, PackedArrayAdapter<G> >()(
 
  118         fL, PackedArrayAdapter<G>(
m));
 
  136   template<
class V> 
bool Solve(V& rhs)
 const 
  139      if (
fOk) _solver<F,N,V>()(rhs, 
fL);
 
  152      if (
fOk) _inverter<F,N,M>()(
m, 
fL);
 
  171         PackedArrayAdapter<G> adapted(
m);
 
  172         _inverter<F,N,PackedArrayAdapter<G> >()(adapted, 
fL);
 
  183   template<
class M> 
bool getL(M& 
m)
 const 
  185      if (!
fOk) 
return false;
 
  186      for (
unsigned i = 0; i < 
N; ++i) {
 
  188         for (
unsigned j = i + 1; j < 
N; ++j)
 
  191         for (
unsigned j = 0; j <= i; ++j)
 
  192         m(i, j) = 
fL[i * (i + 1) / 2 + j];
 
  195         m(i, i) = 
F(1) / 
m(i, i);
 
  208   template<
typename G> 
bool getL(
G* 
m)
 const 
  210      if (!
fOk) 
return false;
 
  212      for (
unsigned i = 0; i < (
N * (
N + 1)) / 2; ++i)
 
  216      for (
unsigned i = 0; i < 
N; ++i)
 
  217         m[(i * (i + 1)) / 2 + i] = 
F(1) / 
fL[(i * (i + 1)) / 2 + i];
 
  229      if (!
fOk) 
return false;
 
  230      for (
unsigned i = 0; i < 
N; ++i) {
 
  232         for (
unsigned j = i + 1; j < 
N; ++j)
 
  235         for (
unsigned j = 0; j <= i; ++j)
 
  236         m(j, i) = 
fL[i * (i + 1) / 2 + j];
 
  239      for (
unsigned i = 1; i < 
N; ++i) {
 
  240         for (
unsigned j = 0; j < i; ++j) {
 
  241            typename M::value_type tmp = 
F(0);
 
  242            for (
unsigned k = i; k-- > j;)
 
  243               tmp -= 
m(k, i) * 
m(j, k);
 
  244            m(j, i) = tmp * 
m(i, i);
 
  260      if (!
fOk) 
return false;
 
  262      for (
unsigned i = 0; i < (
N * (
N + 1)) / 2; ++i)
 
  266      for (
unsigned i = 1; i < 
N; base1 += ++i) {
 
  267         for (
unsigned j = 0; j < i; ++j) {
 
  269            const G *base2 = &
m[(i * (i - 1)) / 2];
 
  270            for (
unsigned k = i; k-- > j; base2 -= k)
 
  271            tmp -= base1[k] * base2[j];
 
  272            base1[j] = tmp * base1[i];
 
  335      fOk = _decomposerGenDim<F, M>()(
fL, 
m, 
fN);
 
  354      fOk = _decomposerGenDim<F, PackedArrayAdapter<G> >()(
 
  355         fL, PackedArrayAdapter<G>(
m), 
fN);
 
  376   template<
class V> 
bool Solve(V& rhs)
 const 
  379      if (
fOk) _solverGenDim<F,V>()(rhs, 
fL, 
fN);
 
  392      if (
fOk) _inverterGenDim<F,M>()(
m, 
fL, 
fN);
 
  411         PackedArrayAdapter<G> adapted(
m);
 
  412         _inverterGenDim<F,PackedArrayAdapter<G> >()(adapted, 
fL, 
fN);
 
  423   template<
class M> 
bool getL(M& 
m)
 const 
  425      if (!
fOk) 
return false;
 
  426      for (
unsigned i = 0; i < 
fN; ++i) {
 
  428         for (
unsigned j = i + 1; j < 
fN; ++j)
 
  431         for (
unsigned j = 0; j <= i; ++j)
 
  432            m(i, j) = 
fL[i * (i + 1) / 2 + j];
 
  435         m(i, i) = 
F(1) / 
m(i, i);
 
  448   template<
typename G> 
bool getL(
G* 
m)
 const 
  450       if (!
fOk) 
return false;
 
  452       for (
unsigned i = 0; i < (
fN * (
fN + 1)) / 2; ++i)
 
  456       for (
unsigned i = 0; i < 
fN; ++i)
 
  457          m[(i * (i + 1)) / 2 + i] = 
F(1) / 
fL[(i * (i + 1)) / 2 + i];
 
  469      if (!
fOk) 
return false;
 
  470      for (
unsigned i = 0; i < 
fN; ++i) {
 
  472         for (
unsigned j = i + 1; j < 
fN; ++j)
 
  475         for (
unsigned j = 0; j <= i; ++j)
 
  476            m(j, i) = 
fL[i * (i + 1) / 2 + j];
 
  479      for (
unsigned i = 1; i < 
fN; ++i) {
 
  480         for (
unsigned j = 0; j < i; ++j) {
 
  481            typename M::value_type tmp = 
F(0);
 
  482            for (
unsigned k = i; k-- > j;)
 
  483               tmp -= 
m(k, i) * 
m(j, k);
 
  484            m(j, i) = tmp * 
m(i, i);
 
  500       if (!
fOk) 
return false;
 
  502      for (
unsigned i = 0; i < (
fN * (
fN + 1)) / 2; ++i)
 
  506      for (
unsigned i = 1; i < 
fN; base1 += ++i) {
 
  507         for (
unsigned j = 0; j < i; ++j) {
 
  509            const G *base2 = &
m[(i * (i - 1)) / 2];
 
  510            for (
unsigned k = i; k-- > j; base2 -= k)
 
  511              tmp -= base1[k] * base2[j];
 
  512            base1[j] = tmp * base1[i];
 
  519namespace CholeskyDecompHelpers {
 
  530      { 
return fArr[((i * (i + 1)) / 2) + j]; }
 
  533      { 
return fArr[((i * (i + 1)) / 2) + j]; }
 
  555         for (
unsigned i = 0; i < 
N; base1 += ++i) {
 
  559            for (
unsigned j = 0; j < i; base2 += ++j) {
 
  561               for (
unsigned k = j; k--; )
 
  562                  tmp -= base1[k] * base2[k];
 
  563               base1[j] = tmp *= base2[j];
 
  565               tmpdiag += tmp * tmp;
 
  568            tmpdiag = 
src(i, i) - tmpdiag;
 
  570            if (tmpdiag <= 
F(0.0)) 
return false;
 
  571            else base1[i] = std::sqrt(
F(1.0) / tmpdiag);
 
  593         F * 
l = 
new F[
N * (
N + 1) / 2];
 
  594         std::copy(
src, 
src + ((
N * (
N + 1)) / 2), 
l);
 
  597         for (
unsigned i = 1; i < 
N; base1 += ++i) {
 
  598            for (
unsigned j = 0; j < i; ++j) {
 
  600               const F *base2 = &
l[(i * (i - 1)) / 2];
 
  601               for (
unsigned k = i; k-- > j; base2 -= k)
 
  602                  tmp -= base1[k] * base2[j];
 
  603               base1[j] = tmp * base1[i];
 
  608         for (
unsigned i = 
N; i--; ) {
 
  609            for (
unsigned j = i + 1; j--; ) {
 
  611               base1 = &
l[(
N * (
N - 1)) / 2];
 
  612               for (
unsigned k = 
N; k-- > i; base1 -= k)
 
  613                  tmp += base1[i] * base1[j];
 
  636         for (
unsigned k = 0; k < 
N; ++k) {
 
  637            const unsigned base = (k * (k + 1)) / 2;
 
  639            for (
unsigned i = k; i--; )
 
  640               sum += rhs[i] * 
l[base + i];
 
  642            rhs[k] = (rhs[k] - 
sum) * 
l[base + k];
 
  645         for (
unsigned k = 
N; k--; ) {
 
  647            for (
unsigned i = 
N; --i > k; )
 
  648               sum += rhs[i] * 
l[(i * (i + 1)) / 2 + k];
 
  650            rhs[k] = (rhs[k] - 
sum) * 
l[(k * (k + 1)) / 2 + k];
 
  656   template<
class F, 
unsigned N, 
class V> 
struct _solver 
  669         if (
src(0,0) <= 
F(0.0)) 
return false;
 
  670         dst[0] = std::sqrt(
F(1.0) / 
src(0,0));
 
  671         dst[1] = 
src(1,0) * dst[0];
 
  672         dst[2] = 
src(1,1) - dst[1] * dst[1];
 
  673         if (dst[2] <= 
F(0.0)) 
return false;
 
  674         else dst[2] = std::sqrt(
F(1.0) / dst[2]);
 
  675         dst[3] = 
src(2,0) * dst[0];
 
  676         dst[4] = (
src(2,1) - dst[1] * dst[3]) * dst[2];
 
  677         dst[5] = 
src(2,2) - (dst[3] * dst[3] + dst[4] * dst[4]);
 
  678         if (dst[5] <= 
F(0.0)) 
return false;
 
  679         else dst[5] = std::sqrt(
F(1.0) / dst[5]);
 
  680         dst[6] = 
src(3,0) * dst[0];
 
  681         dst[7] = (
src(3,1) - dst[1] * dst[6]) * dst[2];
 
  682         dst[8] = (
src(3,2) - dst[3] * dst[6] - dst[4] * dst[7]) * dst[5];
 
  683         dst[9] = 
src(3,3) - (dst[6] * dst[6] + dst[7] * dst[7] + dst[8] * dst[8]);
 
  684         if (dst[9] <= 
F(0.0)) 
return false;
 
  685         else dst[9] = std::sqrt(
F(1.0) / dst[9]);
 
  686         dst[10] = 
src(4,0) * dst[0];
 
  687         dst[11] = (
src(4,1) - dst[1] * dst[10]) * dst[2];
 
  688         dst[12] = (
src(4,2) - dst[3] * dst[10] - dst[4] * dst[11]) * dst[5];
 
  689         dst[13] = (
src(4,3) - dst[6] * dst[10] - dst[7] * dst[11] - dst[8] * dst[12]) * dst[9];
 
  690         dst[14] = 
src(4,4) - (dst[10]*dst[10]+dst[11]*dst[11]+dst[12]*dst[12]+dst[13]*dst[13]);
 
  691         if (dst[14] <= 
F(0.0)) 
return false;
 
  692         else dst[14] = std::sqrt(
F(1.0) / dst[14]);
 
  693         dst[15] = 
src(5,0) * dst[0];
 
  694         dst[16] = (
src(5,1) - dst[1] * dst[15]) * dst[2];
 
  695         dst[17] = (
src(5,2) - dst[3] * dst[15] - dst[4] * dst[16]) * dst[5];
 
  696         dst[18] = (
src(5,3) - dst[6] * dst[15] - dst[7] * dst[16] - dst[8] * dst[17]) * dst[9];
 
  697         dst[19] = (
src(5,4) - dst[10] * dst[15] - dst[11] * dst[16] - dst[12] * dst[17] - dst[13] * dst[18]) * dst[14];
 
  698         dst[20] = 
src(5,5) - (dst[15]*dst[15]+dst[16]*dst[16]+dst[17]*dst[17]+dst[18]*dst[18]+dst[19]*dst[19]);
 
  699         if (dst[20] <= 
F(0.0)) 
return false;
 
  700         else dst[20] = std::sqrt(
F(1.0) / dst[20]);
 
  710         if (
src(0,0) <= 
F(0.0)) 
return false;
 
  711         dst[0] = std::sqrt(
F(1.0) / 
src(0,0));
 
  712         dst[1] = 
src(1,0) * dst[0];
 
  713         dst[2] = 
src(1,1) - dst[1] * dst[1];
 
  714         if (dst[2] <= 
F(0.0)) 
return false;
 
  715         else dst[2] = std::sqrt(
F(1.0) / dst[2]);
 
  716         dst[3] = 
src(2,0) * dst[0];
 
  717         dst[4] = (
src(2,1) - dst[1] * dst[3]) * dst[2];
 
  718         dst[5] = 
src(2,2) - (dst[3] * dst[3] + dst[4] * dst[4]);
 
  719         if (dst[5] <= 
F(0.0)) 
return false;
 
  720         else dst[5] = std::sqrt(
F(1.0) / dst[5]);
 
  721         dst[6] = 
src(3,0) * dst[0];
 
  722         dst[7] = (
src(3,1) - dst[1] * dst[6]) * dst[2];
 
  723         dst[8] = (
src(3,2) - dst[3] * dst[6] - dst[4] * dst[7]) * dst[5];
 
  724         dst[9] = 
src(3,3) - (dst[6] * dst[6] + dst[7] * dst[7] + dst[8] * dst[8]);
 
  725         if (dst[9] <= 
F(0.0)) 
return false;
 
  726         else dst[9] = std::sqrt(
F(1.0) / dst[9]);
 
  727         dst[10] = 
src(4,0) * dst[0];
 
  728         dst[11] = (
src(4,1) - dst[1] * dst[10]) * dst[2];
 
  729         dst[12] = (
src(4,2) - dst[3] * dst[10] - dst[4] * dst[11]) * dst[5];
 
  730         dst[13] = (
src(4,3) - dst[6] * dst[10] - dst[7] * dst[11] - dst[8] * dst[12]) * dst[9];
 
  731         dst[14] = 
src(4,4) - (dst[10]*dst[10]+dst[11]*dst[11]+dst[12]*dst[12]+dst[13]*dst[13]);
 
  732         if (dst[14] <= 
F(0.0)) 
return false;
 
  733         else dst[14] = std::sqrt(
F(1.0) / dst[14]);
 
  743         if (
src(0,0) <= 
F(0.0)) 
return false;
 
  744         dst[0] = std::sqrt(
F(1.0) / 
src(0,0));
 
  745         dst[1] = 
src(1,0) * dst[0];
 
  746         dst[2] = 
src(1,1) - dst[1] * dst[1];
 
  747         if (dst[2] <= 
F(0.0)) 
return false;
 
  748         else dst[2] = std::sqrt(
F(1.0) / dst[2]);
 
  749         dst[3] = 
src(2,0) * dst[0];
 
  750         dst[4] = (
src(2,1) - dst[1] * dst[3]) * dst[2];
 
  751         dst[5] = 
src(2,2) - (dst[3] * dst[3] + dst[4] * dst[4]);
 
  752         if (dst[5] <= 
F(0.0)) 
return false;
 
  753         else dst[5] = std::sqrt(
F(1.0) / dst[5]);
 
  754         dst[6] = 
src(3,0) * dst[0];
 
  755         dst[7] = (
src(3,1) - dst[1] * dst[6]) * dst[2];
 
  756         dst[8] = (
src(3,2) - dst[3] * dst[6] - dst[4] * dst[7]) * dst[5];
 
  757         dst[9] = 
src(3,3) - (dst[6] * dst[6] + dst[7] * dst[7] + dst[8] * dst[8]);
 
  758         if (dst[9] <= 
F(0.0)) 
return false;
 
  759         else dst[9] = std::sqrt(
F(1.0) / dst[9]);
 
  769         if (
src(0,0) <= 
F(0.0)) 
return false;
 
  770         dst[0] = std::sqrt(
F(1.0) / 
src(0,0));
 
  771         dst[1] = 
src(1,0) * dst[0];
 
  772         dst[2] = 
src(1,1) - dst[1] * dst[1];
 
  773         if (dst[2] <= 
F(0.0)) 
return false;
 
  774         else dst[2] = std::sqrt(
F(1.0) / dst[2]);
 
  775         dst[3] = 
src(2,0) * dst[0];
 
  776         dst[4] = (
src(2,1) - dst[1] * dst[3]) * dst[2];
 
  777         dst[5] = 
src(2,2) - (dst[3] * dst[3] + dst[4] * dst[4]);
 
  778         if (dst[5] <= 
F(0.0)) 
return false;
 
  779         else dst[5] = std::sqrt(
F(1.0) / dst[5]);
 
  789         if (
src(0,0) <= 
F(0.0)) 
return false;
 
  790         dst[0] = std::sqrt(
F(1.0) / 
src(0,0));
 
  791         dst[1] = 
src(1,0) * dst[0];
 
  792         dst[2] = 
src(1,1) - dst[1] * dst[1];
 
  793         if (dst[2] <= 
F(0.0)) 
return false;
 
  794         else dst[2] = std::sqrt(
F(1.0) / dst[2]);
 
  804         if (
src(0,0) <= 
F(0.0)) 
return false;
 
  805         dst[0] = std::sqrt(
F(1.0) / 
src(0,0));
 
  852         dst(0,0) = li61*li61 + li51*li51 + li41*li41 + li31*li31 + li21*li21 + 
src[0]*
src[0];
 
  853         dst(1,0) = li61*li62 + li51*li52 + li41*li42 + li31*li32 + li21*
src[2];
 
  854         dst(1,1) = li62*li62 + li52*li52 + li42*li42 + li32*li32 + 
src[2]*
src[2];
 
  855         dst(2,0) = li61*li63 + li51*li53 + li41*li43 + li31*
src[5];
 
  856         dst(2,1) = li62*li63 + li52*li53 + li42*li43 + li32*
src[5];
 
  857         dst(2,2) = li63*li63 + li53*li53 + li43*li43 + 
src[5]*
src[5];
 
  858         dst(3,0) = li61*li64 + li51*li54 + li41*
src[9];
 
  859         dst(3,1) = li62*li64 + li52*li54 + li42*
src[9];
 
  860         dst(3,2) = li63*li64 + li53*li54 + li43*
src[9];
 
  861         dst(3,3) = li64*li64 + li54*li54 + 
src[9]*
src[9];
 
  862         dst(4,0) = li61*li65 + li51*
src[14];
 
  863         dst(4,1) = li62*li65 + li52*
src[14];
 
  864         dst(4,2) = li63*li65 + li53*
src[14];
 
  865         dst(4,3) = li64*li65 + li54*
src[14];
 
  866         dst(4,4) = li65*li65 + 
src[14]*
src[14];
 
  867         dst(5,0) = li61*
src[20];
 
  868         dst(5,1) = li62*
src[20];
 
  869         dst(5,2) = li63*
src[20];
 
  870         dst(5,3) = li64*
src[20];
 
  871         dst(5,4) = li65*
src[20];
 
  872         dst(5,5) = 
src[20]*
src[20];
 
  896         dst(0,0) = li51*li51 + li41*li41 + li31*li31 + li21*li21 + 
src[0]*
src[0];
 
  897         dst(1,0) = li51*li52 + li41*li42 + li31*li32 + li21*
src[2];
 
  898         dst(1,1) = li52*li52 + li42*li42 + li32*li32 + 
src[2]*
src[2];
 
  899         dst(2,0) = li51*li53 + li41*li43 + li31*
src[5];
 
  900         dst(2,1) = li52*li53 + li42*li43 + li32*
src[5];
 
  901         dst(2,2) = li53*li53 + li43*li43 + 
src[5]*
src[5];
 
  902         dst(3,0) = li51*li54 + li41*
src[9];
 
  903         dst(3,1) = li52*li54 + li42*
src[9];
 
  904         dst(3,2) = li53*li54 + li43*
src[9];
 
  905         dst(3,3) = li54*li54 + 
src[9]*
src[9];
 
  906         dst(4,0) = li51*
src[14];
 
  907         dst(4,1) = li52*
src[14];
 
  908         dst(4,2) = li53*
src[14];
 
  909         dst(4,3) = li54*
src[14];
 
  910         dst(4,4) = 
src[14]*
src[14];
 
  927         dst(0,0) = li41*li41 + li31*li31 + li21*li21 + 
src[0]*
src[0];
 
  928         dst(1,0) = li41*li42 + li31*li32 + li21*
src[2];
 
  929         dst(1,1) = li42*li42 + li32*li32 + 
src[2]*
src[2];
 
  930         dst(2,0) = li41*li43 + li31*
src[5];
 
  931         dst(2,1) = li42*li43 + li32*
src[5];
 
  932         dst(2,2) = li43*li43 + 
src[5]*
src[5];
 
  933         dst(3,0) = li41*
src[9];
 
  934         dst(3,1) = li42*
src[9];
 
  935         dst(3,2) = li43*
src[9];
 
  949         dst(0,0) = li31*li31 + li21*li21 + 
src[0]*
src[0];
 
  950         dst(1,0) = li31*li32 + li21*
src[2];
 
  951         dst(1,1) = li32*li32 + 
src[2]*
src[2];
 
  952         dst(2,0) = li31*
src[5];
 
  953         dst(2,1) = li32*
src[5];
 
  965         dst(0,0) = li21*li21 + 
src[0]*
src[0];
 
  966         dst(1,0) = li21*
src[2];
 
  994         const F y0 = rhs[0] * 
l[0];
 
  995         const F y1 = (rhs[1]-
l[1]*y0)*
l[2];
 
  996         const F y2 = (rhs[2]-(
l[3]*y0+
l[4]*
y1))*
l[5];
 
  997         const F y3 = (rhs[3]-(
l[6]*y0+
l[7]*
y1+
l[8]*
y2))*
l[9];
 
  998         const F y4 = (rhs[4]-(
l[10]*y0+
l[11]*
y1+
l[12]*
y2+
l[13]*y3))*
l[14];
 
  999         const F y5 = (rhs[5]-(
l[15]*y0+
l[16]*
y1+
l[17]*
y2+
l[18]*y3+
l[19]*y4))*
l[20];
 
 1001         rhs[5] = y5 * 
l[20];
 
 1002         rhs[4] = (y4-
l[19]*rhs[5])*
l[14];
 
 1003         rhs[3] = (y3-(
l[18]*rhs[5]+
l[13]*rhs[4]))*
l[9];
 
 1004         rhs[2] = (
y2-(
l[17]*rhs[5]+
l[12]*rhs[4]+
l[8]*rhs[3]))*
l[5];
 
 1005         rhs[1] = (
y1-(
l[16]*rhs[5]+
l[11]*rhs[4]+
l[7]*rhs[3]+
l[4]*rhs[2]))*
l[2];
 
 1006         rhs[0] = (y0-(
l[15]*rhs[5]+
l[10]*rhs[4]+
l[6]*rhs[3]+
l[3]*rhs[2]+
l[1]*rhs[1]))*
l[0];
 
 1016         const F y0 = rhs[0] * 
l[0];
 
 1017         const F y1 = (rhs[1]-
l[1]*y0)*
l[2];
 
 1018         const F y2 = (rhs[2]-(
l[3]*y0+
l[4]*
y1))*
l[5];
 
 1019         const F y3 = (rhs[3]-(
l[6]*y0+
l[7]*
y1+
l[8]*
y2))*
l[9];
 
 1020         const F y4 = (rhs[4]-(
l[10]*y0+
l[11]*
y1+
l[12]*
y2+
l[13]*y3))*
l[14];
 
 1022         rhs[4] = (y4)*
l[14];
 
 1023         rhs[3] = (y3-(
l[13]*rhs[4]))*
l[9];
 
 1024         rhs[2] = (
y2-(
l[12]*rhs[4]+
l[8]*rhs[3]))*
l[5];
 
 1025         rhs[1] = (
y1-(
l[11]*rhs[4]+
l[7]*rhs[3]+
l[4]*rhs[2]))*
l[2];
 
 1026         rhs[0] = (y0-(
l[10]*rhs[4]+
l[6]*rhs[3]+
l[3]*rhs[2]+
l[1]*rhs[1]))*
l[0];
 
 1036         const F y0 = rhs[0] * 
l[0];
 
 1037         const F y1 = (rhs[1]-
l[1]*y0)*
l[2];
 
 1038         const F y2 = (rhs[2]-(
l[3]*y0+
l[4]*
y1))*
l[5];
 
 1039         const F y3 = (rhs[3]-(
l[6]*y0+
l[7]*
y1+
l[8]*
y2))*
l[9];
 
 1042         rhs[2] = (
y2-(
l[8]*rhs[3]))*
l[5];
 
 1043         rhs[1] = (
y1-(
l[7]*rhs[3]+
l[4]*rhs[2]))*
l[2];
 
 1044         rhs[0] = (y0-(
l[6]*rhs[3]+
l[3]*rhs[2]+
l[1]*rhs[1]))*
l[0];
 
 1054         const F y0 = rhs[0] * 
l[0];
 
 1055         const F y1 = (rhs[1]-
l[1]*y0)*
l[2];
 
 1056         const F y2 = (rhs[2]-(
l[3]*y0+
l[4]*
y1))*
l[5];
 
 1059         rhs[1] = (
y1-(
l[4]*rhs[2]))*
l[2];
 
 1060         rhs[0] = (y0-(
l[3]*rhs[2]+
l[1]*rhs[1]))*
l[0];
 
 1070         const F y0 = rhs[0] * 
l[0];
 
 1071         const F y1 = (rhs[1]-
l[1]*y0)*
l[2];
 
 1074         rhs[0] = (y0-(
l[1]*rhs[1]))*
l[0];
 
 1084         rhs[0] *= 
l[0] * 
l[0];
 
Option_t Option_t TPoint TPoint const char y2
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t src
 
Option_t Option_t TPoint TPoint const char y1
 
class to compute the Cholesky decomposition of a matrix
 
bool fOk
flag indicating a successful decomposition
 
bool getL(G *m) const
obtain the decomposed matrix L
 
bool getL(M &m) const
obtain the decomposed matrix L
 
~CholeskyDecompGenDim()
destructor
 
CholeskyDecompGenDim(unsigned N, G *m)
perform a Cholesky decomposition
 
bool Invert(G *m) const
place the inverse into m
 
bool Invert(M &m) const
place the inverse into m
 
bool Solve(V &rhs) const
solves a linear system for the given right hand side
 
bool getLi(M &m) const
obtain the inverse of the decomposed matrix L
 
F * fL
lower triangular matrix L
 
unsigned fN
dimensionality dimensionality of the problem
 
CholeskyDecompGenDim(unsigned N, const M &m)
perform a Cholesky decomposition
 
bool getLi(G *m) const
obtain the inverse of the decomposed matrix L
 
bool ok() const
returns true if decomposition was successful
 
adapter for packed arrays (to SMatrix indexing conventions)
 
G * fArr
pointer to first array element
 
G & operator()(unsigned i, unsigned j)
write access to elements (make sure that j <= i)
 
const G operator()(unsigned i, unsigned j) const
read access to elements (make sure that j <= i)
 
PackedArrayAdapter(G *arr)
constructor
 
class to compute the Cholesky decomposition of a matrix
 
bool fOk
flag indicating a successful decomposition
 
bool ok() const
returns true if decomposition was successful
 
bool getL(G *m) const
obtain the decomposed matrix L
 
bool Invert(G *m) const
place the inverse into m
 
CholeskyDecomp(const M &m)
perform a Cholesky decomposition
 
bool getLi(G *m) const
obtain the inverse of the decomposed matrix L
 
bool getL(M &m) const
obtain the decomposed matrix L
 
bool Solve(V &rhs) const
solves a linear system for the given right hand side
 
F fL[N *(N+1)/2]
lower triangular matrix L
 
CholeskyDecomp(G *m)
perform a Cholesky decomposition
 
bool getLi(M &m) const
obtain the inverse of the decomposed matrix L
 
bool Invert(M &m) const
place the inverse into m
 
Namespace for new Math classes and functions.
 
This file contains a specialised ROOT message handler to test for diagnostic in unit tests.
 
struct to do a Cholesky decomposition (general dimensionality)
 
bool operator()(F *dst, const M &src, unsigned N) const
method to do the decomposition
 
bool operator()(F *dst, const M &src) const
 
bool operator()(F *dst, const M &src) const
method to do the decomposition
 
bool operator()(F *dst, const M &src) const
method to do the decomposition
 
bool operator()(F *dst, const M &src) const
method to do the decomposition
 
bool operator()(F *dst, const M &src) const
method to do the decomposition
 
bool operator()(F *dst, const M &src) const
method to do the decomposition
 
bool operator()(F *dst, const M &src) const
method to do the decomposition
 
struct to do a Cholesky decomposition
 
bool operator()(F *dst, const M &src) const
method to do the decomposition
 
struct to obtain the inverse from a Cholesky decomposition (general dimensionality)
 
void operator()(M &dst, const F *src, unsigned N) const
method to do the inversion
 
void operator()(M &dst, const F *src) const
 
void operator()(M &dst, const F *src) const
method to do the inversion
 
void operator()(M &dst, const F *src) const
method to do the inversion
 
void operator()(M &dst, const F *src) const
method to do the inversion
 
void operator()(M &dst, const F *src) const
method to do the inversion
 
void operator()(M &dst, const F *src) const
method to do the inversion
 
void operator()(M &dst, const F *src) const
method to do the inversion
 
struct to obtain the inverse from a Cholesky decomposition
 
void operator()(M &dst, const F *src) const
method to do the inversion
 
struct to solve a linear system using its Cholesky decomposition (generalised dimensionality)
 
void operator()(V &rhs, const F *l, unsigned N) const
method to solve the linear system
 
void operator()(V &rhs, const F *l) const
 
void operator()(V &rhs, const F *l) const
method to solve the linear system
 
void operator()(V &rhs, const F *l) const
method to solve the linear system
 
void operator()(V &rhs, const F *l) const
method to solve the linear system
 
void operator()(V &rhs, const F *l) const
method to solve the linear system
 
void operator()(V &rhs, const F *l) const
method to solve the linear system
 
void operator()(V &rhs, const F *l) const
method to solve the linear system
 
struct to solve a linear system using its Cholesky decomposition
 
void operator()(V &rhs, const F *l) const
method to solve the linear system
 
static uint64_t sum(uint64_t i)