29 #ifndef TOON_INCLUDE_LAPACK_CHOLESKY_H 30 #define TOON_INCLUDE_LAPACK_CHOLESKY_H 32 #include <TooN/TooN.h> 34 #include <TooN/lapack.h> 69 template <
int Size,
typename Precision=DefaultPrecision>
75 template<
class P2,
class B2>
77 : my_cholesky(m), my_cholesky_lapack(m) {
83 Lapack_Cholesky(
int size) : my_cholesky(size,size), my_cholesky_lapack(size,size) {}
95 FortranInteger N = my_cholesky.num_rows();
97 potrf_(
"L", &N, my_cholesky_lapack.my_data, &N, &info);
98 for (
int i=0;i<N;i++) {
101 my_cholesky[i][j]=my_cholesky_lapack[j][i];
117 int rank()
const {
return my_rank; }
119 template <
int Size2,
typename P2,
typename B2>
124 FortranInteger N=my_cholesky.num_rows();
125 FortranInteger NRHS=1;
127 potrs_(
"L", &N, &NRHS, my_cholesky_lapack.my_data, &N, result.my_data, &N, &info);
132 template <
int Size2,
int Cols2,
typename P2,
typename B2>
137 FortranInteger N=my_cholesky.num_rows();
138 FortranInteger NRHS=m.num_cols();
140 potrs_(
"L", &N, &NRHS, my_cholesky_lapack.my_data, &N, result.my_data, &N, &info);
145 template <
int Size2,
typename P2,
typename B2>
147 return v * backsub(v);
154 Precision determinant()
const {
155 Precision det = my_cholesky[0][0];
156 for (
int i=1; i<my_cholesky.num_rows(); i++)
157 det *= my_cholesky[i][i];
163 M=my_cholesky_lapack;
164 FortranInteger N = my_cholesky.num_rows();
166 potri_(
"L", &N, M.my_data, &N, &info);
168 for (
int i=1;i<N;i++) {
169 for (
int j=0;j<i;j++) {
179 FortranInteger my_rank;
Pretty generic SFINAE introspection generator.
Definition: vec_test.cc:21
A matrix.
Definition: matrix.hh:105
Decomposes a positive-semidefinite symmetric matrix A (such as a covariance) into L*L^T...
Definition: Lapack_Cholesky.h:70
Lapack_Cholesky(int size)
Constructor for Size=Dynamic.
Definition: Lapack_Cholesky.h:83
Definition: size_mismatch.hh:103