// This file is part of Eigen, a lightweight C++ template library // for linear algebra. // // Copyright (C) 2008 Gael Guennebaud // Copyright (C) 2011 Benoit Jacob // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. #ifndef EIGEN2_QR_H #define EIGEN2_QR_H namespace Eigen { template class QR : public HouseholderQR { public: typedef HouseholderQR Base; typedef Block MatrixRBlockType; QR() : Base() {} template explicit QR(const T& t) : Base(t) {} template bool solve(const MatrixBase& b, ResultType *result) const { *result = static_cast(this)->solve(b); return true; } MatrixType matrixQ(void) const { MatrixType ret = MatrixType::Identity(this->rows(), this->cols()); ret = this->householderQ() * ret; return ret; } bool isFullRank() const { return true; } const TriangularView matrixR(void) const { int cols = this->cols(); return MatrixRBlockType(this->matrixQR(), 0, 0, cols, cols).template triangularView(); } }; /** \return the QR decomposition of \c *this. * * \sa class QR */ template const QR::PlainObject> MatrixBase::qr() const { return QR(eval()); } } // end namespace Eigen #endif // EIGEN2_QR_H