質問: この問題では、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:
とおり
Qsの:配列
OUTPUTのリストQの一覧と同じ順序で、qr_by_gram_schmidtによって出力行列。形状n×mの行列Aに対して、Qは、形状n×mを有するべきである。
Rs:qr_by_gram_schmidtが出力するR行列のリストで、Asと同じ順序で表示されます。
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
:形状の行列Aに対してN M×、Rは私が正しいと信じQR分解のコードを書かれているM
×形状mを有するべきですAsの各行列のQR分解を計算し、その順に格納するか?
編集:コードにもエラーがあります。デバッグに手伝っていただければ幸いです。
おかげ
はあなたの助けをいただき、ありがとうございます。しかし、このコードでは正しい出力は得られません。その理由を理解できません。各反復でのQとRの形状が正しくない –