diff options
author | Gael Guennebaud <g.gael@free.fr> | 2015-09-02 15:34:03 +0200 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2015-09-02 15:34:03 +0200 |
commit | 6b99afa5ae6b723a2c7678b07c4abcf7fc0b2129 (patch) | |
tree | 4f4ec891dc27b17d454b063eb5b98bddd5555ca1 /Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h | |
parent | b5ad3d2cf70c8c1e41b8c168e9ce240df8cfe1f1 (diff) |
Fix LSCG::solve with a sparse destination.
Diffstat (limited to 'Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h')
-rw-r--r-- | Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h | 8 |
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: |