通过对n x n矩阵进行QR因式分解,得到一个随机n x n正交矩阵Q(均匀分布在n x n正交矩阵的流形上),矩阵元素i.i.d.平均0和方差1。下面是一个例子:import numpy as np
from scipy.linalg import qr
n = 3
H = np.random.randn(n, n)
Q, R = qr(H)
print (Q.dot(Q.T))[[ 1.00000000e+00 -2.77555756e-17 2.49800181e-16]
[ -2.77555756e-17 1.00000000e+00 -1.38777878e-17]
[ 2.49800181e-16 -1.38777878e-17 1.00000000e+00]]
编辑:(在@g的评论之后重新讨论这个答案)上面关于高斯矩阵的QR分解的声明提供了一个均匀分布(在所谓的Stiefel流形上)正交矩阵,这是由this reference的定理2.3.18-19提出的。注意,结果的陈述暗示了“类QR”分解,然而,与三角形矩阵R具有正元素。
显然,scipy(numpy)函数的qr函数不能保证R的正对角元素,相应的Q实际上是不均匀分布的。这已在this专著中观察到,第。4.6(讨论涉及到MATLAB,但我想MATLAB和scipy都使用相同的LAPACK例程)。提出了qr提供的矩阵Q是通过后乘随机酉对角矩阵来修改的。
下面我再现了上述参考文献中的实验,绘制了由qr提供的“直接”Q矩阵的特征值相位的经验分布(直方图),以及“修改”版本,其中可以看到修改版本确实具有统一的特征值相位,正如从统一的分布正交矩阵。from scipy.linalg imp