import numpy as np
# just for demo purposes: build A and x
from scipy.linalg import qr # easy way to generate orthonormal columns
A = qr(np.random.randn(50, 6))[0][:, :6]
x = np.random.randn(50, 1)
# now, #1
is_x_orthogonal = np.allclose(A.T @ x, 0) # False :(
# and now, #2
newx = A @ (A.T @ x) - x
is_newx_orthogonal = np.allclose(A.T @ newx, 0) # True :D
2条答案
按热度按时间wribegjk1#
1.检查
x
是否与A
的每一列正交的最佳方法是,如您所说,检查每一列。幸运的是,矩阵乘法是所有数值计算中速度最快、优化程度最高的运算,所以A * x
可能就足够快了!1.关于#2,这是Gram-Schmidt正交化的基本思想。您只需减去由
A
的列表示的x
部分。在代码中(抱歉,我只使用Numpy/Python,但同样的想法也适用于MatLab!):lmvvr0a82#
1.您需要计算XT.A,它是x转置和A的矩阵乘积。它将得到大小为6x1的行向量。如果结果向量的所有元素都为零,则x与A的所有列正交。
1.对于第二部分,你需要使用Graam Schmidt技巧,在你的情况下唯一特别的是很少有正交性计算项将为零,因为它们是正交的,