6. Givens 消去法(QR 分解)
for i = 1, . . . , n: /* 前進消去 */
for i′ = i + 1, . . . , n:
MAKEROT(A[i, i], A[i′ , i], c, s);
ROT(b[i], b[i′ ], c, s);
for j = i + 1, . . . , n:
ROT(A[i, j], A[i′ , j], c, s);
for i = n, . . . , 1: /* 交代代入 */
for j = i + 1, . . . , n:
b[i] ← b[i] ? A[i, j]b[j]
b[i] ← b[i]/A[i, i]
ピボット選択なしの Gauss 消去法と同じ手続き
5/ 10
7. MAKEROT / ROT
#de?ne MAKEROT(x, y, c, s)
√
{ r = x2 + y 2 ; c = x/r; s = y/r; }
= 以下を満たす c, [ の計算 [ ]
s ] [ ]
c s x r
=
?s c y 0
#de?ne ROT(x, y, c, s)
{ u = cx + sy; v = ?sx + cy; x = u; y = v; }
= 以下の計算の適用 ]
[ [ ][ ]
x c s x
←
y ?s c y
6/ 10
8. QR 分解 補足
A = QR (Q : 直交, : 上三角)
R
☆ QR 法のよくある計算方法
? Gram-Schmidt の直交化
数値不安定なので,基本的に使ってはいけない
? Householder 変換
数値安定かつ早いので線型計算の教科書はこれを説明
? Givens 回転(今回紹介)
数値安定だが Householder より遅いので説明されない
しかし,実装が超シンプルになるので競プロ向き!
7/ 10