Abstract Summary
Random matrix theory is a major branch of contemporary mathematics. With origins in nuclear physics and statistics, random matrices have numerous applications in areas as diverse as real-time signal processing, civil engineering, combinatorics and number theory. The notion of rigid motion in Euclidean geometry is captured by orthogonal matrices. The choice of an arbitrary spacial orientation is modeled by a random orthogonal matrix. A main goal of this project is implementing a Python algorithm to generate orthogonal random matrices with a certain probability distribution (called Haar) that is the most natural generalization of the uniform distribution for scalar random variables. We also extend existing results on orthogonal matrices to random unitary and symplectic matrices (which are analog to orthogonal matrices in the contexts of complex Hermitian and quaternionic geometry, respectively). As a byproduct, we discover algorithms to generate Haar-distributed unitary and symplectic matrices, and implement these in Python. The algorithm to generate random orthogonal matrices depends on the QR factorization of a square matrix (where Q is orthogonal and R upper-triangular) that has normally distributed independent entries (called a Ginibre matrix). Standard libraries compute the QR factorization of real and complex matrices, so Haar orthogonal and unitary matrices are easily simulated. However, our implementation of a numerically stable algorithm for the QR factorization of quaternion matrices in Python is a new contribution based on adapting the method of Euclidean Householder reflections to quaternionic geometry.