RcppQR
C++ Function Reference
1 Signature
strQR BigDataStatMeth::RcppQR(M X, bool bthin)2 Description
Template function for QR decomposition.
3 Parameters
X(M): Input matrix to decomposebthin(bool): Whether to compute thin QR
4 Returns
Structure containing Q and R matrices
5 Details
Computes the QR decomposition of a matrix using Householder transformations. Supports both full and thin decomposition.
6 Source Code
NoteImplementation
File: inst/include/hdf5Algebra/matrixQR.hpp • Lines 74-113
inline strQR RcppQR ( M X, bool bthin )
{
static_assert(std::is_same<M, Eigen::MatrixXd >::value ||
std::is_same<M, Eigen::Map< Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>> >::value ||
std::is_same<M, Eigen::Map< Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor>> >::value,
"Error - type not allowed");
Eigen::MatrixXd A = X;
int m = A.rows(), n = A.cols();
int irank;
strQR vQR;
Eigen::MatrixXd R;
Eigen::MatrixXd Q;
Eigen::FullPivLU<Eigen::MatrixXd>lu_decomp(A);
Eigen::HouseholderQR<Eigen::MatrixXd> qr(A);
qr.compute(A);
irank = lu_decomp.rank();
if (irank == m + 1 || irank == n + 1 )
{
vQR.R = qr.matrixQR().template triangularView<Eigen::Upper>();
} else {
vQR.R = qr.matrixQR().topLeftCorner(irank, irank).template triangularView<Eigen::Upper>();
}
if (bthin == false)
{
vQR.Q = qr.householderQ(); // Full decomposition
} else {
vQR.Q = Eigen::MatrixXd::Identity(m,n);
vQR.Q = qr.householderQ() * vQR.Q; // Thin decomposition
}
return(vQR);
}7 Usage Example
#include "BigDataStatMeth.hpp"
// Example usage
auto result = RcppQR(...);