284 typedef typename TranspositionType::StorageIndex IndexType;
287 bool found_zero_pivot =
false;
291 transpositions.setIdentity();
305 Index index_of_biggest_in_corner;
306 mat.
diagonal().tail(
size -
k).cwiseAbs().maxCoeff(&index_of_biggest_in_corner);
307 index_of_biggest_in_corner +=
k;
309 transpositions.coeffRef(
k) = IndexType(index_of_biggest_in_corner);
310 if (
k != index_of_biggest_in_corner) {
313 Index s =
size - index_of_biggest_in_corner - 1;
314 mat.row(
k).head(
k).
swap(
mat.row(index_of_biggest_in_corner).head(
k));
315 mat.col(
k).tail(
s).
swap(
mat.col(index_of_biggest_in_corner).tail(
s));
317 for (
Index i =
k + 1;
i < index_of_biggest_in_corner; ++
i) {
331 Block<MatrixType, Dynamic, 1> A21(
mat,
k + 1,
k, rs, 1);
332 Block<MatrixType, 1, Dynamic> A10(
mat,
k, 0, 1,
k);
333 Block<MatrixType, Dynamic, Dynamic> A20(
mat,
k + 1, 0, rs,
k);
336 temp.head(
k) =
mat.
diagonal().real().head(
k).asDiagonal() * A10.adjoint();
338 if (rs > 0) A21.noalias() -= A20 * temp.head(
k);
348 if (
k == 0 && !pivot_is_valid) {
353 transpositions.coeffRef(
j) = IndexType(
j);
359 if ((rs > 0) && pivot_is_valid)
364 if (found_zero_pivot && pivot_is_valid)
366 else if (!pivot_is_valid)
367 found_zero_pivot =
true;
376 else if (realAkk <
static_cast<RealScalar>(0))
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
AnnoyingScalar conj(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:133
int i
Definition: BiCGSTAB_step_by_step.cpp:9
#define eigen_assert(x)
Definition: Macros.h:910
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
SCALAR Scalar
Definition: bench_gemm.cpp:45
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:46
Scalar coeff(Index row, Index col) const
Definition: SparseMatrix.h:211
const ConstDiagonalReturnType diagonal() const
Definition: SparseMatrix.h:757
void swap(SparseMatrix &other)
Definition: SparseMatrix.h:829
Index cols() const
Definition: SparseMatrix.h:161
Scalar & coeffRef(Index row, Index col)
Definition: SparseMatrix.h:275
Index rows() const
Definition: SparseMatrix.h:159
float real
Definition: datatypes.h:10
RealScalar s
Definition: level1_cplx_impl.h:130
Eigen::DenseIndex ret
Definition: level1_cplx_impl.h:43
EIGEN_BLAS_FUNC() swap(int *n, RealScalar *px, int *incx, RealScalar *py, int *incy)
Definition: level1_impl.h:117
char char char int int * k
Definition: level2_impl.h:374
Eigen::Matrix< Scalar, Dynamic, Dynamic, ColMajor > tmp
Definition: level3_impl.h:365
@ PositiveSemiDef
Definition: LDLT.h:34
@ ZeroSign
Definition: LDLT.h:34
@ NegativeSemiDef
Definition: LDLT.h:34
@ Indefinite
Definition: LDLT.h:34
EIGEN_DEVICE_FUNC bool all()
Definition: Macros.h:1276
squared absolute value
Definition: GlobalFunctions.h:87
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
T sign(T x)
Definition: cxx11_tensor_builtins_sycl.cpp:172
@ IsComplex
Definition: NumTraits.h:176
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2