Add Modified Gram-Schmidt QR decomposition

Summary

  • Add GramSchmidtQR class 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

Merge request reports

Loading