Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef EIGEN2_QR_H
00027 #define EIGEN2_QR_H
00028
00029 template<typename MatrixType>
00030 class QR : public HouseholderQR<MatrixType>
00031 {
00032 public:
00033
00034 typedef HouseholderQR<MatrixType> Base;
00035 typedef Block<const MatrixType, MatrixType::ColsAtCompileTime, MatrixType::ColsAtCompileTime> MatrixRBlockType;
00036
00037 QR() : Base() {}
00038
00039 template<typename T>
00040 explicit QR(const T& t) : Base(t) {}
00041
00042 template<typename OtherDerived, typename ResultType>
00043 bool solve(const MatrixBase<OtherDerived>& b, ResultType *result) const
00044 {
00045 *result = static_cast<const Base*>(this)->solve(b);
00046 return true;
00047 }
00048
00049 MatrixType matrixQ(void) const {
00050 MatrixType ret = MatrixType::Identity(this->rows(), this->cols());
00051 ret = this->householderQ() * ret;
00052 return ret;
00053 }
00054
00055 bool isFullRank() const {
00056 return true;
00057 }
00058
00059 const TriangularView<MatrixRBlockType, UpperTriangular>
00060 matrixR(void) const
00061 {
00062 int cols = this->cols();
00063 return MatrixRBlockType(this->matrixQR(), 0, 0, cols, cols).template triangularView<UpperTriangular>();
00064 }
00065 };
00066
00071 template<typename Derived>
00072 const QR<typename MatrixBase<Derived>::PlainObject>
00073 MatrixBase<Derived>::qr() const
00074 {
00075 return QR<PlainObject>(eval());
00076 }
00077
00078
00079 #endif // EIGEN2_QR_H