21 #ifndef __ANTARES_SOLVER_MISC_MATRIX_DP_MAKE_HXX__
22 #define __ANTARES_SOLVER_MISC_MATRIX_DP_MAKE_HXX__
24 namespace Antares::Solver
26 template<
class T,
class U1,
class U2,
class U3,
class U4>
27 T MatrixDPMake(U1& L, U2& A, U3& B, U4& C, uint size, T* temp,
bool CIsIdentity)
42 if (not Cholesky<T>(L, A, size, temp))
44 for (uint j = 0; j != size; ++j)
46 for (uint k = 0; k <= j; ++k)
56 for (uint j = 0; j != size; ++j)
64 for (uint i = 0; i != dichotomie; ++i)
66 r = (top + bot) / T(2);
69 for (uint j = 0; j != size; ++j)
71 for (uint k = 0; k < j; ++k)
73 B[j][k] = A[j][k] * r + C[j][k] * (T(1) - r);
79 for (uint j = 0; j != size; ++j)
81 for (uint k = 0; k < j; ++k)
83 B[j][k] = A[j][k] * r;
88 if (Cholesky<T>(L, B, size, temp))
106 for (uint j = 0; j != size; ++j)
108 for (uint k = 0; k < j; ++k)
110 B[j][k] = A[j][k] * rho + C[j][k] * (T(1) - rho);
116 for (uint j = 0; j != size; ++j)
118 for (uint k = 0; k < j; ++k)
120 B[j][k] = A[j][k] * rho;
124 Cholesky<T>(L, B, size, temp);
130 if (++compteur > maxLoopCount)