复向量的Python修正Gram-Schmidt

2024-09-26 17:46:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一些代码来实现修改后的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


Tags: of代码forreturnnpcolumnmatrixgram
1条回答
网友
1楼 · 发布于 2024-09-26 17:46:35

您的问题是numpy.vdot如何处理复数-第一个参数的复数共轭用于计算(ref)。所以您将rij计算为q*.Q[:,i],而不是{}。只需交换参数的顺序:

rij = np.vdot(Q[:,i], q)

这让测试代码对我有用。在

相关问题 更多 >

    热门问题