aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-09-02 15:34:03 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-09-02 15:34:03 +0200
commit6b99afa5ae6b723a2c7678b07c4abcf7fc0b2129 (patch)
tree4f4ec891dc27b17d454b063eb5b98bddd5555ca1 /Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
parentb5ad3d2cf70c8c1e41b8c168e9ce240df8cfe1f1 (diff)
Fix LSCG::solve with a sparse destination.
Diffstat (limited to 'Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h')
-rw-r--r--Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h b/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
index a7cb30cb9..5f4bcea11 100644
--- a/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
+++ b/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h
@@ -212,13 +212,17 @@ public:
Index rhsCols = b.cols();
Index size = b.rows();
Eigen::Matrix<DestScalar,Dynamic,1> tb(size);
- Eigen::Matrix<DestScalar,Dynamic,1> tx(size);
+ Eigen::Matrix<DestScalar,Dynamic,1> tx(cols());
+ // We do not directly fill dest because sparse expressions have to be free of aliasing issue.
+ // For non square least-square problems, b and dest might not have the same size whereas they might alias each-other.
+ SparseMatrix<DestScalar,DestOptions,DestIndex> tmp(cols(),rhsCols);
for(Index k=0; k<rhsCols; ++k)
{
tb = b.col(k);
tx = derived().solve(tb);
- dest.col(k) = tx.sparseView(0);
+ tmp.col(k) = tx.sparseView(0);
}
+ tmp.swap(dest);
}
protected: