问题:对于这个问题,给你一个名为 As 的矩阵列表,你的工作是找到每个矩阵的 QR 分解。
实现 qr_by_gram_schmidt:此函数将矩阵 A 作为输入并计算 QR 分解,返回两个变量 Q 和 R,其中 A=QR,Q 正交且 R 在对角线下方为零。
A 是一个 n×m 矩阵,其中 n≥m(即行多于列)。
您应该使用修改后的 Gram-Schmidt 过程来实现此功能。
输入:
As:数组列表
输出:
Qs:qr_by_gram_schmidt 输出的 Q 矩阵列表,顺序与 As 相同。对于形状为 n×m 的矩阵 A,Q 的形状应为 n×m。
Rs:qr_by_gram_schmidt 输出的 R 矩阵列表,顺序与 As 相同。对于形状为 n×m 的矩阵 A,R 的形状应为 m×m
我已经编写了我认为正确的 QR 分解代码:
import numpy as np
def qr_by_gram_schmidt(A):
m = np.shape(A)[0]
n = np.shape(A)[1]
Q = np.zeros((m, m))
R = np.zeros((n, n))
for j in xrange(n):
v = A[:,j]
for i in xrange(j):
R[i,j] = Q[:,i].T * A[:,j]
v = v.squeeze() - (R[i,j] * Q[:,i])
R[j,j] = np.linalg.norm(v)
Q[:,j] = (v / R[j,j]).squeeze()
return Q, R
如何编写循环来计算 As 中每个矩阵的 QR 分解并按该顺序存储它们?
编辑:代码也有一些错误。如果您能帮助我调试它,我将不胜感激。
谢谢