30 # include <itpp/config.h> 32 # include <itpp/config_msvc.h> 35 #if defined(HAVE_LAPACK) 36 # include <itpp/base/algebra/lapack.h> 46 #if defined(HAVE_LAPACK) 48 bool lu(
const mat &X, mat &L, mat &U, ivec &p)
53 int m = X.rows(), info;
56 L.set_size(m, m,
false);
57 U.set_size(m, m,
false);
60 dgetrf_(&m, &m, A._data(), &m, p._data(), &info);
62 for (
int i = 0; i < m; i++) {
63 for (
int j = i; j < m; j++) {
69 L(i, j) = U(j, i) = 0;
82 bool lu(
const cmat &X, cmat &L, cmat &U, ivec &p)
87 int m = X.rows(), info;
90 L.set_size(m, m,
false);
91 U.set_size(m, m,
false);
94 zgetrf_(&m, &m, A._data(), &m, p._data(), &info);
96 for (
int i = 0; i < m; i++) {
97 for (
int j = i; j < m; j++) {
103 L(i, j) = U(j, i) = 0;
117 bool lu(
const mat &X, mat &L, mat &U, ivec &p)
119 it_error(
"LAPACK library is needed to use lu() function");
123 bool lu(
const cmat &X, cmat &L, cmat &U, ivec &p)
125 it_error(
"LAPACK library is needed to use lu() function");
129 #endif // HAVE_LAPACK 134 it_assert(b.size() == p.size(),
"interchange_permutations(): dimension mismatch");
137 for (
int k = 0; k < b.size(); k++) {
146 it_assert(p.size() > 0,
"permutation_matrix(): vector must have nonzero size");
153 for (k = n - 1; k >= 0; k--) {
155 row_k = identity.get_row(k);
156 row_pk = identity.get_row(p(k));
157 identity.set_row(k, row_pk);
158 identity.set_row(p(k), row_k);
168 identity.set_row(k, row_k);
169 identity.set_row(p(k), row_pk);
bmat permutation_matrix(const ivec &p)
Make permutation matrix P from the interchange permutation vector p.
void interchange_permutations(vec &b, const ivec &p)
Makes swapping of vector b according to the interchange permutation vector p.
#define it_assert(t, s)
Abort if t is not true.
#define it_assert_debug(t, s)
Abort if t is not true and NDEBUG is not defined.
Definitions of special vectors and matrices.
Definitions of LU factorisation functions.
#define it_error(s)
Abort unconditionally.
ITPP_EXPORT bmat eye_b(int size)
A Binary (size,size) unit matrix.
bool lu(const mat &X, mat &L, mat &U, ivec &p)
LU factorisation of real matrix.
Mat< bin > bmat
bin matrix