问题: 对于这个问题,您会得到一个名为As的矩阵列表,您的工作是查找每个矩阵的QR分解。使用修改的Gram Schmidt的QR因式分解法
实现qr_by_gram_schmidt:该函数将矩阵A作为输入并计算QR分解,返回两个变量Q和R,其中A = QR,Q正交,R零点低于对角线。
A是n≥m矩阵,其中n≥m(即,比列更多的行)。
您应该使用修改的Gram-Schmidt过程来实现此功能。
INPUT:
如:阵列
列表OUTPUT:
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分解并按顺序存储它们?
编辑:代码也有一些错误。如果您能帮助我调试它,我将不胜感激。
感谢
谢谢您的帮助。但是这段代码并没有给出正确的输出,我不明白为什么。在每次迭代中Q和R的形状是不正确的 –