Add Modified Gram-Schmidt QR decomposition
Summary
- Add
GramSchmidtQRclass using the Modified Gram-Schmidt (MGS) algorithm - Unlike HouseholderQR, stores Q and R as explicit dense matrices
- Q is directly usable in matrix operations without special syntax
- Supports square, tall, and wide matrices
- Includes solve support via SolverBase, determinant computation
- Convenience method
MatrixBase::gramSchmidtQr()
Usage
MatrixXd A = MatrixXd::Random(m, n);
GramSchmidtQR<MatrixXd> qr(A);
MatrixXd Q = qr.matrixQ(); // directly usable dense matrix
MatrixXd R = qr.matrixR(); // upper triangular
// A == Q * R
// Or via convenience method:
auto qr2 = A.gramSchmidtQr();
// Solve Ax = b:
VectorXd x = qr.solve(b);
Test plan
- QR factorization correctness (A == Q*R) for float, double, complex
- Q orthogonality verification (VERIFY_IS_UNITARY)
- R upper triangularity
- Square matrix solve
- Convenience method gramSchmidtQr()
- Determinant computation
- Edge cases: identity, tall matrix, single column, 1x1 matrix
- Random sizes up to EIGEN_TEST_MAX_SIZE
Closes #2495