35 template<
typename Vector,
typename RealScalar>
39 typedef typename Vector::Scalar
Scalar;
58 template <
typename MatrixType,
typename Rhs,
typename Dest,
typename Preconditioner>
64 typedef typename Dest::Scalar
Scalar;
68 S = S <
x.rows() ? S :
x.rows();
80 P = (
qr.householderQ() * DenseMatrixType::Identity(
N, S));
130 DenseMatrixType
G = DenseMatrixType::Zero(
N, S);
131 DenseMatrixType
U = DenseMatrixType::Zero(
N, S);
132 DenseMatrixType
M = DenseMatrixType::Identity(S, S);
144 for (
Index k = 0; k < S; ++k)
148 lu_solver.compute(
M.block(k , k , S -k, S - k ));
151 v = r -
G.rightCols(S - k ) *
c;
156 U.col(k) =
U.rightCols(S - k ) *
c +
om *
v;
157 G.col(k) =
A *
U.col(k );
164 G.col(k ) =
G.col(k ) -
alpha *
G.col(
i );
165 U.col(k ) =
U.col(k ) -
alpha *
U.col(
i );
170 M.block(k , k , S - k , 1) = (
G.col(k ).adjoint() *
P.rightCols(S - k )).
adjoint();
178 Scalar beta = f(k ) /
M(k , k );
179 r = r - beta *
G.col(k );
180 x =
x + beta *
U.col(k );
207 f.segment(k + 1, S - (k + 1) ) = f.segment(k + 1 , S - (k + 1)) - beta *
M.block(k + 1 , k , S - (k + 1), 1);
274 template <
typename _MatrixType,
typename _Preconditioner = DiagonalPreconditioner<
typename _MatrixType::Scalar> >
280 template <
typename _MatrixType,
typename _Preconditioner>
330 template <
typename _MatrixType,
typename _Preconditioner>
336 typedef typename MatrixType::Scalar
Scalar;
354 IDRS(): m_S(4), m_smoothing(false), m_angle(
RealScalar(0.7)), m_residual(false) {}
366 template <
typename MatrixDerived>
368 m_angle(
RealScalar(0.7)), m_residual(false) {}
376 template <
typename Rhs,
typename Dest>
406 m_smoothing=smoothing;
Array< int, Dynamic, 1 > v
Definition Array_initializer_list_vector_cxx11.cpp:1
int i
Definition BiCGSTAB_step_by_step.cpp:9
Projective3d P(Matrix4d::Random())
JacobiRotation< float > G
Definition Jacobi_makeGivens.cpp:2
void adjoint(const MatrixType &m)
Definition adjoint.cpp:67
Scalar Scalar * c
Definition benchVecAdd.cpp:17
Scalar * b
Definition benchVecAdd.cpp:17
SCALAR Scalar
Definition bench_gemm.cpp:46
Matrix< RealScalar, Dynamic, Dynamic > M
Definition bench_gemm.cpp:51
NumTraits< Scalar >::Real RealScalar
Definition bench_gemm.cpp:47
MatrixXf MatrixType
Definition benchmark-blocking-sizes.cpp:52
The Induced Dimension Reduction method (IDR(s)) is a short-recurrences Krylov method for sparse squar...
Definition IDRS.h:332
_Preconditioner Preconditioner
Definition IDRS.h:338
void setSmoothing(bool smoothing)
Definition IDRS.h:404
IDRS(const EigenBase< MatrixDerived > &A)
Definition IDRS.h:367
void setS(Index S)
Definition IDRS.h:388
void setResidualUpdate(bool update)
Definition IDRS.h:427
MatrixType::Scalar Scalar
Definition IDRS.h:336
IDRS()
Definition IDRS.h:354
_MatrixType MatrixType
Definition IDRS.h:335
void _solve_vector_with_guess_impl(const Rhs &b, Dest &x) const
Definition IDRS.h:377
MatrixType::RealScalar RealScalar
Definition IDRS.h:337
void setAngle(RealScalar angle)
Definition IDRS.h:419
Base class for linear iterative solvers.
Definition IterativeSolverBase.h:144
Index maxIterations() const
Definition IterativeSolverBase.h:281
ComputationInfo m_info
Definition IterativeSolverBase.h:438
RealScalar m_error
Definition IterativeSolverBase.h:436
Preconditioner m_preconditioner
Definition IterativeSolverBase.h:431
Index m_iterations
Definition IterativeSolverBase.h:437
bool m_isInitialized
Definition SparseSolverBase.h:119
IDRS< _MatrixType, _Preconditioner > & derived()
Definition SparseSolverBase.h:79
RealScalar m_tolerance
Definition IterativeSolverBase.h:434
const ActualMatrixType & matrix() const
Definition IterativeSolverBase.h:419
The matrix class, also used for vectors and row-vectors.
Definition Matrix.h:180
@ N
Definition constructor.cpp:23
#define abs(x)
Definition datatypes.h:17
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
Definition gnuplot_common_settings.hh:12
@ NumericalIssue
Definition Constants.h:444
@ Success
Definition Constants.h:442
@ NoConvergence
Definition Constants.h:446
RealScalar s
Definition level1_cplx_impl.h:126
RealScalar alpha
Definition level1_cplx_impl.h:147
DenseIndex ret
Definition level1_cplx_impl.h:44
bool idrs(const MatrixType &A, const Rhs &b, Dest &x, const Preconditioner &precond, Index &iter, typename Dest::RealScalar &relres, Index S, bool smoothing, typename Dest::RealScalar angle, bool replacement)
Definition IDRS.h:59
EIGEN_DEVICE_FUNC bool isApprox(const Scalar &x, const Scalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
Definition MathFunctions.h:1947
@ Rhs
Definition TensorContractionMapper.h:18
Vector::Scalar omega(const Vector &t, const Vector &s, RealScalar angle)
Definition IDRS.h:36
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE internal::enable_if< NumTraits< T >::IsSigned||NumTraits< T >::IsComplex, typenameNumTraits< T >::Real >::type abs(const T &x)
Definition MathFunctions.h:1509
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:74
Definition boostmultiprec.cpp:110
Definition BandTriangularSolver.h:13
void qr()
Definition qr_colpivoting.cpp:99
float angle
Definition ref_serial.h:328
Definition EigenBase.h:30
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition NumTraits.h:233
_MatrixType MatrixType
Definition IDRS.h:283
_Preconditioner Preconditioner
Definition IDRS.h:284
Definition ForwardDeclarations.h:17