数値形式
解法コメント
説明なし
a
b
c
d
x
y
z
clear
i
Randomize
3131313131351515151515≈83137
ギブンス回転による QR 分解の計算法
2×2 平面回転を順序立てて適用し、対角要素下を 1 つずつ 0 にします。各ギブンス回転は作用する 2 つの要素により決定されます。回転の累積積が Q、回転された行列が R になります。
ギブンス回転 — 計算例(3×3)
初期行列
A
を書き出す:
A
=
1
1
0
1
0
1
0
1
1
QR
分解は、行列
A
を
A
=
Q
*
R
の形で表現することです。
行列
Q
は直交行列です。
行列
R
は上三角行列です。
ギブンス回転を使用して、行列
A
の主対角線以下のすべての要素をゼロにすることができます。
この方法は反復的であり、1回の反復で1つの要素をゼロに変換します。
最後の反復で、主対角線以下のすべての要素がゼロに変換されると、行列
R
が得られます。
各反復で行列
R
を計算する際、主対角線以下の要素をゼロにするための行列
G
を計算します。
すべての転置行列
G
を掛け合わせることで、行列
Q
を計算できます。
左上から右下に順番に要素をゼロにします。
各反復で、次の変数を定義する必要があります。
a
は、ゼロにしたい要素と同じ列の主対角線上にある行列 Aₖ₋₁ の要素ですa
=
a
0
k - 1
0
i,i
;
b
は、ゼロにしたい行列 Aₖ₋₁ の要素ですb
=
a
0
k - 1
0
j,i
;
// ただし
j
は、ゼロに変換したい要素が存在する 行 の番号です。i
は、ゼロに変換したい要素が存在する 列 の番号です。k
は反復回数です。Aₖ₋₁
は前の反復で計算された行列です。次に、次の値を計算する必要があります。
r
=
a
2
0
+
b
2
0
;
c
=
a
r
;
s
= -
b
r
;
これで、行列
G
を作成できます。
1)
行列 G の基底は、サイズ n x n の単位行列です。// ただし
n
は行列 A の行数です。2)
インデックス [i,i] の要素は c に等しいg
0
i,i
=
c
;
3)
インデックス [j,j] の要素は c に等しいg
0
j,j
=
c
;
4)
インデックス [j,i] の要素は s に等しいg
0
j,i
=
s
;
5)
インデックス [i,j] の要素は -s に等しいg
0
i,j
=
-s
;
行列
G
を作成したら、左から行列
A
0
k - 1
を掛けると、行列
A
0
k
が得られます。
このステップでは、インデックス
j,i
の要素をゼロにします。
また、行列
Q
0
k - 1
に行列
G
T
0
を掛けて、行列
Q
0
k
を取得します。
2
イテレーション 1最初の反復では、行列
A
0
0
は元の行列
A
と同じです。
A
0
0
=
1
1
0
1
0
1
0
1
1
単位行列に等しい初期行列
Q
0
0
を書きます:
Q
0
0
=
1
0
0
0
1
0
0
0
1
i
=
1
;
j
=
2
;
a
=
a
0
k - 1
0
i,i
=
a
0
0
0
1,1
=
1
;
b
=
a
0
k - 1
0
j,i
=
a
0
0
0
2,1
=
1
;
r
=
a
2
0
+
b
2
0
=
1
2
0
+
1
2
0
=
1
41
100
;
c
=
a
r
=
1
1
41
100
=
71
100
;
s
= -
b
r
= -
1
1
41
100
=
-
71
100
;
G
=
c
s
0
-s
c
0
0
0
1
=
71
100
-
71
100
0
71
100
71
100
0
0
0
1
;
行列
A
0
1
A
0
1
=
G
0
·
A
0
0
=
71
100
-
71
100
0
71
100
71
100
0
0
0
1
·
1
1
0
1
0
1
0
1
1
=
1
41
100
0
0
71
100
-
71
100
1
71
100
71
100
1
行列
G
T
0
G
T
0
=
71
100
71
100
0
-
71
100
71
100
0
0
0
1
行列
Q
0
1
Q
0
1
=
Q
0
0
·
G
T
0
=
1
0
0
0
1
0
0
0
1
·
71
100
71
100
0
-
71
100
71
100
0
0
0
1
=
71
100
71
100
0
-
71
100
71
100
0
0
0
1
3
イテレーション 2i
=
2
;
j
=
3
;
a
=
a
0
k - 1
0
i,i
=
a
0
1
0
2,2
=
-
71
100
;
b
=
a
0
k - 1
0
j,i
=
a
0
1
0
3,2
=
1
;
r
=
a
2
0
+
b
2
0
=
-
71
100
2
0
+
1
2
0
=
1
11
50
;
c
=
a
r
=
-
71
100
1
11
50
=
-
29
50
;
s
= -
b
r
= -
1
1
11
50
=
-
41
50
;
G
=
1
0
0
0
c
s
0
-s
c
=
1
0
0
0
-
29
50
-
41
50
0
41
50
-
29
50
;
行列
A
0
2
A
0
2
=
G
0
·
A
0
1
=
1
0
0
0
-
29
50
-
41
50
0
41
50
-
29
50
·
1
41
100
0
0
71
100
-
71
100
1
71
100
71
100
1
=
1
41
100
0
0
71
100
1
11
50
0
71
100
41
100
-1
3
20
行列
G
T
0
G
T
0
=
1
0
0
0
-
29
50
41
50
0
-
41
50
-
29
50
行列
Q
0
2
Q
0
2
=
Q
0
1
·
G
T
0
=
71
100
71
100
0
-
71
100
71
100
0
0
0
1
·
1
0
0
0
-
29
50
41
50
0
-
41
50
-
29
50
=
71
100
71
100
0
41
100
-
41
100
41
50
29
50
-
29
50
-
29
50
4
行列 Q, RQ
=
Q
0
2
=
71
100
71
100
0
41
100
-
41
100
41
50
29
50
-
29
50
-
29
50
R
=
A
0
2
=
1
41
100
0
0
71
100
1
11
50
0
71
100
41
100
-1
3
20
Answer
A = Q · RQ
=
71
100
71
100
0
41
100
-
41
100
41
50
29
50
-
29
50
-
29
50
R
=
1
41
100
0
0
71
100
1
11
50
0
71
100
41
100
-1
3
20
サイズ3×3方法ギブンス回転