我正在尝试使用numpy或sympy为一个特殊的内积空间(所以不是欧几里得空间)编写一个Gram施密特算法。内积空间是
向量是
def inner_product(x, y):
return x[0]*y[0] + 2*x[1]*y[1] + x[2]*y[2]
def gram_schmidt(V):
U = []
for i in range(len(V)):
# start with the current vector
u = V[i]
for j in range(i):
# subtract the projection of V[i] onto each U[j]
proj = (inner_product(V[i], U[j]) / inner_product(U[j], U[j])) * U[j]
u = u - proj
# normalize
U.append(u / np.linalg.norm(u))
return np.array(U)
V = np.array([[1, 3, 4], [1, 2, 1], [1, 1, 2]])
U = gram_schmidt(V)
print(U)
如果算法能够打印出流程的所有步骤,那就太好了
1条答案
按热度按时间2ic8powd1#
请参阅Gram-Schmidt以了解确切的算法。
请注意,你为缩放所取的范数是欧几里得范数,所以很明显这会成为一个问题。同样,如果你在每一步都将其“归一化”,你就不需要在减法过程中将其归一化。
不管怎样,我是这样做的: