QR分解 計算機

数値形式
解法コメント
説明なし

a

b

c

d

x

y

z

clear

i

ab
x2
xn

Randomize

313131313135151515151583137
2
2510
=解く

  ハウスホルダー変換による QR 分解の計算法

列ごとに対角要素下を 0 にする反射子を構成します。各反射子は簡約される列ベクトルにより決定されます。反射子の積は Q(直交行列)、反射された行列は R(上三角行列)になります。

  ハウスホルダー変換 — 計算例(2×2)

初期行列
A
を書き出す:
A
=
3
4
1
2
QR
分解は、行列
A
A
=
Q
*
R
の形で表現することです。
行列
Q
は直交行列です。
行列
R
は上三角行列です。
QR
分解をハウスホルダー反射法で行うには、以下のことを行う必要があります。
1)
行列 A の各列 a について、ハウスホルダー反射ベクトル v を計算します。
2)
行列 A の各列 a に対して、ハウスホルダー行列 H を計算します。
3)
行列 A のすべての列にハウスホルダー変換を適用すると、結果の変換された行列 A' は上三角行列 R になります。
4)
直交行列 Q は、すべてのハウスホルダー行列 H を掛け合わせて得られます。
ハウスホルダー反射法で
QR
分解を行うには、行列
A
の各列
a
に対して以下のことを行う必要があります。
1)
列 a のノルム ‖a‖ を計算します
2)
列 a の符号(s)を定義します
s
= -
sgn
(
a
[
i
])
;
// ただし
sgn(a)
= 1 a[i] ≥ 0 であれば、そうでなければ -1。
a[i]
は列 a の i 番目の要素です。
i
は列番号です。
3)
ハウスホルダー反射ベクトル を計算します
v
=
a
-
s
*
a
*
e
0
i
;
// ただし
eᵢ
i 番目の要素が 1 で、他の要素がすべて 0 である標準基底ベクトルです。
i
は列番号です。
4)
ハウスホルダー反射ベクトル を正規化します
v_norm
=
v
v
;
5)
ハウスホルダー行列 を計算します
H
0
i
=
I
- 2 *
v_norm
*
v_norm
T
0
;
6)
行列 にハウスホルダー変換を適用します
A'
0
i
=
H
0
i
*
A'
0
i - 1
;
7)
行列 を計算します
Q
0
i
=
Q
0
i - 1
*
H
0
i
;
2
イテレーション 1
最初の反復では、行列
A'
0
0
は元の行列
A
と同じです。
A'
0
0
=
3
4
1
2
単位行列に等しい初期行列
Q
0
0
を書きます:
Q
0
0
=
1
0
0
1
ベクトル
a
は、行列
A'
0
0
1
番目の列と同じです:
a
=
3
4
a
:
のノルム
a
を計算します
a
=
5
;
a
:
の符号(
s
)を定義します
s
= -
sgn
(
a
[
1
])
= -
sgn
-(
3
) = -(
1
) =
-1
;
1
番目の標準基底ベクトルを書きます:
e
0
1
=
1
0
ハウスホルダー反射ベクトル
:
を計算します
v
=
a
-
s
*
a
*
e
0
1
=
3
4
-
-1
*
5
*
1
0
=
3
4
-
-5
0
=
8
4
;
ハウスホルダー反射ベクトル
:
を正規化します
v_norm
=
v
v
=
89
100
9
20
ハウスホルダー反射ベクトル
:
を計算します
H
0
1
=
I
- 2 *
v_norm
*
v_norm
T
0
=
1
0
0
1
- 2 *
89
100
9
20
*
89
100
9
20
=
=
89
100
9
20
·
89
100
9
20
=
4
5
2
5
2
5
1
5
=
1
0
0
1
- 2 *
4
5
2
5
2
5
1
5
=
=
4
5
2
5
2
5
1
5
·
2
=
4
5
*
2
2
5
*
2
2
5
*
2
1
5
*
2
=
1
3
5
4
5
4
5
2
5
=
1
0
0
1
1
3
5
4
5
4
5
2
5
=
1
-
1
3
5
0
-
4
5
0
-
4
5
1
-
2
5
=
-
3
5
-
4
5
-
4
5
3
5
行列
A'
0
1
:
にハウスホルダー変換を適用します
A'
0
1
=
H
0
1
·
A'
0
0
=
-
3
5
-
4
5
-
4
5
3
5
·
3
4
1
2
=
-5
0
-2
1
5
2
5
行列
Q
0
1
:
を計算します
Q
0
1
=
Q
0
0
·
H
0
1
=
1
0
0
1
·
-
3
5
-
4
5
-
4
5
3
5
=
-
3
5
-
4
5
-
4
5
3
5
3
イテレーション 2
ベクトル
a
は、行列
A'
0
1
2
番目の列と同じです:
a
=
0
2
5
a
:
のノルム
a
を計算します
a
=
2
5
;
a
:
の符号(
s
)を定義します
s
= -
sgn
(
a
[
2
])
= -
sgn
-(
2
5
) = -(
1
) =
-1
;
2
番目の標準基底ベクトルを書きます:
e
0
2
=
0
1
ハウスホルダー反射ベクトル
:
を計算します
v
=
a
-
s
*
a
*
e
0
2
=
0
2
5
-
-1
*
2
5
*
0
1
=
0
2
5
-
0
-
2
5
=
0
4
5
;
ハウスホルダー反射ベクトル
:
を正規化します
v_norm
=
v
v
=
0
1
ハウスホルダー反射ベクトル
:
を計算します
H
0
2
=
I
- 2 *
v_norm
*
v_norm
T
0
=
1
0
0
1
- 2 *
0
1
*
0
1
=
=
0
1
·
0
1
=
0
0
0
1
=
1
0
0
1
- 2 *
0
0
0
1
=
=
0
0
0
1
·
2
=
0
*
2
0
*
2
0
*
2
1
*
2
=
0
0
0
2
=
1
0
0
1
0
0
0
2
=
1
-
0
0
-
0
0
-
0
1
-
2
=
1
0
0
-1
行列
A'
0
2
:
にハウスホルダー変換を適用します
A'
0
2
=
H
0
2
·
A'
0
1
=
1
0
0
-1
·
-5
0
-2
1
5
2
5
=
-5
0
-2
1
5
-
2
5
行列
Q
0
2
:
を計算します
Q
0
2
=
Q
0
1
·
H
0
2
=
-
3
5
-
4
5
-
4
5
3
5
·
1
0
0
-1
=
-
3
5
-
4
5
4
5
-
3
5
4
行列 Q, R
Q
=
Q
0
2
=
-
3
5
-
4
5
4
5
-
3
5
R
=
A'
0
2
=
-5
0
-2
1
5
-
2
5
Answer
A = Q · R
Q
=
-
3
5
-
4
5
4
5
-
3
5
R
=
-5
0
-2
1
5
-
2
5
サイズ2×2方法ハウスホルダー変換

  計算方法

  ソース