10#ifndef EIGEN_ITERSCALING_H
11#define EIGEN_ITERSCALING_H
47template<
typename _MatrixType>
52 typedef typename MatrixType::Scalar
Scalar;
53 typedef typename MatrixType::Index
Index;
84 VectorXd Dr, Dc, DrRes, DcRes;
85 Dr.resize(
m); Dc.resize(
n);
86 DrRes.resize(
m); DcRes.resize(
n);
87 double EpsRow = 1.0, EpsCol = 1.0;
92 Dr.setZero(); Dc.setZero();
93 for (
int k=0; k<
m_matrix.outerSize(); ++k)
95 for (
typename MatrixType::InnerIterator it(
m_matrix, k); it; ++it)
97 if ( Dr(it.row()) <
abs(it.value()) )
98 Dr(it.row()) =
abs(it.value());
100 if ( Dc(it.col()) <
abs(it.value()) )
101 Dc(it.col()) =
abs(it.value());
104 for (
int i = 0;
i <
m; ++
i)
106 Dr(
i) = std::sqrt(Dr(
i));
108 for (
int i = 0;
i <
n; ++
i)
110 Dc(
i) = std::sqrt(Dc(
i));
113 for (
int i = 0;
i <
m; ++
i)
117 for (
int i = 0;
i <
n; ++
i)
122 DrRes.setZero(); DcRes.setZero();
123 for (
int k=0; k<
m_matrix.outerSize(); ++k)
125 for (
typename MatrixType::InnerIterator it(
m_matrix, k); it; ++it)
127 it.valueRef() = it.value()/( Dr(it.row()) * Dc(it.col()) );
129 if ( DrRes(it.row()) <
abs(it.value()) )
130 DrRes(it.row()) =
abs(it.value());
132 if ( DcRes(it.col()) <
abs(it.value()) )
133 DcRes(it.col()) =
abs(it.value());
136 DrRes.array() = (1-DrRes.array()).
abs();
137 EpsRow = DrRes.maxCoeff();
138 DcRes.array() = (1-DcRes.array()).
abs();
139 EpsCol = DcRes.maxCoeff();
Matrix3f m
Definition AngleAxis_mimic_euler.cpp:1
int n
Definition BiCGSTAB_simple.cpp:1
int i
Definition BiCGSTAB_step_by_step.cpp:9
Array< double, 1, 3 > e(1./3., 0.5, 2.)
#define eigen_assert(x)
Definition Macros.h:1037
MatrixXf mat
Definition Tutorial_AdvancedInitialization_CommaTemporary.cpp:1
iterative scaling algorithm to equilibrate rows and column norms in matrices
Definition Scaling.h:49
ComputationInfo m_info
Definition Scaling.h:185
int m_maxits
Definition Scaling.h:190
VectorXd m_left
Definition Scaling.h:187
double m_tol
Definition Scaling.h:189
_MatrixType MatrixType
Definition Scaling.h:51
void init()
Definition Scaling.h:177
MatrixType::Scalar Scalar
Definition Scaling.h:52
IterScaling()
Definition Scaling.h:56
MatrixType::Index Index
Definition Scaling.h:53
void compute(const MatrixType &mat)
Definition Scaling.h:73
MatrixType m_matrix
Definition Scaling.h:184
~IterScaling()
Definition Scaling.h:64
void setTolerance(double tol)
Definition Scaling.h:170
IterScaling(const MatrixType &matrix)
Definition Scaling.h:58
VectorXd & LeftScaling()
Definition Scaling.h:156
bool m_isInitialized
Definition Scaling.h:186
VectorXd m_right
Definition Scaling.h:188
VectorXd & RightScaling()
Definition Scaling.h:163
void computeRef(MatrixType &mat)
Definition Scaling.h:149
Map< Matrix< T, Dynamic, Dynamic, ColMajor >, 0, OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition common.h:110
#define abs(x)
Definition datatypes.h:17
ComputationInfo
Definition Constants.h:440
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85