diff options
author | Gael Guennebaud <g.gael@free.fr> | 2015-12-01 14:38:47 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2015-12-01 14:38:47 +0100 |
commit | 0bb12fa61437e55ce563d076938593bebff7f0fc (patch) | |
tree | 0b78b95457df64d4addd62b77899d0d645e59e53 /Eigen/src/Core/Solve.h | |
parent | 1663d15da7daf6cea77b6d0072849e77428db7a4 (diff) |
Add LU::transpose().solve() and LU::adjoint().solve() API.
Diffstat (limited to 'Eigen/src/Core/Solve.h')
-rw-r--r-- | Eigen/src/Core/Solve.h | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/Eigen/src/Core/Solve.h b/Eigen/src/Core/Solve.h index 2d163fe2a..ba2ee53b8 100644 --- a/Eigen/src/Core/Solve.h +++ b/Eigen/src/Core/Solve.h @@ -34,12 +34,11 @@ template<typename Decomposition, typename RhsType,typename StorageKind> struct s template<typename Decomposition, typename RhsType> struct solve_traits<Decomposition,RhsType,Dense> { - typedef typename Decomposition::MatrixType MatrixType; typedef Matrix<typename RhsType::Scalar, - MatrixType::ColsAtCompileTime, + Decomposition::ColsAtCompileTime, RhsType::ColsAtCompileTime, RhsType::PlainObject::Options, - MatrixType::MaxColsAtCompileTime, + Decomposition::MaxColsAtCompileTime, RhsType::MaxColsAtCompileTime> PlainObject; }; @@ -145,6 +144,28 @@ struct Assignment<DstXprType, Solve<DecType,RhsType>, internal::assign_op<Scalar } }; +// Specialization for "dst = dec.transpose().solve(rhs)" +template<typename DstXprType, typename DecType, typename RhsType, typename Scalar> +struct Assignment<DstXprType, Solve<Transpose<const DecType>,RhsType>, internal::assign_op<Scalar>, Dense2Dense, Scalar> +{ + typedef Solve<Transpose<const DecType>,RhsType> SrcXprType; + static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op<Scalar> &) + { + src.dec().nestedExpression().template _solve_impl_transposed<false>(src.rhs(), dst); + } +}; + +// Specialization for "dst = dec.adjoint().solve(rhs)" +template<typename DstXprType, typename DecType, typename RhsType, typename Scalar> +struct Assignment<DstXprType, Solve<CwiseUnaryOp<internal::scalar_conjugate_op<typename DecType::Scalar>, const Transpose<const DecType> >,RhsType>, internal::assign_op<Scalar>, Dense2Dense, Scalar> +{ + typedef Solve<CwiseUnaryOp<internal::scalar_conjugate_op<typename DecType::Scalar>, const Transpose<const DecType> >,RhsType> SrcXprType; + static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op<Scalar> &) + { + src.dec().nestedExpression().nestedExpression().template _solve_impl_transposed<true>(src.rhs(), dst); + } +}; + } // end namepsace internal } // end namespace Eigen |