10 #ifndef EIGEN_ITERSCALING_H
11 #define EIGEN_ITERSCALING_H
50 template <
typename MatrixType_>
84 VectorXd Dr, Dc, DrRes, DcRes;
89 double EpsRow = 1.0, EpsCol = 1.0;
96 for (
typename MatrixType::InnerIterator it(
m_matrix,
k); it; ++it) {
97 if (Dr(it.row()) <
abs(it.value())) Dr(it.row()) =
abs(it.value());
99 if (Dc(it.col()) <
abs(it.value())) Dc(it.col()) =
abs(it.value());
102 for (
int i = 0;
i <
m; ++
i) {
105 for (
int i = 0;
i <
n; ++
i) {
109 for (
int i = 0;
i <
m; ++
i) {
112 for (
int i = 0;
i <
n; ++
i) {
119 for (
typename MatrixType::InnerIterator it(
m_matrix,
k); it; ++it) {
120 it.valueRef() = it.value() / (Dr(it.row()) * Dc(it.col()));
122 if (DrRes(it.row()) <
abs(it.value())) DrRes(it.row()) =
abs(it.value());
124 if (DcRes(it.col()) <
abs(it.value())) DcRes(it.col()) =
abs(it.value());
127 DrRes.array() = (1 - DrRes.array()).
abs();
128 EpsRow = DrRes.maxCoeff();
129 DcRes.array() = (1 - DcRes.array()).
abs();
130 EpsCol = DcRes.maxCoeff();
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Eigen::SparseMatrix< double > mat
Definition: EigenUnitTest.cpp:10
#define eigen_assert(x)
Definition: Macros.h:910
SCALAR Scalar
Definition: bench_gemm.cpp:45
iterative scaling algorithm to equilibrate rows and column norms in matrices
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:51
void setTolerance(double tol)
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:154
void compute(const MatrixType &mat)
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:74
VectorXd m_left
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:166
void computeRef(MatrixType &mat)
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:140
MatrixType m_matrix
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:163
MatrixType::Scalar Scalar
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:54
ComputationInfo m_info
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:164
~IterScaling()
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:65
MatrixType_ MatrixType
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:53
bool m_isInitialized
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:165
void init()
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:157
VectorXd & LeftScaling()
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:146
VectorXd & RightScaling()
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:150
VectorXd m_right
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:167
int m_maxits
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:169
double m_tol
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:168
IterScaling(const MatrixType &matrix)
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:60
IterScaling()
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:58
MatrixType::Index Index
Definition: unsupported/Eigen/src/IterativeSolvers/Scaling.h:55
Index cols() const
Definition: SparseMatrix.h:161
void resize(Index rows, Index cols)
Definition: SparseMatrix.h:734
Index rows() const
Definition: SparseMatrix.h:159
Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor >, 0, Eigen::OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition: common.h:85
ComputationInfo
Definition: Constants.h:438
int * m
Definition: level2_cplx_impl.h:294
char char char int int * k
Definition: level2_impl.h:374
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83