Skip to content
Snippets Groups Projects
Commit d65a6aeb authored by Anton Gladky's avatar Anton Gladky
Browse files

Port unsupported constrained CG to Eigen3

(grafted from 4cd4be97
)
parent 395214bc
No related branches found
No related tags found
No related merge requests found
...@@ -62,7 +62,9 @@ void pseudo_inverse(const CMatrix &C, CINVMatrix &CINV) ...@@ -62,7 +62,9 @@ void pseudo_inverse(const CMatrix &C, CINVMatrix &CINV)
Scalar rho, rho_1, alpha; Scalar rho, rho_1, alpha;
d.setZero(); d.setZero();
CINV.startFill(); // FIXME estimate the number of non-zeros typedef Triplet<double> T;
std::vector<T> tripletList;
for (Index i = 0; i < rows; ++i) for (Index i = 0; i < rows; ++i)
{ {
d[i] = 1.0; d[i] = 1.0;
...@@ -88,11 +90,12 @@ void pseudo_inverse(const CMatrix &C, CINVMatrix &CINV) ...@@ -88,11 +90,12 @@ void pseudo_inverse(const CMatrix &C, CINVMatrix &CINV)
// FIXME add a generic "prune/filter" expression for both dense and sparse object to sparse // FIXME add a generic "prune/filter" expression for both dense and sparse object to sparse
for (Index j=0; j<l.size(); ++j) for (Index j=0; j<l.size(); ++j)
if (l[j]<1e-15) if (l[j]<1e-15)
CINV.fill(i,j) = l[j]; tripletList.push_back(T(i,j,l(j)));
d[i] = 0.0; d[i] = 0.0;
} }
CINV.endFill(); CINV.setFromTriplets(tripletList.begin(), tripletList.end());
} }
...@@ -107,6 +110,7 @@ template<typename TMatrix, typename CMatrix, ...@@ -107,6 +110,7 @@ template<typename TMatrix, typename CMatrix,
void constrained_cg(const TMatrix& A, const CMatrix& C, VectorX& x, void constrained_cg(const TMatrix& A, const CMatrix& C, VectorX& x,
const VectorB& b, const VectorF& f, IterationController &iter) const VectorB& b, const VectorF& f, IterationController &iter)
{ {
using std::sqrt;
typedef typename TMatrix::Scalar Scalar; typedef typename TMatrix::Scalar Scalar;
typedef typename TMatrix::Index Index; typedef typename TMatrix::Index Index;
typedef Matrix<Scalar,Dynamic,1> TmpVec; typedef Matrix<Scalar,Dynamic,1> TmpVec;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment