我写了一些代码来实现修改后的Gram-Schmidt过程。什么时候? 我在实矩阵上做了测试,是正确的。但是,当我测试它的时候 在复杂矩阵上,它出错了。在
通过逐步检查,我相信我的代码是正确的。因此, 我想知道是否有数字上的原因来解释修正的Gram-Schmidt 处理复杂向量失败。在
代码如下:
import numpy as np
def modifiedGramSchmidt(A):
"""
Gives a orthonormal matrix, using modified Gram Schmidt Procedure
:param A: a matrix of column vectors
:return: a matrix of orthonormal column vectors
"""
# assuming A is a square matrix
dim = A.shape[0]
Q = np.zeros(A.shape, dtype=A.dtype)
for j in range(0, dim):
q = A[:,j]
for i in range(0, j):
rij = np.vdot(q, Q[:,i])
q = q - rij*Q[:,i]
rjj = np.linalg.norm(q, ord=2)
if np.isclose(rjj,0.0):
raise ValueError("invalid input matrix")
else:
Q[:,j] = q/rjj
return Q
测试代码如下:
^{pr2}$问题是,我实现了一个为内积线性化设计的算法
而我认为它在第二个论点中是线性的。在
谢谢@landogardner
您的问题是}。只需交换参数的顺序:
numpy.vdot
如何处理复数-第一个参数的复数共轭用于计算(ref)。所以您将rij
计算为q*.Q[:,i]
,而不是{这让测试代码对我有用。在
相关问题 更多 >
编程相关推荐