1 #ifndef REDUKT_CHOLESKY_H
2 #define REDUKT_CHOLESKY_H
6 #include <boost/numeric/ublas/matrix.hpp>
7 #include <boost/numeric/ublas/vector.hpp>
9 namespace ublas = boost::numeric::ublas;
44 template<
class ValueType>
47 typedef ublas::matrix<ValueType> Matrix;
48 typedef ublas::vector<ValueType> Vector;
61 Matrix
getL()
const {
return L_; }
85 for (
int k = 0; k < n; k++)
87 for (
int i = 0; i < k; i++)
94 for (
int k = n-1; k >= 0; k--)
96 for (
int i = k+1; i < n; i++)
126 for (
int j=0; j< nx; j++)
128 for (
int k = 0; k < n; k++)
130 for (
int i = 0; i < k; i++)
131 X(k,j) -= X(i,j)*L_(k,i);
137 for (
int j=0; j<nx; j++)
139 for (
int k = n-1; k >= 0; k--)
141 for (
int i = k+1; i < n; i++)
142 X(k,j) -= X(i,j)*L_(i,k);
168 template <
class ValueType>
186 for (
int j = 0; j < n; j++)
189 for (
int k = 0; k < j; k++)
192 for (
int i = 0; i < k; i++)
194 s += L_(k,i)*L_(j,i);
196 L_(j,k) = s = (A(j,k) - s)/L_(k,k);
198 isspd = isspd && (A(k,j) == A(j,k));
201 isspd = isspd && (d > 0.0);
202 L_(j,j) = sqrt(d > 0.0 ? d : 0.0);
203 for (
int k = j+1; k < n; k++)
Definition: Cholesky.h:45
Vector solve(const Vector &b)
Definition: Cholesky.h:74
Matrix solve(const Matrix &B)
Definition: Cholesky.h:115
Cholesky(const Matrix &A)
Definition: Cholesky.h:169
int is_spd() const
Definition: Cholesky.h:154
Matrix getL() const
Definition: Cholesky.h:61