我正在尝试使用此网站作为参考来实施上述程序。在页面末尾,算法描述如下:

我想我已经将给定的算法映射到正确的代码。但是,当我使用过程中获得的 U 和 V 来计算我没有得到双对角矩阵。沿对角线的值确实是在过程中计算的值,但其余值不是零。这是我的代码:
def golub_kahan(a):
n = a.shape[1]
v = np.ones(n, dtype="float32") / np.sqrt(n)
u = np.zeros(a.shape[0], dtype="float32")
beta = 0
U, V = np.zeros_like(a, dtype="float32"), np.zeros((n,n), dtype="float32")
for i in range(n):
V[:, i] = v
u = a @ v - beta * u
alpha = np.linalg.norm(u)
u /= alpha
U[:, i] = u
v = a.T @ u - alpha * v
beta = np.linalg.norm(v)
v /= beta
return U, V
我不确定我的错误在哪里,我是否以某种方式误解了算法?