QR 分解は、行列を「ベクトルの長さを変えない部分 Q Q Q 」と「三角形の形をした部分 R R R 」の積に分ける方法です。長さを変えない変換だけで計算すれば誤差が膨らみにくいので、最小二乗問題や固有値計算の土台として使われます。この記事では、その作り方(鏡映と回転)、コンピュータの丸め誤差があっても計算結果が「入力をほんの少し動かした問題の厳密な答え」になっていること、そして Gram–Schmidt 法では直交性が崩れうることを順に見ていきます。
任意の m × n m\times n m × n 実行列は A = Q R A=QR A = QR (Q Q Q は直交行列、R R R は上三角)と書けます。列が一次独立なら、R R R の対角を正にした薄い QR 分解は一意(薄い QR 分解とは Q Q Q を m × n m\times n m × n の長方形のまま使う形)で、その Q Q Q の列は Gram–Schmidt の直交化と一致します。
Householder 鏡映 P = I − β v v T P=I-\beta\boldsymbol{v}\boldsymbol{v}^{\mathsf{T}} P = I − β v v T はベクトルを ∓ ∥ x ∥ 2 e 1 \mp\|\boldsymbol{x}\|_2\boldsymbol{e}_1 ∓ ∥ x ∥ 2 e 1 に写す対称な直交行列です。符号を x 1 x_1 x 1 と同じ向きに選ぶと v 1 v_1 v 1 の計算で桁落ち(近い数の引き算で有効数字が減ること)が起きません。これを n n n 回掛ける Householder QR の演算量は 2 m n 2 − 2 n 3 / 3 2mn^2-2n^3/3 2 m n 2 − 2 n 3 /3 です。
浮動小数で計算した鏡映は「厳密な鏡映 + 相対 γ 14 p + 29 \gamma_{14p+29} γ 14 p + 29 の誤差」で、これを積み重ねると、計算した R ^ \widehat R R についてある厳密な直交行列 Q Q Q で A + Δ A = Q R ^ A+\Delta A=Q\widehat R A + Δ A = Q R 、∥ Δ a j ∥ 2 ≤ γ 43 m n ∥ a j ∥ 2 \|\Delta\boldsymbol{a}_j\|_2\le\gamma_{43mn}\|\boldsymbol{a}_j\|_2 ∥Δ a j ∥ 2 ≤ γ 43 mn ∥ a j ∥ 2 が成り立ちます(列ごとの後退安定性。計算結果が、入力を少しだけ動かした問題の厳密な答えになっているということです)。Givens 回転による QR も同じ形です。
古典 Gram–Schmidt と修正 Gram–Schmidt は厳密な算術では同じ Q , R Q,R Q , R を与えますが、浮動小数では直交性 ∥ I − Q ^ T Q ^ ∥ \|I-\widehat Q^{\mathsf{T}}\widehat Q\| ∥ I − Q T Q ∥ がそれぞれおよそ κ 2 u \kappa^2u κ 2 u 、κ u \kappa u κ u まで崩れ、Householder では u u u の程度にとどまります。後退誤差 ∥ A − Q ^ R ^ ∥ / ∥ A ∥ \|A-\widehat Q\widehat R\|/\|A\| ∥ A − Q R ∥/∥ A ∥ はどれも u u u の程度で、違いは直交性に出ます。
この記事で使う事前知識
条件数 : 連立一次方程式で、入力の小さな変化が解をどれだけ大きく動かすかの目安。→ 条件数
Frobenius ノルム : 行列の全成分の 2 乗和の平方根。→ Frobenius ノルム
ユニタリ行列(実なら直交行列) : Q T Q = I Q^{\mathsf{T}}Q=I Q T Q = I を満たし、ベクトルの長さを変えない行列。→ ユニタリ行列
浮動小数の標準モデル : 四則 1 回の丸めは相対誤差 u u u 以下、つまり f l ( x ∘ y ) = ( x ∘ y ) ( 1 + δ ) \mathrm{fl}(x\circ y)=(x\circ y)(1+\delta) fl ( x ∘ y ) = ( x ∘ y ) ( 1 + δ ) 、∣ δ ∣ ≤ u |\delta|\le u ∣ δ ∣ ≤ u という約束。→ 浮動小数点数と丸め誤差
Gram–Schmidt の直交化 : 一次独立なベクトルを、前に作った方向の成分を引きながら順に正規直交にしていく手順。→ 内積空間とグラム・シュミット直交化
最小二乗問題 ・固有値計算・Krylov 部分空間 法は、どれも「列ベクトルを直交化する」操作を中心に持ちます。直交変換は 2 ノルムを保つので、誤差を拡大しません(行列のノルムと条件数 の ユニタリ不変性(命題 4.4)[行列のノルムと線形方程式の条件数] )。ただし、それは厳密に 直交な行列を掛けた場合の話で、計算機の中の「直交行列」は丸め誤差を含みます。
教科書で最初に習う Gram–Schmidt の直交化は、厳密な算術では申し分のない算法ですが、浮動小数では列がほとんど一次従属のとき直交性が崩れます。これに対して Householder 鏡映や Givens 回転は、「計算した結果が、少しだけ動かしたデータに厳密な直交変換を施した結果になっている」ことを証明できます。この記事の中心は、この後退誤差解析を、丸めの誤差モデルから省略せずに組み立てることです。
この記事では実数の行列を扱います(複素数でも、転置を共役転置に、符号 sgn x 1 \operatorname{sgn}x_1 sgn x 1 を x 1 / ∣ x 1 ∣ x_1/|x_1| x 1 /∣ x 1 ∣ に替えれば同じです)。sgn ( t ) = 1 \operatorname{sgn}(t)=1 sgn ( t ) = 1 (t ≥ 0 t\ge0 t ≥ 0 )、− 1 -1 − 1 (t < 0 t<0 t < 0 )と約束します。直交行列は Q T Q = I Q^{\mathsf{T}}Q=I Q T Q = I を満たす実正方行列で、ユニタリ行列の特徴づけ(命題 3.2)[スペクトル定理] により Q Q T = I QQ^{\mathsf{T}}=I Q Q T = I かつ ∥ Q x ∥ 2 = ∥ x ∥ 2 \|Q\boldsymbol{x}\|_2=\|\boldsymbol{x}\|_2 ∥ Q x ∥ 2 = ∥ x ∥ 2 です。
浮動小数の約束. F \mathbb{F} F は 2 進浮動小数の集合、u u u は単位丸めで、計算の途中でアンダーフロー・オーバーフローは起きないとします。このとき四則と平方根は 四則の標準モデル(系 3.1)[浮動小数点数と丸め誤差] により f l ( x ∘ y ) = ( x ∘ y ) ( 1 + δ ) \mathrm{fl}(x\circ y)=(x\circ y)(1+\delta) fl ( x ∘ y ) = ( x ∘ y ) ( 1 + δ ) 、∣ δ ∣ ≤ u |\delta|\le u ∣ δ ∣ ≤ u を満たします。k u < 1 ku<1 k u < 1 のとき γ k = k u / ( 1 − k u ) \gamma_k=ku/(1-ku) γ k = k u / ( 1 − k u ) です(γₙ の定義(定義 3.1)[浮動小数と区間演算] )。内積の丸め誤差は 内積の丸め誤差(定理 3.3)[浮動小数と区間演算] 、γ \gamma γ の足し算・掛け算の規則は γₙ の計算規則(補題 3.2)[浮動小数点数と丸め誤差] を使います。以下「1 + θ 1+\theta 1 + θ 、∣ θ ∣ ≤ γ k |\theta|\le\gamma_k ∣ θ ∣ ≤ γ k 」の形の因子を 1 + θ k 1+\theta_k 1 + θ k と略記することがあります。
後退誤差解析では定数の正確な値はあまり重要でないので、次の記法が便利です。
定義 2.1 (γ̃ の記法 ) ↗
c c c を問題の大きさ(m , n m,n m , n )とデータによらない正の整数定数とし、c k u < 1 cku<1 c k u < 1 のとき γ ~ k = γ c k = c k u 1 − c k u \widetilde\gamma_k=\gamma_{ck}=\dfrac{cku}{1-cku} γ k = γ c k = 1 − c k u c k u とおく。本記事の定理では c c c の値を明示する(Householder と Givens の QR では c = 43 c=43 c = 43 で足りる)。
補題 2.2 (逆数と平方根の誤差因子 ) ✓
k ≥ 1 k\ge1 k ≥ 1 、2 k u < 1 2ku<1 2 k u < 1 、∣ θ ∣ ≤ γ k |\theta|\le\gamma_k ∣ θ ∣ ≤ γ k とする。
( 1 + θ ) − 1 = 1 + θ ′ (1+\theta)^{-1}=1+\theta' ( 1 + θ ) − 1 = 1 + θ ′ と書くと ∣ θ ′ ∣ ≤ γ 2 k |\theta'|\le\gamma_{2k} ∣ θ ′ ∣ ≤ γ 2 k 。
1 + θ = 1 + θ ′ ′ \sqrt{1+\theta}=1+\theta'' 1 + θ = 1 + θ ′′ と書くと ∣ θ ′ ′ ∣ ≤ γ k |\theta''|\le\gamma_k ∣ θ ′′ ∣ ≤ γ k 。
証明(補題 2.2) 2 k u < 1 2ku<1 2 k u < 1 から γ k = k u / ( 1 − k u ) < 1 \gamma_k=ku/(1-ku)<1 γ k = k u / ( 1 − k u ) < 1 なので 1 + θ > 0 1+\theta>0 1 + θ > 0 です。(1) θ ′ = − θ / ( 1 + θ ) \theta'=-\theta/(1+\theta) θ ′ = − θ / ( 1 + θ ) なので
∣ θ ′ ∣ ≤ γ k 1 − γ k = k u / ( 1 − k u ) ( 1 − 2 k u ) / ( 1 − k u ) = k u 1 − 2 k u ≤ 2 k u 1 − 2 k u = γ 2 k . |\theta'|\le\frac{\gamma_k}{1-\gamma_k}=\frac{ku/(1-ku)}{(1-2ku)/(1-ku)}=\frac{ku}{1-2ku}\le\frac{2ku}{1-2ku}=\gamma_{2k}. ∣ θ ′ ∣ ≤ 1 − γ k γ k = ( 1 − 2 k u ) / ( 1 − k u ) k u / ( 1 − k u ) = 1 − 2 k u k u ≤ 1 − 2 k u 2 k u = γ 2 k . (2) 1 + θ − 1 = θ / ( 1 + θ + 1 ) \sqrt{1+\theta}-1=\theta/(\sqrt{1+\theta}+1) 1 + θ − 1 = θ / ( 1 + θ + 1 ) で、分母は 1 1 1 以上なので ∣ θ ′ ′ ∣ ≤ ∣ θ ∣ ≤ γ k |\theta''|\le|\theta|\le\gamma_k ∣ θ ′′ ∣ ≤ ∣ θ ∣ ≤ γ k です。
∎
ここで目指すのは、ベクトル x \boldsymbol{x} x を「鏡」に映して座標軸 e 1 \boldsymbol{e}_1 e 1 の上に載せること、つまり第 1 成分以外を 0 にすることです。鏡映は長さを変えないので、列ごとにこれを繰り返せば、長さを保ったまま行列の左下を 0 にしていけます。Givens 回転は、鏡の代わりに 2 成分だけを回して 0 を作る道具です。
定義 3.1 (Householder 鏡映 ) ↗
0 ≠ v ∈ R p \boldsymbol{0}\ne\boldsymbol{v}\in\mathbb{R}^p 0 = v ∈ R p について P = I − β v v T P=I-\beta\boldsymbol{v}\boldsymbol{v}^{\mathsf{T}} P = I − β v v T 、β = 2 / ( v T v ) \beta=2/(\boldsymbol{v}^{\mathsf{T}}\boldsymbol{v}) β = 2/ ( v T v ) を Householder 鏡映 (Householder 変換)という。x ∈ R p ∖ { 0 } \boldsymbol{x}\in\mathbb{R}^p\setminus\{\boldsymbol{0}\} x ∈ R p ∖ { 0 } に対して
σ = ∥ x ∥ 2 , v = x + sgn ( x 1 ) σ e 1 , α = − sgn ( x 1 ) σ \sigma=\|\boldsymbol{x}\|_2,\qquad\boldsymbol{v}=\boldsymbol{x}+\operatorname{sgn}(x_1)\,\sigma\,\boldsymbol{e}_1,\qquad\alpha=-\operatorname{sgn}(x_1)\,\sigma σ = ∥ x ∥ 2 , v = x + sgn ( x 1 ) σ e 1 , α = − sgn ( x 1 ) σ とおいたものを x \boldsymbol{x} x の Householder 鏡映 という。
命題 3.2 (Householder 鏡映の性質 ) ✓
任意の v ≠ 0 \boldsymbol{v}\ne\boldsymbol{0} v = 0 について、P = I − β v v T P=I-\beta\boldsymbol{v}\boldsymbol{v}^{\mathsf{T}} P = I − β v v T は対称な直交行列で P 2 = I P^2=I P 2 = I 。P v = − v P\boldsymbol{v}=-\boldsymbol{v} P v = − v 、w ⊥ v \boldsymbol{w}\perp\boldsymbol{v} w ⊥ v なら P w = w P\boldsymbol{w}=\boldsymbol{w} P w = w 。
x ≠ 0 \boldsymbol{x}\ne\boldsymbol{0} x = 0 の Householder 鏡映では ∣ v 1 ∣ = ∣ x 1 ∣ + σ ≥ σ > 0 |v_1|=|x_1|+\sigma\ge\sigma>0 ∣ v 1 ∣ = ∣ x 1 ∣ + σ ≥ σ > 0 、v T v = 2 σ ∣ v 1 ∣ \boldsymbol{v}^{\mathsf{T}}\boldsymbol{v}=2\sigma|v_1| v T v = 2 σ ∣ v 1 ∣ (したがって β = 1 / ( σ ∣ v 1 ∣ ) \beta=1/(\sigma|v_1|) β = 1/ ( σ ∣ v 1 ∣ ) )で、P x = α e 1 P\boldsymbol{x}=\alpha\boldsymbol{e}_1 P x = α e 1 。
証明(命題 3.2) (1) P T = P P^{\mathsf{T}}=P P T = P は明らかです。β v T v = 2 \beta\boldsymbol{v}^{\mathsf{T}}\boldsymbol{v}=2 β v T v = 2 を使うと
P T P = P 2 = I − 2 β v v T + β 2 v ( v T v ) v T = I − 2 β v v T + 2 β v v T = I P^{\mathsf{T}}P=P^2=I-2\beta\boldsymbol{v}\boldsymbol{v}^{\mathsf{T}}+\beta^2\boldsymbol{v}(\boldsymbol{v}^{\mathsf{T}}\boldsymbol{v})\boldsymbol{v}^{\mathsf{T}}=I-2\beta\boldsymbol{v}\boldsymbol{v}^{\mathsf{T}}+2\beta\boldsymbol{v}\boldsymbol{v}^{\mathsf{T}}=I P T P = P 2 = I − 2 β v v T + β 2 v ( v T v ) v T = I − 2 β v v T + 2 β v v T = I で、P P P は直交行列です。P v = v − β ( v T v ) v = − v P\boldsymbol{v}=\boldsymbol{v}-\beta(\boldsymbol{v}^{\mathsf{T}}\boldsymbol{v})\boldsymbol{v}=-\boldsymbol{v} P v = v − β ( v T v ) v = − v 、v T w = 0 \boldsymbol{v}^{\mathsf{T}}\boldsymbol{w}=0 v T w = 0 なら P w = w P\boldsymbol{w}=\boldsymbol{w} P w = w です。
(2) v 1 = x 1 + sgn ( x 1 ) σ v_1=x_1+\operatorname{sgn}(x_1)\sigma v 1 = x 1 + sgn ( x 1 ) σ で、x 1 x_1 x 1 と sgn ( x 1 ) σ \operatorname{sgn}(x_1)\sigma sgn ( x 1 ) σ は同符号(または x 1 = 0 x_1=0 x 1 = 0 )なので ∣ v 1 ∣ = ∣ x 1 ∣ + σ |v_1|=|x_1|+\sigma ∣ v 1 ∣ = ∣ x 1 ∣ + σ です。v T v = σ 2 + 2 ∣ x 1 ∣ σ + σ 2 = 2 σ ( σ + ∣ x 1 ∣ ) = 2 σ ∣ v 1 ∣ \boldsymbol{v}^{\mathsf{T}}\boldsymbol{v}=\sigma^2+2|x_1|\sigma+\sigma^2=2\sigma(\sigma+|x_1|)=2\sigma|v_1| v T v = σ 2 + 2∣ x 1 ∣ σ + σ 2 = 2 σ ( σ + ∣ x 1 ∣ ) = 2 σ ∣ v 1 ∣ 。また v T x = σ 2 + ∣ x 1 ∣ σ = v T v / 2 \boldsymbol{v}^{\mathsf{T}}\boldsymbol{x}=\sigma^2+|x_1|\sigma=\boldsymbol{v}^{\mathsf{T}}\boldsymbol{v}/2 v T x = σ 2 + ∣ x 1 ∣ σ = v T v /2 なので β v T x = 1 \beta\boldsymbol{v}^{\mathsf{T}}\boldsymbol{x}=1 β v T x = 1 、P x = x − v = − sgn ( x 1 ) σ e 1 P\boldsymbol{x}=\boldsymbol{x}-\boldsymbol{v}=-\operatorname{sgn}(x_1)\sigma\boldsymbol{e}_1 P x = x − v = − sgn ( x 1 ) σ e 1 です。
∎
x=(3,4) Px=(−5,0) e₁ の方向 鏡(v に直交) x=(3,4) の Householder 鏡映。v=x+‖x‖e₁=(8,4) に直交する直線(鏡)で x を映すと、−‖x‖e₁=(−5,0) に着地する
P P P は v \boldsymbol{v} v に直交する超平面に関する鏡映です。x \boldsymbol{x} x を ∥ x ∥ 2 e 1 \|\boldsymbol{x}\|_2\boldsymbol{e}_1 ∥ x ∥ 2 e 1 と − ∥ x ∥ 2 e 1 -\|\boldsymbol{x}\|_2\boldsymbol{e}_1 − ∥ x ∥ 2 e 1 のどちらに写すかは自由ですが、v = x − sgn ( x 1 ) σ e 1 \boldsymbol{v}=\boldsymbol{x}-\operatorname{sgn}(x_1)\sigma\boldsymbol{e}_1 v = x − sgn ( x 1 ) σ e 1 を選ぶと、x \boldsymbol{x} x が e 1 \boldsymbol{e}_1 e 1 の方向に近いとき v 1 = x 1 − sgn ( x 1 ) σ v_1=x_1-\operatorname{sgn}(x_1)\sigma v 1 = x 1 − sgn ( x 1 ) σ が近い数の引き算になり、桁落ちで v \boldsymbol{v} v の相対誤差が大きくなります。定義の符号はこれを避ける選び方で、後の 補題 5.1 の証明で ∣ x 1 ∣ + σ |x_1|+\sigma ∣ x 1 ∣ + σ の相対誤差が σ \sigma σ の相対誤差以下になることに効いています。
定義 3.3 (Givens 回転 ) ↗
1 ≤ i < k ≤ p 1\le i<k\le p 1 ≤ i < k ≤ p 、c 2 + s 2 = 1 c^2+s^2=1 c 2 + s 2 = 1 について、単位行列の ( i , i ) , ( i , k ) , ( k , i ) , ( k , k ) (i,i),(i,k),(k,i),(k,k) ( i , i ) , ( i , k ) , ( k , i ) , ( k , k ) 成分を c , s , − s , c c,s,-s,c c , s , − s , c に置き換えた行列 G ( i , k ; c , s ) ∈ R p × p G(i,k;c,s)\in\mathbb{R}^{p\times p} G ( i , k ; c , s ) ∈ R p × p を Givens 回転 という。( a , b ) ≠ ( 0 , 0 ) (a,b)\ne(0,0) ( a , b ) = ( 0 , 0 ) に対しては r = a 2 + b 2 r=\sqrt{a^2+b^2} r = a 2 + b 2 、c = a / r c=a/r c = a / r 、s = b / r s=b/r s = b / r と選ぶ。
命題 3.4 (Givens 回転の性質 ) ✓
G = G ( i , k ; c , s ) G=G(i,k;c,s) G = G ( i , k ; c , s ) は直交行列で、G y G\boldsymbol{y} G y は y \boldsymbol{y} y の第 i i i ・第 k k k 成分だけを ( c y i + s y k , − s y i + c y k ) (cy_i+sy_k,\ -sy_i+cy_k) ( c y i + s y k , − s y i + c y k ) に替える。c = a / r c=a/r c = a / r 、s = b / r s=b/r s = b / r のとき、y i = a y_i=a y i = a 、y k = b y_k=b y k = b なら ( G y ) i = r (G\boldsymbol{y})_i=r ( G y ) i = r 、( G y ) k = 0 (G\boldsymbol{y})_k=0 ( G y ) k = 0 。
証明(命題 3.4) 成分の式は行列の積の定義どおりです。G T G G^{\mathsf{T}}G G T G は第 i i i ・k k k 行列以外で単位行列に一致し、その 2 × 2 2\times2 2 × 2 の部分は
( c − s s c ) ( c s − s c ) = ( c 2 + s 2 0 0 c 2 + s 2 ) = I \begin{pmatrix}c&-s\\s&c\end{pmatrix}\begin{pmatrix}c&s\\-s&c\end{pmatrix}=\begin{pmatrix}c^2+s^2&0\\0&c^2+s^2\end{pmatrix}=I ( c s − s c ) ( c − s s c ) = ( c 2 + s 2 0 0 c 2 + s 2 ) = I です。c a + s b = ( a 2 + b 2 ) / r = r ca+sb=(a^2+b^2)/r=r c a + s b = ( a 2 + b 2 ) / r = r 、− s a + c b = ( − a b + a b ) / r = 0 -sa+cb=(-ab+ab)/r=0 − s a + c b = ( − ab + ab ) / r = 0 です。
∎
Householder 鏡映は 1 回で多くの成分を 0 にし、Givens 回転は 1 成分ずつ、しかも 2 行しか動かさずに 0 にします。密な行列では前者、すでに 0 の多い行列(対角の 1 つ下より下がすべて 0 の Hessenberg 行列や、帯行列)では後者が向いています。
前節の鏡映を第 1 列、第 2 列、…と順に使って A A A の左下を 0 にしていくと、上三角の R R R が残り、掛けた鏡映の積が Q Q Q になります。次の定理は、これがどんな行列でもできること、そして列が一次独立なら Gram–Schmidt の直交化と同じ結果になることを述べます。
定理 4.1 (QR 分解の存在と一意性 ) ✓
任意の A ∈ R m × n A\in\mathbb{R}^{m\times n} A ∈ R m × n について、直交行列 Q ∈ R m × m Q\in\mathbb{R}^{m\times m} Q ∈ R m × m と上三角(i > j i>j i > j で r i j = 0 r_{ij}=0 r ij = 0 )の R ∈ R m × n R\in\mathbb{R}^{m\times n} R ∈ R m × n で A = Q R A=QR A = QR となるものがある。Q Q Q は高々 min ( m , n ) \min(m,n) min ( m , n ) 個の Householder 鏡映の積にとれる。
A A A の列 a 1 , … , a n \boldsymbol{a}_1,\ldots,\boldsymbol{a}_n a 1 , … , a n が一次独立(したがって m ≥ n m\ge n m ≥ n )なら、列が正規直交な Q 1 ∈ R m × n Q_1\in\mathbb{R}^{m\times n} Q 1 ∈ R m × n と対角成分が正の上三角行列 R 1 ∈ R n × n R_1\in\mathbb{R}^{n\times n} R 1 ∈ R n × n で A = Q 1 R 1 A=Q_1R_1 A = Q 1 R 1 となるもの(薄い QR 分解 )がただ 1 組存在する。Q 1 Q_1 Q 1 の第 k k k 列は a 1 , … , a n \boldsymbol{a}_1,\ldots,\boldsymbol{a}_n a 1 , … , a n を Gram–Schmidt の直交化で正規直交化した第 k k k のベクトルであり、r k k = q k T a k r_{kk}=\boldsymbol{q}_k^{\mathsf{T}}\boldsymbol{a}_k r k k = q k T a k である。
証明(定理 4.1) (1) A ( 1 ) = A A^{(1)}=A A ( 1 ) = A とし、k = 1 , … , min ( m , n ) k=1,\ldots,\min(m,n) k = 1 , … , min ( m , n ) について次を行います。A ( k ) A^{(k)} A ( k ) の第 k k k 列の第 k k k 〜m m m 成分を x ∈ R m − k + 1 \boldsymbol{x}\in\mathbb{R}^{m-k+1} x ∈ R m − k + 1 とし、x ≠ 0 \boldsymbol{x}\ne\boldsymbol{0} x = 0 なら P ~ k \widetilde P_k P k を x \boldsymbol{x} x の Householder 鏡映、x = 0 \boldsymbol{x}=\boldsymbol{0} x = 0 なら P ~ k = I \widetilde P_k=I P k = I として、P k = diag ( I k − 1 , P ~ k ) P_k=\operatorname{diag}(I_{k-1},\widetilde P_k) P k = diag ( I k − 1 , P k ) 、A ( k + 1 ) = P k A ( k ) A^{(k+1)}=P_kA^{(k)} A ( k + 1 ) = P k A ( k ) とおきます。命題 3.2 により P k P_k P k は対称な直交行列で、A ( k + 1 ) A^{(k+1)} A ( k + 1 ) の第 k k k 列の第 k + 1 k+1 k + 1 成分以降は 0 です。P k P_k P k は第 1 1 1 〜k − 1 k-1 k − 1 行を変えず、第 j < k j<k j < k 列については第 k k k 行以降が帰納法の仮定により 0 なので、その列を変えません。よって R : = A ( min ( m , n ) + 1 ) R:=A^{(\min(m,n)+1)} R := A ( m i n ( m , n ) + 1 ) は上三角で、Q : = P 1 P 2 ⋯ P min ( m , n ) Q:=P_1P_2\cdots P_{\min(m,n)} Q := P 1 P 2 ⋯ P m i n ( m , n ) とおけば Q T = P min ( m , n ) ⋯ P 1 Q^{\mathsf{T}}=P_{\min(m,n)}\cdots P_1 Q T = P m i n ( m , n ) ⋯ P 1 、R = Q T A R=Q^{\mathsf{T}}A R = Q T A 、A = Q R A=QR A = QR です。
(2) 存在. (1) の A = Q R A=QR A = QR で Q = ( Q 1 Q 2 ) Q=(Q_1\ Q_2) Q = ( Q 1 Q 2 ) (Q 1 Q_1 Q 1 は最初の n n n 列)、R = ( R 1 0 ) R=\binom{R_1}{0} R = ( 0 R 1 ) と分けると A = Q 1 R 1 A=Q_1R_1 A = Q 1 R 1 です。Q Q Q は正則なので rank R 1 = rank R = rank A = n \operatorname{rank}R_1=\operatorname{rank}R=\operatorname{rank}A=n rank R 1 = rank R = rank A = n 、上三角の R 1 R_1 R 1 の行列式は対角成分の積なので対角成分はすべて 0 でありません。D = diag ( sgn r 11 , … , sgn r n n ) D=\operatorname{diag}(\operatorname{sgn}r_{11},\ldots,\operatorname{sgn}r_{nn}) D = diag ( sgn r 11 , … , sgn r nn ) とすると D 2 = I D^2=I D 2 = I で、A = ( Q 1 D ) ( D R 1 ) A=(Q_1D)(DR_1) A = ( Q 1 D ) ( D R 1 ) は対角が正の薄い QR 分解です。
一意性と Gram–Schmidt. A = Q 1 R 1 A=Q_1R_1 A = Q 1 R 1 を任意の薄い QR 分解(対角は正)とし、Q 1 Q_1 Q 1 の列を q k \boldsymbol{q}_k q k とします。a k = ∑ i ≤ k r i k q i \boldsymbol{a}_k=\sum_{i\le k}r_{ik}\boldsymbol{q}_i a k = ∑ i ≤ k r ik q i と r k k ≠ 0 r_{kk}\ne0 r k k = 0 から、k k k についての帰納法で span ( a 1 , … , a k ) = span ( q 1 , … , q k ) \operatorname{span}(\boldsymbol{a}_1,\ldots,\boldsymbol{a}_k)=\operatorname{span}(\boldsymbol{q}_1,\ldots,\boldsymbol{q}_k) span ( a 1 , … , a k ) = span ( q 1 , … , q k ) です。また q k T a k = ∑ i ≤ k r i k q k T q i = r k k > 0 \boldsymbol{q}_k^{\mathsf{T}}\boldsymbol{a}_k=\sum_{i\le k}r_{ik}\boldsymbol{q}_k^{\mathsf{T}}\boldsymbol{q}_i=r_{kk}>0 q k T a k = ∑ i ≤ k r ik q k T q i = r k k > 0 です。したがって q 1 , … , q n \boldsymbol{q}_1,\ldots,\boldsymbol{q}_n q 1 , … , q n は Gram–Schmidt の直交化(定理 6.1)[内積空間とグラム・シュミット直交化] の条件 1・2・3 を満たし、同定理の一意性の主張により Gram–Schmidt の出力と一致します。R 1 = Q 1 T A R_1=Q_1^{\mathsf{T}}A R 1 = Q 1 T A も決まるので、薄い QR 分解は一意です。
∎
Householder QR の算法. 実際の計算では Q Q Q を作らず、鏡映 P k P_k P k をベクトル v k \boldsymbol{v}_k v k と β k \beta_k β k で持ち、残りの列 B B B (第 k k k 〜m m m 行、第 k + 1 k+1 k + 1 〜n n n 列)に P ~ k B = B − ( β k v k ) ( v k T B ) \widetilde P_kB=B-(\beta_k\boldsymbol{v}_k)(\boldsymbol{v}_k^{\mathsf{T}}B) P k B = B − ( β k v k ) ( v k T B ) と作用させます。第 k k k 列そのものは計算せず、対角に α k \alpha_k α k を書き、その下に 0 を書きます(命題 3.2 の 2)。
命題 4.2 (Householder QR の演算量 ) ✓
m ≥ n m\ge n m ≥ n とし、浮動小数の加減乗除を 1 回 1 演算と数える。上の算法で鏡映を残りの列に作用させる演算は、p × q p\times q p × q の行列 B B B に B − ( β v ) ( v T B ) B-(\beta\boldsymbol{v})(\boldsymbol{v}^{\mathsf{T}}B) B − ( β v ) ( v T B ) を 4 p q 4pq 4 pq 回で計算するとき合計
∑ k = 1 n 4 ( m − k + 1 ) ( n − k ) = 2 m n 2 − 2 3 n 3 − 2 m n + 2 n 2 − 4 3 n \sum_{k=1}^{n}4(m-k+1)(n-k)=2mn^2-\frac23n^3-2mn+2n^2-\frac43n k = 1 ∑ n 4 ( m − k + 1 ) ( n − k ) = 2 m n 2 − 3 2 n 3 − 2 mn + 2 n 2 − 3 4 n 回であり、鏡映のベクトルの計算は合計 O ( m n ) O(mn) O ( mn ) 回である。したがって全体は 2 m n 2 − 2 3 n 3 + O ( m n ) 2mn^2-\frac23n^3+O(mn) 2 m n 2 − 3 2 n 3 + O ( mn ) である。
証明(命題 4.2) w T = v T B \boldsymbol{w}^{\mathsf{T}}=\boldsymbol{v}^{\mathsf{T}}B w T = v T B は q q q 個の長さ p p p の内積で q ( 2 p − 1 ) q(2p-1) q ( 2 p − 1 ) 回、β v \beta\boldsymbol{v} β v は p p p 回、B − ( β v ) w T B-(\beta\boldsymbol{v})\boldsymbol{w}^{\mathsf{T}} B − ( β v ) w T は 2 p q 2pq 2 pq 回で、主要部は 4 p q 4pq 4 pq です(p p p と q q q の 1 次の項は O ( p + q ) O(p+q) O ( p + q ) で、k k k について足しても O ( m n ) O(mn) O ( mn ) )。第 k k k 段では p = m − k + 1 p=m-k+1 p = m − k + 1 、q = n − k q=n-k q = n − k です。j = n − k j=n-k j = n − k (0 ≤ j ≤ n − 1 0\le j\le n-1 0 ≤ j ≤ n − 1 )とおくと p = m − n + 1 + j p=m-n+1+j p = m − n + 1 + j で
∑ j = 0 n − 1 4 ( m − n + 1 + j ) j = 2 ( m − n + 1 ) n ( n − 1 ) + 2 3 n ( n − 1 ) ( 2 n − 1 ) \sum_{j=0}^{n-1}4(m-n+1+j)j=2(m-n+1)n(n-1)+\frac23n(n-1)(2n-1) j = 0 ∑ n − 1 4 ( m − n + 1 + j ) j = 2 ( m − n + 1 ) n ( n − 1 ) + 3 2 n ( n − 1 ) ( 2 n − 1 ) を展開すると主張の式です。m ≥ n m\ge n m ≥ n なので − 2 m n + 2 n 2 − 4 3 n = O ( m n ) -2mn+2n^2-\frac43n=O(mn) − 2 mn + 2 n 2 − 3 4 n = O ( mn ) です。v k \boldsymbol{v}_k v k ・β k \beta_k β k の計算は第 k k k 段で O ( m − k + 1 ) O(m-k+1) O ( m − k + 1 ) 回、合計 O ( m n ) O(mn) O ( mn ) です。
∎
m = n m=n m = n なら 4 3 n 3 \frac43n^3 3 4 n 3 で、LU 分解 (2 3 n 3 \frac23n^3 3 2 n 3 )の 2 倍です。Q Q Q を明示的に作るには、さらに鏡映を単位行列に作用させる O ( m 2 n ) O(m^2n) O ( m 2 n ) の手間がかかります。最小二乗問題では Q T b Q^{\mathsf{T}}\boldsymbol{b} Q T b だけが要るので、Q Q Q を作らずに鏡映を b \boldsymbol{b} b に作用させます。
例 4.3 (Hessenberg 行列の QR を Givens 回転で O(n²) で行う )
H ∈ R n × n H\in\mathbb{R}^{n\times n} H ∈ R n × n を上 Hessenberg 行列(i > j + 1 i>j+1 i > j + 1 で h i j = 0 h_{ij}=0 h ij = 0 )とします。k = 1 , … , n − 1 k=1,\ldots,n-1 k = 1 , … , n − 1 の順に、第 k k k ・k + 1 k+1 k + 1 行に Givens 回転 G k = G ( k , k + 1 ; c k , s k ) G_k=G(k,k+1;c_k,s_k) G k = G ( k , k + 1 ; c k , s k ) を掛けて ( k + 1 , k ) (k+1,k) ( k + 1 , k ) 成分を 0 にします。第 k k k 段の時点で第 k k k 列の第 k + 2 k+2 k + 2 行以降はもとから 0、それより左の列の第 k k k ・k + 1 k+1 k + 1 行は 0 なので、回転は第 k k k 〜n n n 列の 2 行だけを動かし、1 列あたり乗算 4 回・加算 2 回の 6 演算です。合計 ∑ k = 1 n − 1 6 ( n − k + 1 ) = 3 n 2 + O ( n ) \sum_{k=1}^{n-1}6(n-k+1)=3n^2+O(n) ∑ k = 1 n − 1 6 ( n − k + 1 ) = 3 n 2 + O ( n ) 演算で、G n − 1 ⋯ G 1 H = R G_{n-1}\cdots G_1H=R G n − 1 ⋯ G 1 H = R が上三角になります。Householder 鏡映をそのまま使うと 4 3 n 3 \frac43n^3 3 4 n 3 演算かかるので、0 の構造を使う Givens 回転が有利です。この計算は QR 法(固有値計算)の 1 反復の中身です。
x ∈ F p \boldsymbol{x}\in\mathbb{F}^p x ∈ F p 、x ≠ 0 \boldsymbol{x}\ne\boldsymbol{0} x = 0 に対し、Householder 鏡映を次のように計算します( ^ \widehat{\ } は計算値)。
s ^ = f l ( x T x ) , σ ^ = f l ( s ^ ) , v ^ 1 = f l ( x 1 + sgn ( x 1 ) σ ^ ) , v ^ i = x i ( i ≥ 2 ) , β ^ = f l ( 1 / f l ( σ ^ ∣ v ^ 1 ∣ ) ) , α ^ = − sgn ( x 1 ) σ ^ . \widehat s=\mathrm{fl}(\boldsymbol{x}^{\mathsf{T}}\boldsymbol{x}),\quad\widehat\sigma=\mathrm{fl}\bigl(\sqrt{\widehat s}\bigr),\quad\widehat v_1=\mathrm{fl}\bigl(x_1+\operatorname{sgn}(x_1)\widehat\sigma\bigr),\quad\widehat v_i=x_i\ (i\ge2),\quad\widehat\beta=\mathrm{fl}\bigl(1/\mathrm{fl}(\widehat\sigma|\widehat v_1|)\bigr),\quad\widehat\alpha=-\operatorname{sgn}(x_1)\widehat\sigma. s = fl ( x T x ) , σ = fl ( s ) , v 1 = fl ( x 1 + sgn ( x 1 ) σ ) , v i = x i ( i ≥ 2 ) , β = fl ( 1/ fl ( σ ∣ v 1 ∣ ) ) , α = − sgn ( x 1 ) σ .
内積 s ^ \widehat s s は先頭から順に足します。b ∈ F p \boldsymbol{b}\in\mathbb{F}^p b ∈ F p への作用は
t ^ = f l ( v ^ T b ) , τ ^ = f l ( β ^ t ^ ) , y ^ i = f l ( b i − f l ( τ ^ v ^ i ) ) \widehat t=\mathrm{fl}(\widehat{\boldsymbol{v}}^{\mathsf{T}}\boldsymbol{b}),\quad\widehat\tau=\mathrm{fl}(\widehat\beta\,\widehat t),\quad\widehat y_i=\mathrm{fl}\bigl(b_i-\mathrm{fl}(\widehat\tau\,\widehat v_i)\bigr) t = fl ( v T b ) , τ = fl ( β t ) , y i = fl ( b i − fl ( τ v i ) )
で計算します。比べる相手は、同じ x \boldsymbol{x} x から厳密に 作った鏡映 P P P (定義 3.1 )です。
次の補題は、計算した鏡映が厳密な鏡映からどれだけずれるかを測ります。証明は、各演算に標準モデルの誤差因子 ( 1 + δ ) (1+\delta) ( 1 + δ ) を掛けて追いかけ、現れる γ \gamma γ の添字を足し合わせていく作業です。添字 14 p + 29 14p+29 14 p + 29 はその合計で、数そのものより「p p p の 1 次式で済む」ことが大事です。
補題 5.1 (鏡映 1 回の丸め誤差 ) ✓
p ≥ 1 p\ge1 p ≥ 1 、43 p u < 1 / 2 43pu<1/2 43 p u < 1/2 とし、上の計算でアンダーフロー・オーバーフローが起きないとする。v , β , α , P \boldsymbol{v},\beta,\alpha,P v , β , α , P を x \boldsymbol{x} x から厳密に作った量とする。
v ^ 1 = v 1 ( 1 + θ v ) \widehat v_1=v_1(1+\theta_v) v 1 = v 1 ( 1 + θ v ) 、∣ θ v ∣ ≤ γ p + 2 |\theta_v|\le\gamma_{p+2} ∣ θ v ∣ ≤ γ p + 2 、β ^ = β ( 1 + θ β ) \widehat\beta=\beta(1+\theta_\beta) β = β ( 1 + θ β ) 、∣ θ β ∣ ≤ γ 4 p + 8 |\theta_\beta|\le\gamma_{4p+8} ∣ θ β ∣ ≤ γ 4 p + 8 。
任意の b ∈ F p \boldsymbol{b}\in\mathbb{F}^p b ∈ F p について ∥ y ^ − P b ∥ 2 ≤ γ 14 p + 29 ∥ b ∥ 2 \|\widehat{\boldsymbol{y}}-P\boldsymbol{b}\|_2\le\gamma_{14p+29}\|\boldsymbol{b}\|_2 ∥ y − P b ∥ 2 ≤ γ 14 p + 29 ∥ b ∥ 2 。
∥ α ^ e 1 − P x ∥ 2 ≤ γ p + 1 ∥ x ∥ 2 \|\widehat\alpha\boldsymbol{e}_1-P\boldsymbol{x}\|_2\le\gamma_{p+1}\|\boldsymbol{x}\|_2 ∥ α e 1 − P x ∥ 2 ≤ γ p + 1 ∥ x ∥ 2 。
証明(補題 5.1) 以下、γ \gamma γ の和・積の評価には γₙ の計算規則(補題 3.2)[浮動小数点数と丸め誤差] を、∣ δ ∣ ≤ u ≤ γ 1 |\delta|\le u\le\gamma_1 ∣ δ ∣ ≤ u ≤ γ 1 の形の丸めには 四則の標準モデル(系 3.1)[浮動小数点数と丸め誤差] を断らずに使います。現れる添字はすべて 43 p 43p 43 p 以下なので、規則の前提 k u < 1 ku<1 k u < 1 は満たされます。
σ ^ \widehat\sigma σ . 内積の丸め誤差(定理 3.3)[浮動小数と区間演算] により s ^ = ∑ i x i 2 ( 1 + θ ( i ) ) \widehat s=\sum_ix_i^2(1+\theta^{(i)}) s = ∑ i x i 2 ( 1 + θ ( i ) ) 、∣ θ ( i ) ∣ ≤ γ p |\theta^{(i)}|\le\gamma_p ∣ θ ( i ) ∣ ≤ γ p です。各項が非負なので s ^ = σ 2 ( 1 + θ s ) \widehat s=\sigma^2(1+\theta_s) s = σ 2 ( 1 + θ s ) 、θ s = ∑ i x i 2 θ ( i ) / σ 2 \theta_s=\sum_ix_i^2\theta^{(i)}/\sigma^2 θ s = ∑ i x i 2 θ ( i ) / σ 2 、∣ θ s ∣ ≤ γ p |\theta_s|\le\gamma_p ∣ θ s ∣ ≤ γ p と書けます。補題 2.2 の 2 で 1 + θ s = 1 + η \sqrt{1+\theta_s}=1+\eta 1 + θ s = 1 + η 、∣ η ∣ ≤ γ p |\eta|\le\gamma_p ∣ η ∣ ≤ γ p なので、σ ^ = σ ( 1 + η ) ( 1 + δ ) = σ ( 1 + θ σ ) \widehat\sigma=\sigma(1+\eta)(1+\delta)=\sigma(1+\theta_\sigma) σ = σ ( 1 + η ) ( 1 + δ ) = σ ( 1 + θ σ ) 、∣ θ σ ∣ ≤ γ p + 1 |\theta_\sigma|\le\gamma_{p+1} ∣ θ σ ∣ ≤ γ p + 1 です。
(3). 命題 3.2 の 2 より P x = α e 1 P\boldsymbol{x}=\alpha\boldsymbol{e}_1 P x = α e 1 で、∣ α ^ − α ∣ = ∣ σ ^ − σ ∣ ≤ γ p + 1 σ = γ p + 1 ∥ x ∥ 2 |\widehat\alpha-\alpha|=|\widehat\sigma-\sigma|\le\gamma_{p+1}\sigma=\gamma_{p+1}\|\boldsymbol{x}\|_2 ∣ α − α ∣ = ∣ σ − σ ∣ ≤ γ p + 1 σ = γ p + 1 ∥ x ∥ 2 です。
(1). sgn ( x 1 ) x 1 = ∣ x 1 ∣ \operatorname{sgn}(x_1)x_1=|x_1| sgn ( x 1 ) x 1 = ∣ x 1 ∣ なので v ^ 1 = sgn ( x 1 ) ( ∣ x 1 ∣ + σ + σ θ σ ) ( 1 + δ 1 ) \widehat v_1=\operatorname{sgn}(x_1)\bigl(|x_1|+\sigma+\sigma\theta_\sigma\bigr)(1+\delta_1) v 1 = sgn ( x 1 ) ( ∣ x 1 ∣ + σ + σ θ σ ) ( 1 + δ 1 ) です。∣ x 1 ∣ + σ + σ θ σ = ( ∣ x 1 ∣ + σ ) ( 1 + θ ′ ) |x_1|+\sigma+\sigma\theta_\sigma=(|x_1|+\sigma)(1+\theta') ∣ x 1 ∣ + σ + σ θ σ = ( ∣ x 1 ∣ + σ ) ( 1 + θ ′ ) 、θ ′ = σ θ σ / ( ∣ x 1 ∣ + σ ) \theta'=\sigma\theta_\sigma/(|x_1|+\sigma) θ ′ = σ θ σ / ( ∣ x 1 ∣ + σ ) とおくと ∣ θ ′ ∣ ≤ ∣ θ σ ∣ ≤ γ p + 1 |\theta'|\le|\theta_\sigma|\le\gamma_{p+1} ∣ θ ′ ∣ ≤ ∣ θ σ ∣ ≤ γ p + 1 で(ここで符号の選び方が効く)、v 1 = sgn ( x 1 ) ( ∣ x 1 ∣ + σ ) v_1=\operatorname{sgn}(x_1)(|x_1|+\sigma) v 1 = sgn ( x 1 ) ( ∣ x 1 ∣ + σ ) から v ^ 1 = v 1 ( 1 + θ ′ ) ( 1 + δ 1 ) = v 1 ( 1 + θ v ) \widehat v_1=v_1(1+\theta')(1+\delta_1)=v_1(1+\theta_v) v 1 = v 1 ( 1 + θ ′ ) ( 1 + δ 1 ) = v 1 ( 1 + θ v ) 、∣ θ v ∣ ≤ γ p + 2 |\theta_v|\le\gamma_{p+2} ∣ θ v ∣ ≤ γ p + 2 です。次に f l ( σ ^ ∣ v ^ 1 ∣ ) = σ ^ ∣ v ^ 1 ∣ ( 1 + δ 2 ) \mathrm{fl}(\widehat\sigma|\widehat v_1|)=\widehat\sigma|\widehat v_1|(1+\delta_2) fl ( σ ∣ v 1 ∣ ) = σ ∣ v 1 ∣ ( 1 + δ 2 ) 、β ^ = ( 1 + δ 3 ) / ( σ ^ ∣ v ^ 1 ∣ ( 1 + δ 2 ) ) \widehat\beta=(1+\delta_3)/(\widehat\sigma|\widehat v_1|(1+\delta_2)) β = ( 1 + δ 3 ) / ( σ ∣ v 1 ∣ ( 1 + δ 2 )) で、β = 1 / ( σ ∣ v 1 ∣ ) \beta=1/(\sigma|v_1|) β = 1/ ( σ ∣ v 1 ∣ ) (命題 3.2 の 2)を使うと
β ^ = β ( 1 + δ 3 ) ( 1 + δ 2 ) − 1 ( 1 + θ σ ) − 1 ( 1 + θ v ) − 1 \widehat\beta=\beta\,(1+\delta_3)(1+\delta_2)^{-1}(1+\theta_\sigma)^{-1}(1+\theta_v)^{-1} β = β ( 1 + δ 3 ) ( 1 + δ 2 ) − 1 ( 1 + θ σ ) − 1 ( 1 + θ v ) − 1 です。逆数の因子は、( 1 + δ 2 ) − 1 = 1 − δ 2 / ( 1 + δ 2 ) (1+\delta_2)^{-1}=1-\delta_2/(1+\delta_2) ( 1 + δ 2 ) − 1 = 1 − δ 2 / ( 1 + δ 2 ) で ∣ δ 2 ∣ / ( 1 − u ) ≤ γ 1 |\delta_2|/(1-u)\le\gamma_1 ∣ δ 2 ∣/ ( 1 − u ) ≤ γ 1 なので 1 + θ 1 1+\theta_1 1 + θ 1 、残りの 2 つは 補題 2.2 の 1 でそれぞれ 1 + θ 2 p + 2 1+\theta_{2p+2} 1 + θ 2 p + 2 、1 + θ 2 p + 4 1+\theta_{2p+4} 1 + θ 2 p + 4 となり、積は 1 + θ β 1+\theta_\beta 1 + θ β 、∣ θ β ∣ ≤ γ 1 + 1 + ( 2 p + 2 ) + ( 2 p + 4 ) = γ 4 p + 8 |\theta_\beta|\le\gamma_{1+1+(2p+2)+(2p+4)}=\gamma_{4p+8} ∣ θ β ∣ ≤ γ 1 + 1 + ( 2 p + 2 ) + ( 2 p + 4 ) = γ 4 p + 8 です。
(2). 厳密な値を T = v T b T=\boldsymbol{v}^{\mathsf{T}}\boldsymbol{b} T = v T b 、z = β T v \boldsymbol{z}=\beta T\boldsymbol{v} z = β T v とおくと P b = b − z P\boldsymbol{b}=\boldsymbol{b}-\boldsymbol{z} P b = b − z です。
(i) v ^ \widehat{\boldsymbol{v}} v は v \boldsymbol{v} v と第 1 成分だけが違い、∣ v ^ ∣ ≤ ( 1 + γ p + 2 ) ∣ v ∣ |\widehat{\boldsymbol{v}}|\le(1+\gamma_{p+2})|\boldsymbol{v}| ∣ v ∣ ≤ ( 1 + γ p + 2 ) ∣ v ∣ です。内積の丸め誤差から t ^ = v ^ T b + e \widehat t=\widehat{\boldsymbol{v}}^{\mathsf{T}}\boldsymbol{b}+e t = v T b + e 、∣ e ∣ ≤ γ p ∣ v ^ ∣ T ∣ b ∣ |e|\le\gamma_p|\widehat{\boldsymbol{v}}|^{\mathsf{T}}|\boldsymbol{b}| ∣ e ∣ ≤ γ p ∣ v ∣ T ∣ b ∣ で、v ^ T b = T + θ v v 1 b 1 \widehat{\boldsymbol{v}}^{\mathsf{T}}\boldsymbol{b}=T+\theta_vv_1b_1 v T b = T + θ v v 1 b 1 なので t ^ = T + e ′ \widehat t=T+e' t = T + e ′ 、
∣ e ′ ∣ ≤ ( γ p + 2 + γ p ( 1 + γ p + 2 ) ) ∣ v ∣ T ∣ b ∣ ≤ γ 2 p + 2 ∥ v ∥ 2 ∥ b ∥ 2 |e'|\le\bigl(\gamma_{p+2}+\gamma_p(1+\gamma_{p+2})\bigr)|\boldsymbol{v}|^{\mathsf{T}}|\boldsymbol{b}|\le\gamma_{2p+2}\|\boldsymbol{v}\|_2\|\boldsymbol{b}\|_2 ∣ e ′ ∣ ≤ ( γ p + 2 + γ p ( 1 + γ p + 2 ) ) ∣ v ∣ T ∣ b ∣ ≤ γ 2 p + 2 ∥ v ∥ 2 ∥ b ∥ 2 です(最後は Cauchy–Schwarz の不等式)。
(ii) τ ^ = β ^ t ^ ( 1 + δ 4 ) = β ( 1 + θ a ) ( T + e ′ ) \widehat\tau=\widehat\beta\,\widehat t(1+\delta_4)=\beta(1+\theta_a)(T+e') τ = β t ( 1 + δ 4 ) = β ( 1 + θ a ) ( T + e ′ ) 、∣ θ a ∣ ≤ γ 4 p + 9 |\theta_a|\le\gamma_{4p+9} ∣ θ a ∣ ≤ γ 4 p + 9 です。q ^ i : = f l ( τ ^ v ^ i ) = τ ^ v ^ i ( 1 + δ 5 , i ) \widehat q_i:=\mathrm{fl}(\widehat\tau\widehat v_i)=\widehat\tau\widehat v_i(1+\delta_{5,i}) q i := fl ( τ v i ) = τ v i ( 1 + δ 5 , i ) で、v ^ i ( 1 + δ 5 , i ) = v i + f i \widehat v_i(1+\delta_{5,i})=v_i+f_i v i ( 1 + δ 5 , i ) = v i + f i と書くと ∣ f i ∣ ≤ γ p + 3 ∣ v i ∣ |f_i|\le\gamma_{p+3}|v_i| ∣ f i ∣ ≤ γ p + 3 ∣ v i ∣ 、したがって ∥ f ∥ 2 ≤ γ p + 3 ∥ v ∥ 2 \|\boldsymbol{f}\|_2\le\gamma_{p+3}\|\boldsymbol{v}\|_2 ∥ f ∥ 2 ≤ γ p + 3 ∥ v ∥ 2 です。よって q ^ = β ( 1 + θ a ) ( T + e ′ ) ( v + f ) \widehat{\boldsymbol{q}}=\beta(1+\theta_a)(T+e')(\boldsymbol{v}+\boldsymbol{f}) q = β ( 1 + θ a ) ( T + e ′ ) ( v + f ) です。
(iii) ( 1 + θ a ) ( T + e ′ ) ( v + f ) − T v (1+\theta_a)(T+e')(\boldsymbol{v}+\boldsymbol{f})-T\boldsymbol{v} ( 1 + θ a ) ( T + e ′ ) ( v + f ) − T v を展開すると、θ a , e ′ , f \theta_a,e',\boldsymbol{f} θ a , e ′ , f の少なくとも 1 つを含む 7 項の和です。∣ T ∣ ≤ ∥ v ∥ 2 ∥ b ∥ 2 |T|\le\|\boldsymbol{v}\|_2\|\boldsymbol{b}\|_2 ∣ T ∣ ≤ ∥ v ∥ 2 ∥ b ∥ 2 、∣ e ′ ∣ ≤ γ 2 p + 2 ∥ v ∥ 2 ∥ b ∥ 2 |e'|\le\gamma_{2p+2}\|\boldsymbol{v}\|_2\|\boldsymbol{b}\|_2 ∣ e ′ ∣ ≤ γ 2 p + 2 ∥ v ∥ 2 ∥ b ∥ 2 、∥ f ∥ 2 ≤ γ p + 3 ∥ v ∥ 2 \|\boldsymbol{f}\|_2\le\gamma_{p+3}\|\boldsymbol{v}\|_2 ∥ f ∥ 2 ≤ γ p + 3 ∥ v ∥ 2 を各項に使って足すと
∥ q ^ − z ∥ 2 ≤ β ∥ v ∥ 2 2 ∥ b ∥ 2 [ ( 1 + γ 4 p + 9 ) ( 1 + γ 2 p + 2 ) ( 1 + γ p + 3 ) − 1 ] ≤ 2 γ 7 p + 14 ∥ b ∥ 2 \|\widehat{\boldsymbol{q}}-\boldsymbol{z}\|_2\le\beta\|\boldsymbol{v}\|_2^2\|\boldsymbol{b}\|_2\bigl[(1+\gamma_{4p+9})(1+\gamma_{2p+2})(1+\gamma_{p+3})-1\bigr]\le2\gamma_{7p+14}\|\boldsymbol{b}\|_2 ∥ q − z ∥ 2 ≤ β ∥ v ∥ 2 2 ∥ b ∥ 2 [ ( 1 + γ 4 p + 9 ) ( 1 + γ 2 p + 2 ) ( 1 + γ p + 3 ) − 1 ] ≤ 2 γ 7 p + 14 ∥ b ∥ 2 です(β ∥ v ∥ 2 2 = 2 \beta\|\boldsymbol{v}\|_2^2=2 β ∥ v ∥ 2 2 = 2 )。
(iv) y ^ i = ( b i − q ^ i ) ( 1 + δ 6 , i ) \widehat y_i=(b_i-\widehat q_i)(1+\delta_{6,i}) y i = ( b i − q i ) ( 1 + δ 6 , i ) なので ∥ y ^ − ( b − q ^ ) ∥ 2 ≤ u ∥ b − q ^ ∥ 2 \|\widehat{\boldsymbol{y}}-(\boldsymbol{b}-\widehat{\boldsymbol{q}})\|_2\le u\|\boldsymbol{b}-\widehat{\boldsymbol{q}}\|_2 ∥ y − ( b − q ) ∥ 2 ≤ u ∥ b − q ∥ 2 です。b − q ^ = P b − ( q ^ − z ) \boldsymbol{b}-\widehat{\boldsymbol{q}}=P\boldsymbol{b}-(\widehat{\boldsymbol{q}}-\boldsymbol{z}) b − q = P b − ( q − z ) と ∥ P b ∥ 2 = ∥ b ∥ 2 \|P\boldsymbol{b}\|_2=\|\boldsymbol{b}\|_2 ∥ P b ∥ 2 = ∥ b ∥ 2 (命題 3.2 の 1)から
∥ y ^ − P b ∥ 2 ≤ u ∥ b ∥ 2 + ( 1 + u ) ∥ q ^ − z ∥ 2 ≤ ( u + ( 1 + u ) γ 14 p + 28 ) ∥ b ∥ 2 ≤ γ 14 p + 29 ∥ b ∥ 2 \|\widehat{\boldsymbol{y}}-P\boldsymbol{b}\|_2\le u\|\boldsymbol{b}\|_2+(1+u)\|\widehat{\boldsymbol{q}}-\boldsymbol{z}\|_2\le\bigl(u+(1+u)\gamma_{14p+28}\bigr)\|\boldsymbol{b}\|_2\le\gamma_{14p+29}\|\boldsymbol{b}\|_2 ∥ y − P b ∥ 2 ≤ u ∥ b ∥ 2 + ( 1 + u ) ∥ q − z ∥ 2 ≤ ( u + ( 1 + u ) γ 14 p + 28 ) ∥ b ∥ 2 ≤ γ 14 p + 29 ∥ b ∥ 2 です(2 γ 7 p + 14 ≤ γ 14 p + 28 2\gamma_{7p+14}\le\gamma_{14p+28} 2 γ 7 p + 14 ≤ γ 14 p + 28 )。
∎
定数 14 p + 29 14p+29 14 p + 29 は評価を簡単にするための粗いもので、丁寧に数えれば小さくできます。大事なのは、誤差が b \boldsymbol{b} b の大きさに比例し、p p p の 1 次でしか増えないことです。
補題 5.2 (誤差を含む直交変換の積み重ね ) ✓
Q 1 , … , Q r ∈ R p × p Q_1,\ldots,Q_r\in\mathbb{R}^{p\times p} Q 1 , … , Q r ∈ R p × p を直交行列、δ ≥ 0 \delta\ge0 δ ≥ 0 とし、y 0 = b \boldsymbol{y}_0=\boldsymbol{b} y 0 = b と y 1 , … , y r \boldsymbol{y}_1,\ldots,\boldsymbol{y}_r y 1 , … , y r が ∥ y k − Q k y k − 1 ∥ 2 ≤ δ ∥ y k − 1 ∥ 2 \|\boldsymbol{y}_k-Q_k\boldsymbol{y}_{k-1}\|_2\le\delta\|\boldsymbol{y}_{k-1}\|_2 ∥ y k − Q k y k − 1 ∥ 2 ≤ δ ∥ y k − 1 ∥ 2 を満たすとする。このとき
∥ y r − Q r ⋯ Q 1 b ∥ 2 ≤ ( ( 1 + δ ) r − 1 ) ∥ b ∥ 2 \|\boldsymbol{y}_r-Q_r\cdots Q_1\boldsymbol{b}\|_2\le\bigl((1+\delta)^r-1\bigr)\|\boldsymbol{b}\|_2 ∥ y r − Q r ⋯ Q 1 b ∥ 2 ≤ ( ( 1 + δ ) r − 1 ) ∥ b ∥ 2 であり、δ ≤ γ k \delta\le\gamma_k δ ≤ γ k 、r k u < 1 rku<1 r k u < 1 なら右辺は γ r k ∥ b ∥ 2 \gamma_{rk}\|\boldsymbol{b}\|_2 γ r k ∥ b ∥ 2 以下である。
証明(補題 5.2) ∥ Q k y k − 1 ∥ 2 = ∥ y k − 1 ∥ 2 \|Q_k\boldsymbol{y}_{k-1}\|_2=\|\boldsymbol{y}_{k-1}\|_2 ∥ Q k y k − 1 ∥ 2 = ∥ y k − 1 ∥ 2 なので ∥ y k ∥ 2 ≤ ( 1 + δ ) ∥ y k − 1 ∥ 2 \|\boldsymbol{y}_k\|_2\le(1+\delta)\|\boldsymbol{y}_{k-1}\|_2 ∥ y k ∥ 2 ≤ ( 1 + δ ) ∥ y k − 1 ∥ 2 、帰納的に ∥ y k ∥ 2 ≤ ( 1 + δ ) k ∥ b ∥ 2 \|\boldsymbol{y}_k\|_2\le(1+\delta)^k\|\boldsymbol{b}\|_2 ∥ y k ∥ 2 ≤ ( 1 + δ ) k ∥ b ∥ 2 です。d k = y k − Q k ⋯ Q 1 b \boldsymbol{d}_k=\boldsymbol{y}_k-Q_k\cdots Q_1\boldsymbol{b} d k = y k − Q k ⋯ Q 1 b とおくと d k = ( y k − Q k y k − 1 ) + Q k d k − 1 \boldsymbol{d}_k=(\boldsymbol{y}_k-Q_k\boldsymbol{y}_{k-1})+Q_k\boldsymbol{d}_{k-1} d k = ( y k − Q k y k − 1 ) + Q k d k − 1 なので
∥ d k ∥ 2 ≤ δ ( 1 + δ ) k − 1 ∥ b ∥ 2 + ∥ d k − 1 ∥ 2 , ∥ d r ∥ 2 ≤ ∑ k = 1 r δ ( 1 + δ ) k − 1 ∥ b ∥ 2 = ( ( 1 + δ ) r − 1 ) ∥ b ∥ 2 \|\boldsymbol{d}_k\|_2\le\delta(1+\delta)^{k-1}\|\boldsymbol{b}\|_2+\|\boldsymbol{d}_{k-1}\|_2,\qquad\|\boldsymbol{d}_r\|_2\le\sum_{k=1}^r\delta(1+\delta)^{k-1}\|\boldsymbol{b}\|_2=\bigl((1+\delta)^r-1\bigr)\|\boldsymbol{b}\|_2 ∥ d k ∥ 2 ≤ δ ( 1 + δ ) k − 1 ∥ b ∥ 2 + ∥ d k − 1 ∥ 2 , ∥ d r ∥ 2 ≤ k = 1 ∑ r δ ( 1 + δ ) k − 1 ∥ b ∥ 2 = ( ( 1 + δ ) r − 1 ) ∥ b ∥ 2 です(d 0 = 0 \boldsymbol{d}_0=\boldsymbol{0} d 0 = 0 )。後半は、γₙ の計算規則(補題 3.2)[浮動小数点数と丸め誤差] の 2 を繰り返して ( 1 + γ k ) r ≤ 1 + γ r k (1+\gamma_k)^r\le1+\gamma_{rk} ( 1 + γ k ) r ≤ 1 + γ r k とすればよいです。
∎
算法(浮動小数). A ∈ F m × n A\in\mathbb{F}^{m\times n} A ∈ F m × n 、m ≥ n m\ge n m ≥ n とし、k = 1 , … , n k=1,\ldots,n k = 1 , … , n について、現在の行列の第 k k k 列の第 k k k 〜m m m 成分を x \boldsymbol{x} x とします。x = 0 \boldsymbol{x}=\boldsymbol{0} x = 0 なら何もしません。そうでなければ 5.1 の方法で v ^ , β ^ , α ^ \widehat{\boldsymbol{v}},\widehat\beta,\widehat\alpha v , β , α を計算し、第 k + 1 k+1 k + 1 〜n n n 列の第 k k k 〜m m m 行に鏡映を作用させ、第 k k k 列の第 k k k 成分を α ^ \widehat\alpha α 、第 k + 1 k+1 k + 1 〜m m m 成分を 0 0 0 とします。最後の行列を R ^ \widehat R R とします。各段で使った x \boldsymbol{x} x (計算値)から厳密に 作った鏡映を P ~ k \widetilde P_k P k (x = 0 \boldsymbol{x}=\boldsymbol{0} x = 0 なら I I I )、P k = diag ( I k − 1 , P ~ k ) P_k=\operatorname{diag}(I_{k-1},\widetilde P_k) P k = diag ( I k − 1 , P k ) とします。
各段の誤差は 5.1 の補題で、段を重ねたときの誤差の増え方は 5.2 の補題で抑えられます。次の定理は、この 2 つを列ごとに組み合わせたものです。
定理 5.3 (Householder QR の後退安定性 ) ✓
上の算法でアンダーフロー・オーバーフローが起きず、86 m n u < 1 86mnu<1 86 mn u < 1 とする。Q = P 1 P 2 ⋯ P n Q=P_1P_2\cdots P_n Q = P 1 P 2 ⋯ P n は直交行列で、
A + Δ A = Q R ^ A+\Delta A=Q\widehat R A + Δ A = Q R 、∥ Δ a j ∥ 2 ≤ γ 43 m n ∥ a j ∥ 2 \|\Delta\boldsymbol{a}_j\|_2\le\gamma_{43mn}\|\boldsymbol{a}_j\|_2 ∥Δ a j ∥ 2 ≤ γ 43 mn ∥ a j ∥ 2 (j = 1 , … , n j=1,\ldots,n j = 1 , … , n 、Δ a j \Delta\boldsymbol{a}_j Δ a j は Δ A \Delta A Δ A の第 j j j 列)。とくに ∥ Δ A ∥ F ≤ γ 43 m n ∥ A ∥ F \|\Delta A\|_F\le\gamma_{43mn}\|A\|_F ∥Δ A ∥ F ≤ γ 43 mn ∥ A ∥ F 。
b ∈ F m \boldsymbol{b}\in\mathbb{F}^m b ∈ F m に同じ鏡映を順に作用させた計算値 c ^ \widehat{\boldsymbol{c}} c について、c ^ = Q T ( b + Δ b ) \widehat{\boldsymbol{c}}=Q^{\mathsf{T}}(\boldsymbol{b}+\Delta\boldsymbol{b}) c = Q T ( b + Δ b ) 、∥ Δ b ∥ 2 ≤ γ 43 m n ∥ b ∥ 2 \|\Delta\boldsymbol{b}\|_2\le\gamma_{43mn}\|\boldsymbol{b}\|_2 ∥Δ b ∥ 2 ≤ γ 43 mn ∥ b ∥ 2 。
証明(定理 5.3) P k P_k P k は 命題 3.2 により対称な直交行列なので、Q Q Q は直交行列で Q T = P n ⋯ P 1 Q^{\mathsf{T}}=P_n\cdots P_1 Q T = P n ⋯ P 1 です。第 k k k 段の x \boldsymbol{x} x の長さは p = m − k + 1 ≤ m p=m-k+1\le m p = m − k + 1 ≤ m で、14 p + 29 ≤ 43 m 14p+29\le43m 14 p + 29 ≤ 43 m 、p + 1 ≤ 43 m p+1\le43m p + 1 ≤ 43 m です。また 86 m n u < 1 86mnu<1 86 mn u < 1 から 43 p u ≤ 43 m u < 1 / 2 43pu\le43mu<1/2 43 p u ≤ 43 m u < 1/2 なので 補題 5.1 が使えます。
(1) 第 j j j 列を固定し、第 k k k 段の後の第 j j j 列(計算値)を y k \boldsymbol{y}_k y k 、y 0 = a j \boldsymbol{y}_0=\boldsymbol{a}_j y 0 = a j とします。
k < j k<j k < j : 第 1 1 1 〜k − 1 k-1 k − 1 成分は変わらず、P k P_k P k もそこを変えません。第 k k k 〜m m m 成分には鏡映が作用し、補題 5.1 の 2 から ∥ y k − P k y k − 1 ∥ 2 ≤ γ 43 m ∥ y k − 1 ∥ 2 \|\boldsymbol{y}_k-P_k\boldsymbol{y}_{k-1}\|_2\le\gamma_{43m}\|\boldsymbol{y}_{k-1}\|_2 ∥ y k − P k y k − 1 ∥ 2 ≤ γ 43 m ∥ y k − 1 ∥ 2 。
k = j k=j k = j : 第 j j j 列が x \boldsymbol{x} x そのもので、補題 5.1 の 3 から同じ評価(x = 0 \boldsymbol{x}=\boldsymbol{0} x = 0 なら誤差 0)。
k > j k>j k > j : 第 j j j 列は変わらず、第 k k k 行以降は 0 なので P k y k − 1 = y k − 1 P_k\boldsymbol{y}_{k-1}=\boldsymbol{y}_{k-1} P k y k − 1 = y k − 1 、誤差 0。
補題 5.2 (r = n r=n r = n 、δ = γ 43 m \delta=\gamma_{43m} δ = γ 43 m 、43 m n u < 1 43mnu<1 43 mn u < 1 )により r ^ j : = y n \widehat{\boldsymbol{r}}_j:=\boldsymbol{y}_n r j := y n は ∥ r ^ j − Q T a j ∥ 2 ≤ γ 43 m n ∥ a j ∥ 2 \|\widehat{\boldsymbol{r}}_j-Q^{\mathsf{T}}\boldsymbol{a}_j\|_2\le\gamma_{43mn}\|\boldsymbol{a}_j\|_2 ∥ r j − Q T a j ∥ 2 ≤ γ 43 mn ∥ a j ∥ 2 を満たします。Δ a j : = Q r ^ j − a j = Q ( r ^ j − Q T a j ) \Delta\boldsymbol{a}_j:=Q\widehat{\boldsymbol{r}}_j-\boldsymbol{a}_j=Q(\widehat{\boldsymbol{r}}_j-Q^{\mathsf{T}}\boldsymbol{a}_j) Δ a j := Q r j − a j = Q ( r j − Q T a j ) とおけば、Q Q Q は 2 ノルムを保つので主張の評価です。Frobenius ノルムの評価は列ごとの評価の 2 乗和です。
(2) 各段で 補題 5.1 の 2 を使い、(1) と同様に 補題 5.2 を適用して Δ b : = Q c ^ − b \Delta\boldsymbol{b}:=Q\widehat{\boldsymbol{c}}-\boldsymbol{b} Δ b := Q c − b とおけばよいです。
∎
この定理は「R ^ \widehat R R は A A A の厳密な QR 分解の R R R に近い」とは言っていません。言っているのは「R ^ \widehat R R は、各列を相対 γ 43 m n \gamma_{43mn} γ 43 mn だけ動かした行列の、厳密な QR 分解の R R R である」ことです。前進誤差(計算結果そのものと厳密な答えとのずれ)は QR 分解の条件数に依存します。また Q Q Q は計算で現れる行列ではなく、解析のための厳密な直交行列です。計算機の中で Q Q Q を作った場合については次の系が成り立ちます。
系 5.4 (計算した Q の直交性 ) ✓
定理 5.3 の仮定のもとで、I m I_m I m の各列に鏡映を P n , … , P 1 P_n,\ldots,P_1 P n , … , P 1 の順に作用させて計算した Q ^ \widehat Q Q は Q ^ = Q ( I + Δ ) \widehat Q=Q(I+\Delta) Q = Q ( I + Δ ) 、∥ Δ ∥ F ≤ m γ 43 m n \|\Delta\|_F\le\sqrt m\,\gamma_{43mn} ∥Δ ∥ F ≤ m γ 43 mn を満たし、
∥ Q ^ T Q ^ − I ∥ 2 ≤ 2 m γ 43 m n + m γ 43 m n 2 . \|\widehat Q^{\mathsf{T}}\widehat Q-I\|_2\le2\sqrt m\,\gamma_{43mn}+m\gamma_{43mn}^2. ∥ Q T Q − I ∥ 2 ≤ 2 m γ 43 mn + m γ 43 mn 2 .
証明(系 5.4) e i \boldsymbol{e}_i e i に P n , … , P 1 P_n,\ldots,P_1 P n , … , P 1 の順に作用させる計算に、補題 5.1 の 2 と 補題 5.2 (Q k Q_k Q k を P n + 1 − k P_{n+1-k} P n + 1 − k とする)を使うと、第 i i i 列は P 1 ⋯ P n e i + d i = Q ( e i + Q T d i ) P_1\cdots P_n\boldsymbol{e}_i+\boldsymbol{d}_i=Q(\boldsymbol{e}_i+Q^{\mathsf{T}}\boldsymbol{d}_i) P 1 ⋯ P n e i + d i = Q ( e i + Q T d i ) 、∥ d i ∥ 2 ≤ γ 43 m n \|\boldsymbol{d}_i\|_2\le\gamma_{43mn} ∥ d i ∥ 2 ≤ γ 43 mn です。Δ \Delta Δ の第 i i i 列を Q T d i Q^{\mathsf{T}}\boldsymbol{d}_i Q T d i とすれば ∥ Δ ∥ F 2 ≤ m γ 43 m n 2 \|\Delta\|_F^2\le m\gamma_{43mn}^2 ∥Δ ∥ F 2 ≤ m γ 43 mn 2 。Q ^ T Q ^ − I = Δ + Δ T + Δ T Δ \widehat Q^{\mathsf{T}}\widehat Q-I=\Delta+\Delta^{\mathsf{T}}+\Delta^{\mathsf{T}}\Delta Q T Q − I = Δ + Δ T + Δ T Δ で、Frobenius ノルムの性質(命題 4.4)[行列のノルムと線形方程式の条件数] の 3 から ∥ Δ ∥ 2 ≤ ∥ Δ ∥ F \|\Delta\|_2\le\|\Delta\|_F ∥Δ ∥ 2 ≤ ∥Δ ∥ F 、劣乗法性から ∥ Δ T Δ ∥ 2 ≤ ∥ Δ ∥ 2 2 \|\Delta^{\mathsf{T}}\Delta\|_2\le\|\Delta\|_2^2 ∥ Δ T Δ ∥ 2 ≤ ∥Δ ∥ 2 2 です。
∎
Givens QR の算法(浮動小数). k = 1 , … , n k=1,\ldots,n k = 1 , … , n 、i = k + 1 , … , m i=k+1,\ldots,m i = k + 1 , … , m の順に、現在の ( i , k ) (i,k) ( i , k ) 成分 b b b が 0 でなければ、( k , k ) (k,k) ( k , k ) 成分 a a a と合わせて r ^ = f l ( f l ( f l ( a 2 ) + f l ( b 2 ) ) ) \widehat r=\mathrm{fl}\bigl(\sqrt{\mathrm{fl}(\mathrm{fl}(a^2)+\mathrm{fl}(b^2))}\bigr) r = fl ( fl ( fl ( a 2 ) + fl ( b 2 )) ) 、c ^ = f l ( a / r ^ ) \widehat c=\mathrm{fl}(a/\widehat r) c = fl ( a / r ) 、s ^ = f l ( b / r ^ ) \widehat s=\mathrm{fl}(b/\widehat r) s = fl ( b / r ) を計算し、第 k + 1 k+1 k + 1 〜n n n 列の第 k k k ・i i i 行を ( x , y ) ↦ ( f l ( f l ( c ^ x ) + f l ( s ^ y ) ) , f l ( f l ( c ^ y ) − f l ( s ^ x ) ) ) (x,y)\mapsto(\mathrm{fl}(\mathrm{fl}(\widehat cx)+\mathrm{fl}(\widehat sy)),\ \mathrm{fl}(\mathrm{fl}(\widehat cy)-\mathrm{fl}(\widehat sx))) ( x , y ) ↦ ( fl ( fl ( c x ) + fl ( s y )) , fl ( fl ( c y ) − fl ( s x ))) で置き換え、( k , k ) (k,k) ( k , k ) 成分を r ^ \widehat r r 、( i , k ) (i,k) ( i , k ) 成分を 0 0 0 とします。比べる相手は、計算値の a , b a,b a , b から厳密に作った回転 G = G ( k , i ; a / r , b / r ) G=G(k,i;a/r,b/r) G = G ( k , i ; a / r , b / r ) です。
定理 5.5 (Givens QR の後退安定性 ) ✓
上の算法でアンダーフロー・オーバーフローが起きず、36 m n u < 1 36mnu<1 36 mn u < 1 とする。使った回転(厳密)の積を Q T = G N ⋯ G 1 Q^{\mathsf{T}}=G_N\cdots G_1 Q T = G N ⋯ G 1 (N ≤ m n N\le mn N ≤ mn )とすると、A + Δ A = Q R ^ A+\Delta A=Q\widehat R A + Δ A = Q R 、∥ Δ a j ∥ 2 ≤ γ 18 m n ∥ a j ∥ 2 \|\Delta\boldsymbol{a}_j\|_2\le\gamma_{18mn}\|\boldsymbol{a}_j\|_2 ∥Δ a j ∥ 2 ≤ γ 18 mn ∥ a j ∥ 2 。
証明(定理 5.5) 回転 1 回. f l ( a 2 ) + f l ( b 2 ) \mathrm{fl}(a^2)+\mathrm{fl}(b^2) fl ( a 2 ) + fl ( b 2 ) の丸めを含めて f l ( f l ( a 2 ) + f l ( b 2 ) ) = r 2 ( 1 + θ 2 ) \mathrm{fl}(\mathrm{fl}(a^2)+\mathrm{fl}(b^2))=r^2(1+\theta_2) fl ( fl ( a 2 ) + fl ( b 2 )) = r 2 ( 1 + θ 2 ) (a 2 ( 1 + δ ) + b 2 ( 1 + δ ′ ) = r 2 ( 1 + η ) a^2(1+\delta)+b^2(1+\delta')=r^2(1+\eta) a 2 ( 1 + δ ) + b 2 ( 1 + δ ′ ) = r 2 ( 1 + η ) 、∣ η ∣ ≤ u |\eta|\le u ∣ η ∣ ≤ u と和の丸め)なので、補題 2.2 の 2 と平方根の丸めで r ^ = r ( 1 + θ r ) \widehat r=r(1+\theta_r) r = r ( 1 + θ r ) 、∣ θ r ∣ ≤ γ 3 |\theta_r|\le\gamma_3 ∣ θ r ∣ ≤ γ 3 。補題 2.2 の 1 で c ^ = c ( 1 + δ ) ( 1 + θ r ) − 1 = c ( 1 + θ c ) \widehat c=c(1+\delta)(1+\theta_r)^{-1}=c(1+\theta_c) c = c ( 1 + δ ) ( 1 + θ r ) − 1 = c ( 1 + θ c ) 、∣ θ c ∣ ≤ γ 7 |\theta_c|\le\gamma_7 ∣ θ c ∣ ≤ γ 7 、同様に s ^ = s ( 1 + θ s ) \widehat s=s(1+\theta_s) s = s ( 1 + θ s ) 、∣ θ s ∣ ≤ γ 7 |\theta_s|\le\gamma_7 ∣ θ s ∣ ≤ γ 7 です。作用させた成分は x ^ ′ = c x ( 1 + θ 9 ) + s y ( 1 + θ 9 ′ ) \widehat x'=cx(1+\theta_9)+sy(1+\theta_9') x ′ = c x ( 1 + θ 9 ) + sy ( 1 + θ 9 ′ ) 、y ^ ′ = c y ( 1 + θ 9 ′ ′ ) − s x ( 1 + θ 9 ′ ′ ′ ) \widehat y'=cy(1+\theta_9'')-sx(1+\theta_9''') y ′ = cy ( 1 + θ 9 ′′ ) − s x ( 1 + θ 9 ′′′ ) と書けるので、誤差ベクトルの成分は γ 9 ( ∣ c ∣ ∣ x ∣ + ∣ s ∣ ∣ y ∣ ) \gamma_9(|c||x|+|s||y|) γ 9 ( ∣ c ∣∣ x ∣ + ∣ s ∣∣ y ∣ ) 、γ 9 ( ∣ s ∣ ∣ x ∣ + ∣ c ∣ ∣ y ∣ ) \gamma_9(|s||x|+|c||y|) γ 9 ( ∣ s ∣∣ x ∣ + ∣ c ∣∣ y ∣ ) 以下です。Cauchy–Schwarz の不等式で ( ∣ c ∣ ∣ x ∣ + ∣ s ∣ ∣ y ∣ ) 2 ≤ ( c 2 + s 2 ) ( x 2 + y 2 ) (|c||x|+|s||y|)^2\le(c^2+s^2)(x^2+y^2) ( ∣ c ∣∣ x ∣ + ∣ s ∣∣ y ∣ ) 2 ≤ ( c 2 + s 2 ) ( x 2 + y 2 ) なので、誤差の 2 ノルムは 2 γ 9 ∥ ( x , y ) ∥ 2 ≤ γ 18 ∥ ( x , y ) ∥ 2 \sqrt2\gamma_9\|(x,y)\|_2\le\gamma_{18}\|(x,y)\|_2 2 γ 9 ∥ ( x , y ) ∥ 2 ≤ γ 18 ∥ ( x , y ) ∥ 2 です。0 にした列では、厳密な回転の結果 ( r , 0 ) (r,0) ( r , 0 ) との差は ∣ r ^ − r ∣ ≤ γ 3 r ≤ γ 18 ∥ ( a , b ) ∥ 2 |\widehat r-r|\le\gamma_3r\le\gamma_{18}\|(a,b)\|_2 ∣ r − r ∣ ≤ γ 3 r ≤ γ 18 ∥ ( a , b ) ∥ 2 です。どちらの場合も、2 行以外の成分は変わらず、列全体で ∥ y ^ − G y ∥ 2 ≤ γ 18 ∥ y ∥ 2 \|\widehat{\boldsymbol{y}}-G\boldsymbol{y}\|_2\le\gamma_{18}\|\boldsymbol{y}\|_2 ∥ y − G y ∥ 2 ≤ γ 18 ∥ y ∥ 2 です。
積み重ね. 第 k k k 段の回転は第 k k k 行と第 i > k i>k i > k 行だけを動かし、第 j < k j<k j < k 列のそれらの成分は 0 なので、その列には厳密に作用します(誤差 0)。回転の総数は N = ∑ k = 1 n ( m − k ) ≤ m n N=\sum_{k=1}^n(m-k)\le mn N = ∑ k = 1 n ( m − k ) ≤ mn で、命題 3.4 により各 G ℓ G_\ell G ℓ は直交行列です。補題 5.2 (δ = γ 18 \delta=\gamma_{18} δ = γ 18 、r = N r=N r = N 、18 N u ≤ 18 m n u < 1 18Nu\le18mnu<1 18 N u ≤ 18 mn u < 1 )から、定理 5.3 の証明と同じく ∥ r ^ j − Q T a j ∥ 2 ≤ γ 18 m n ∥ a j ∥ 2 \|\widehat{\boldsymbol{r}}_j-Q^{\mathsf{T}}\boldsymbol{a}_j\|_2\le\gamma_{18mn}\|\boldsymbol{a}_j\|_2 ∥ r j − Q T a j ∥ 2 ≤ γ 18 mn ∥ a j ∥ 2 で、Δ a j = Q r ^ j − a j \Delta\boldsymbol{a}_j=Q\widehat{\boldsymbol{r}}_j-\boldsymbol{a}_j Δ a j = Q r j − a j とおけばよいです。補題 2.2 の前提(2 ⋅ 3 u < 1 2\cdot3u<1 2 ⋅ 3 u < 1 )や γ 18 \gamma_{18} γ 18 の定義の前提は 36 m n u < 1 36mnu<1 36 mn u < 1 に含まれます。
∎
定義 6.1 (古典 Gram–Schmidt と修正 Gram–Schmidt ) ↗
列が一次独立な A = ( a 1 , … , a n ) ∈ R m × n A=(\boldsymbol{a}_1,\ldots,\boldsymbol{a}_n)\in\mathbb{R}^{m\times n} A = ( a 1 , … , a n ) ∈ R m × n について、k = 1 , … , n k=1,\ldots,n k = 1 , … , n の順に次で q k \boldsymbol{q}_k q k と R R R の第 k k k 列を作る。
古典 Gram–Schmidt(CGS) : r i k = q i T a k r_{ik}=\boldsymbol{q}_i^{\mathsf{T}}\boldsymbol{a}_k r ik = q i T a k (i < k i<k i < k )、w k = a k − ∑ i < k r i k q i \boldsymbol{w}_k=\boldsymbol{a}_k-\sum_{i<k}r_{ik}\boldsymbol{q}_i w k = a k − ∑ i < k r ik q i 。
修正 Gram–Schmidt(MGS) : w k ( 1 ) = a k \boldsymbol{w}_k^{(1)}=\boldsymbol{a}_k w k ( 1 ) = a k 、i = 1 , … , k − 1 i=1,\ldots,k-1 i = 1 , … , k − 1 について r i k = q i T w k ( i ) r_{ik}=\boldsymbol{q}_i^{\mathsf{T}}\boldsymbol{w}_k^{(i)} r ik = q i T w k ( i ) 、w k ( i + 1 ) = w k ( i ) − r i k q i \boldsymbol{w}_k^{(i+1)}=\boldsymbol{w}_k^{(i)}-r_{ik}\boldsymbol{q}_i w k ( i + 1 ) = w k ( i ) − r ik q i 。w k = w k ( k ) \boldsymbol{w}_k=\boldsymbol{w}_k^{(k)} w k = w k ( k ) 。
どちらも r k k = ∥ w k ∥ 2 r_{kk}=\|\boldsymbol{w}_k\|_2 r k k = ∥ w k ∥ 2 、q k = w k / r k k \boldsymbol{q}_k=\boldsymbol{w}_k/r_{kk} q k = w k / r k k とする。
CGS は係数をすべて元の a k \boldsymbol{a}_k a k との内積で計算し、MGS は「それまでの方向を取り除いた残り」との内積で計算します。
命題 6.2 (厳密な算術では CGS と MGS は一致する ) ✓
厳密な算術では、CGS と MGS は同じ q 1 , … , q n \boldsymbol{q}_1,\ldots,\boldsymbol{q}_n q 1 , … , q n と R R R を与え、それは 定理 4.1 の 2 の薄い QR 分解(対角が正)に一致する。
証明(命題 6.2) k k k についての帰納法で、両者の q 1 , … , q k − 1 \boldsymbol{q}_1,\ldots,\boldsymbol{q}_{k-1} q 1 , … , q k − 1 が一致して正規直交であると仮定します。MGS で w k ( i ) = a k − ∑ j < i r j k q j \boldsymbol{w}_k^{(i)}=\boldsymbol{a}_k-\sum_{j<i}r_{jk}\boldsymbol{q}_j w k ( i ) = a k − ∑ j < i r j k q j ですから、q i T q j = 0 \boldsymbol{q}_i^{\mathsf{T}}\boldsymbol{q}_j=0 q i T q j = 0 (j < i j<i j < i )より q i T w k ( i ) = q i T a k \boldsymbol{q}_i^{\mathsf{T}}\boldsymbol{w}_k^{(i)}=\boldsymbol{q}_i^{\mathsf{T}}\boldsymbol{a}_k q i T w k ( i ) = q i T a k で、係数 r i k r_{ik} r ik は CGS と同じです。したがって w k \boldsymbol{w}_k w k も同じです。CGS の漸化式は、実内積 ⟨ a k , q i ⟩ = q i T a k \langle\boldsymbol{a}_k,\boldsymbol{q}_i\rangle=\boldsymbol{q}_i^{\mathsf{T}}\boldsymbol{a}_k ⟨ a k , q i ⟩ = q i T a k で書いた Gram–Schmidt の直交化(定理 6.1)[内積空間とグラム・シュミット直交化] の漸化式そのものなので、w k ≠ 0 \boldsymbol{w}_k\ne\boldsymbol{0} w k = 0 で q 1 , … , q k \boldsymbol{q}_1,\ldots,\boldsymbol{q}_k q 1 , … , q k は正規直交です。作り方から a k = ∑ i < k r i k q i + r k k q k \boldsymbol{a}_k=\sum_{i<k}r_{ik}\boldsymbol{q}_i+r_{kk}\boldsymbol{q}_k a k = ∑ i < k r ik q i + r k k q k 、すなわち A = Q 1 R 1 A=Q_1R_1 A = Q 1 R 1 、r k k = ∥ w k ∥ 2 > 0 r_{kk}=\|\boldsymbol{w}_k\|_2>0 r k k = ∥ w k ∥ 2 > 0 で、定理 4.1 の 2 の一意性から主張が従います。
∎
浮動小数では両者は違う結果を与えます。違いが目に見える最小の例は 3 列です(2 列では CGS と MGS は同じ演算を行います。演習を参照)。
次の例で丸められるのは ε 2 = 10 − 16 \varepsilon^2=10^{-16} ε 2 = 1 0 − 16 です。倍精度では 1 1 1 に足しても桁に収まらず消えるので、1 + ε 2 1+\varepsilon^2 1 + ε 2 は 1 1 1 になります。この消えた分が、直交性の喪失のもとになります。
例 6.3 (古典 Gram–Schmidt が直交性を完全に失う例 )
ε > 0 \varepsilon>0 ε > 0 を f l ( 1 + ε 2 ) = 1 \mathrm{fl}(1+\varepsilon^2)=1 fl ( 1 + ε 2 ) = 1 となるほど小さく(倍精度で ε = 10 − 8 \varepsilon=10^{-8} ε = 1 0 − 8 )とり、
A = ( 1 1 1 ε 0 0 0 ε 0 0 0 ε ) A=\begin{pmatrix}1&1&1\\\varepsilon&0&0\\0&\varepsilon&0\\0&0&\varepsilon\end{pmatrix} A = 1 ε 0 0 1 0 ε 0 1 0 0 ε とします(列は一次独立)。計算では ∥ a 1 ∥ 2 = 1 + ε 2 \|\boldsymbol{a}_1\|_2=\sqrt{1+\varepsilon^2} ∥ a 1 ∥ 2 = 1 + ε 2 が 1 1 1 に丸められ、q ^ 1 = ( 1 , ε , 0 , 0 ) T \widehat{\boldsymbol{q}}_1=(1,\varepsilon,0,0)^{\mathsf{T}} q 1 = ( 1 , ε , 0 , 0 ) T です。q 1 T a 2 = 1 \boldsymbol{q}_1^{\mathsf{T}}\boldsymbol{a}_2=1 q 1 T a 2 = 1 で w 2 = ( 0 , − ε , ε , 0 ) T \boldsymbol{w}_2=(0,-\varepsilon,\varepsilon,0)^{\mathsf{T}} w 2 = ( 0 , − ε , ε , 0 ) T 、q ^ 2 = ( 0 , − 1 , 1 , 0 ) T / 2 \widehat{\boldsymbol{q}}_2=(0,-1,1,0)^{\mathsf{T}}/\sqrt2 q 2 = ( 0 , − 1 , 1 , 0 ) T / 2 。
CGS: q 1 T a 3 = 1 \boldsymbol{q}_1^{\mathsf{T}}\boldsymbol{a}_3=1 q 1 T a 3 = 1 、q 2 T a 3 = 0 \boldsymbol{q}_2^{\mathsf{T}}\boldsymbol{a}_3=0 q 2 T a 3 = 0 なので w 3 = ( 0 , − ε , 0 , ε ) T \boldsymbol{w}_3=(0,-\varepsilon,0,\varepsilon)^{\mathsf{T}} w 3 = ( 0 , − ε , 0 , ε ) T 、q ^ 3 = ( 0 , − 1 , 0 , 1 ) T / 2 \widehat{\boldsymbol{q}}_3=(0,-1,0,1)^{\mathsf{T}}/\sqrt2 q 3 = ( 0 , − 1 , 0 , 1 ) T / 2 で、q ^ 2 T q ^ 3 = 1 / 2 \widehat{\boldsymbol{q}}_2^{\mathsf{T}}\widehat{\boldsymbol{q}}_3=1/2 q 2 T q 3 = 1/2 。
MGS: q 1 \boldsymbol{q}_1 q 1 を除いた w 3 ( 2 ) = ( 0 , − ε , 0 , ε ) T \boldsymbol{w}_3^{(2)}=(0,-\varepsilon,0,\varepsilon)^{\mathsf{T}} w 3 ( 2 ) = ( 0 , − ε , 0 , ε ) T との内積 q 2 T w 3 ( 2 ) = ε / 2 \boldsymbol{q}_2^{\mathsf{T}}\boldsymbol{w}_3^{(2)}=\varepsilon/\sqrt2 q 2 T w 3 ( 2 ) = ε / 2 を使うので w 3 = ( 0 , − ε / 2 , − ε / 2 , ε ) T \boldsymbol{w}_3=(0,-\varepsilon/2,-\varepsilon/2,\varepsilon)^{\mathsf{T}} w 3 = ( 0 , − ε /2 , − ε /2 , ε ) T 、q ^ 3 = ( 0 , − 1 , − 1 , 2 ) T / 6 \widehat{\boldsymbol{q}}_3=(0,-1,-1,2)^{\mathsf{T}}/\sqrt6 q 3 = ( 0 , − 1 , − 1 , 2 ) T / 6 で、q ^ 2 T q ^ 3 = 0 \widehat{\boldsymbol{q}}_2^{\mathsf{T}}\widehat{\boldsymbol{q}}_3=0 q 2 T q 3 = 0 。
どちらも q ^ 1 T q ^ 2 = − ε / 2 \widehat{\boldsymbol{q}}_1^{\mathsf{T}}\widehat{\boldsymbol{q}}_2=-\varepsilon/\sqrt2 q 1 T q 2 = − ε / 2 程度の誤差は残ります。CGS では q 2 \boldsymbol{q}_2 q 2 の方向の成分が a 3 \boldsymbol{a}_3 a 3 の段階で 0 と計算され、q 1 \boldsymbol{q}_1 q 1 を引いた後に初めて現れる q 2 \boldsymbol{q}_2 q 2 方向の成分が取り除かれません。倍精度で実行すると、CGS の Q ^ T Q ^ \widehat Q^{\mathsf{T}}\widehat Q Q T Q の ( 2 , 3 ) (2,3) ( 2 , 3 ) 成分は 0.5 0.5 0.5 、MGS では 0.0 0.0 0.0 (表示 10 桁)でした。この行列は Läuchli の例として知られる形です(Björck, Ch. 2)。
例 6.7 (4 通りの直交化の比較 )
特異値を 1 1 1 から 1 / κ 1/\kappa 1/ κ まで等比に並べた 60 × 20 60\times20 60 × 20 の行列 A = U Σ V T A=U\Sigma V^{\mathsf{T}} A = U Σ V T (U , V U,V U , V は乱数行列の QR 分解の Q Q Q )で、CGS・MGS・CGS2・numpy.linalg.qr(LAPACK の Householder QR)の直交性 ∥ I − Q ^ T Q ^ ∥ 2 \|I-\widehat Q^{\mathsf{T}}\widehat Q\|_2 ∥ I − Q T Q ∥ 2 を比べます。
# Python 3.12.10 / NumPy 2.5.2 /乱数種 20261006
def cgs ( A , passes= 1 ) : # 古典 Gram-Schmidt(passes=2 で再直交化)
m, n = A.shape; Q = np. zeros ( (m, n) ); R = np. zeros ( (n, n) )
c = Q[:, :k].T @ v; v -= Q[:, :k] @ c; R[:k, k] += c
R[k, k] = np.linalg. norm ( v ); Q[:, k] = v / R[k, k]
def mgs ( A ) : # 修正 Gram-Schmidt
m, n = A.shape; V = A. copy (); Q = np. zeros ( (m, n) )
R[k, k] = np.linalg. norm ( V [ :, k ]); Q[:, k] = V[:, k] / R[k, k]
R[k, k + 1 :] = Q[:, k] @ V[:, k + 1 :]
V[:, k + 1 :] -= np. outer ( Q [ :, k ] , R [ k, k + 1 : ])
rng = np.random. default_rng ( 20261006 )
U, _ = np.linalg. qr ( rng. standard_normal ( (m, n) ))
V, _ = np.linalg. qr ( rng. standard_normal ( (n, n) ))
loss = lambda Q : np.linalg. norm ( np. eye ( n ) - Q.T @ Q , 2 )
print ( " kappa CGS MGS CGS2 Householder " )
for e in range ( 2 , 13 , 2 ):
A = U @ np. diag ( np. logspace ( 0 , - e , n )) @ V.T
Qs = [ cgs ( A ) [ 0 ] , mgs ( A ) [ 0 ] , cgs ( A , 2 ) [ 0 ] , np.linalg. qr ( A ) [ 0 ]]
print ( f "1e {e :<3d } " + " " . join ( f " { loss ( Q ) :.1e } " for Q in Qs ))
kappa CGS MGS CGS2 Householder
1e2 6.3e-14 9.3e-15 4.6e-16 6.8e-16
1e4 8.0e-10 3.3e-13 4.6e-16 9.9e-16
1e6 1.3e-05 4.9e-11 5.4e-16 8.7e-16
1e8 2.3e-01 1.3e-09 4.8e-16 1.3e-15
1e10 3.9e+00 3.6e-07 6.0e-16 7.9e-16
1e12 5.4e+00 2.6e-06 7.0e-16 9.9e-16
続けて、後退誤差 ∥ A − Q ^ R ^ ∥ 2 / ∥ A ∥ 2 \|A-\widehat Q\widehat R\|_2/\|A\|_2 ∥ A − Q R ∥ 2 /∥ A ∥ 2 と、mpmath の 50 桁で計算した QR 分解に対する Householder の Q ^ \widehat Q Q ・R ^ \widehat R R の前進誤差(列の符号をそろえて比べる)を見ます。
# (上のブロックの続き。cgs・mgs・U・V・m・n を使う)
import mpmath as mp # mpmath 1.3.0
nrm = lambda X : np.linalg. norm ( X , 2 )
print ( " kappa CGS MGS CGS2 Househ. Q fwd R fwd " )
A = U @ np. diag ( np. logspace ( 0 , - e , n )) @ V.T
QRs = [ cgs ( A ), mgs ( A ), cgs ( A , 2 ), np.linalg. qr ( A ) ]
Qm, Rm = mp. qr ( mp. matrix ( A. tolist ())) # 50 桁の QR
Qe = np. array ( Qm. tolist () , dtype = float ) [ :, :n ]
Re = np. array ( Rm. tolist () , dtype = float ) [ :n, : ]
d = np. sign ( np. diag ( R )) * np. sign ( np. diag ( Re )) # 符号をそろえる
bw = [ nrm ( A - Qi @ Ri ) / nrm ( A ) for Qi, Ri in QRs ]
fr = nrm ( d [ :, None ] * R - Re ) / nrm ( Re )
print ( f "1e {e :<3d } " + " " . join ( f " {x :.1e } " for x in bw + [ fq, fr ] ))
kappa CGS MGS CGS2 Househ. Q fwd R fwd
1e2 9.1e-17 9.5e-17 9.3e-17 4.2e-16 7.1e-15 2.4e-16
1e6 7.2e-17 7.5e-17 8.0e-17 3.2e-16 1.9e-11 3.0e-16
1e10 7.3e-17 6.3e-17 7.9e-17 4.3e-16 1.0e-07 2.1e-16
検算. (a) 既知値: A A A の 2 ノルムの条件数は構成から厳密に κ \kappa κ です。系 5.4 が予言するとおり、Householder の直交性は κ \kappa κ によらず 10 − 15 10^{-15} 1 0 − 15 の程度です。(b) 別精度・別手法: 4 通りの直交化を並べ、Householder の Q ^ , R ^ \widehat Q,\widehat R Q , R は mpmath の 50 桁の QR 分解と比べました。R ^ \widehat R R の前進誤差は u u u の程度、Q ^ \widehat Q Q の前進誤差は κ u \kappa u κ u の程度(κ u = 1.1 × 10 − 14 , 10 − 10 , 10 − 6 \kappa u=1.1\times10^{-14},10^{-10},10^{-6} κ u = 1.1 × 1 0 − 14 , 1 0 − 10 , 1 0 − 6 に対し 7 × 10 − 15 , 2 × 10 − 11 , 1 × 10 − 7 7\times10^{-15},2\times10^{-11},1\times10^{-7} 7 × 1 0 − 15 , 2 × 1 0 − 11 , 1 × 1 0 − 7 )で、Q ^ \widehat Q Q は「真の Q Q Q からは κ u \kappa u κ u ずれるが、それ自体はほぼ直交」です。これは 定理 5.3 の「近いデータの厳密な分解」という形の主張と合っています。(c) 次数: κ \kappa κ を 10 2 10^2 1 0 2 倍するごとに、CGS の喪失はおよそ 10 4 10^4 1 0 4 倍(κ 2 u \kappa^2u κ 2 u に比例、κ = 10 8 \kappa=10^8 κ = 1 0 8 以降は O ( 1 ) O(1) O ( 1 ) で飽和)、MGS はおよそ 10 2 10^2 1 0 2 倍(κ u \kappa u κ u に比例)になり、CGS2 と Householder は変わりません。後退誤差はどの方法でも u u u の程度で、違いは直交性にだけ出ます。
演習 7.1 易
x = ( 3 , 4 ) T \boldsymbol{x}=(3,4)^{\mathsf{T}} x = ( 3 , 4 ) T の Householder 鏡映 v , β , P \boldsymbol{v},\beta,P v , β , P を求め、P x P\boldsymbol{x} P x を計算せよ。また x = ( 1 , 10 − 9 ) T \boldsymbol{x}=(1,10^{-9})^{\mathsf{T}} x = ( 1 , 1 0 − 9 ) T について、逆の符号 v ′ = x − sgn ( x 1 ) ∥ x ∥ 2 e 1 \boldsymbol{v}'=\boldsymbol{x}-\operatorname{sgn}(x_1)\|\boldsymbol{x}\|_2\boldsymbol{e}_1 v ′ = x − sgn ( x 1 ) ∥ x ∥ 2 e 1 を倍精度で計算すると何が起きるか説明せよ。
解答 σ = 5 \sigma=5 σ = 5 、v = ( 8 , 4 ) T \boldsymbol{v}=(8,4)^{\mathsf{T}} v = ( 8 , 4 ) T 、v T v = 80 = 2 σ ∣ v 1 ∣ \boldsymbol{v}^{\mathsf{T}}\boldsymbol{v}=80=2\sigma|v_1| v T v = 80 = 2 σ ∣ v 1 ∣ 、β = 1 / 40 \beta=1/40 β = 1/40 で
P = I − 1 40 ( 64 32 32 16 ) = ( − 0.6 − 0.8 − 0.8 0.6 ) , P x = ( − 5 , 0 ) T P=I-\frac1{40}\begin{pmatrix}64&32\\32&16\end{pmatrix}=\begin{pmatrix}-0.6&-0.8\\-0.8&0.6\end{pmatrix},\qquad P\boldsymbol{x}=(-5,0)^{\mathsf{T}} P = I − 40 1 ( 64 32 32 16 ) = ( − 0.6 − 0.8 − 0.8 0.6 ) , P x = ( − 5 , 0 ) T で、命題 3.2 の 2 のとおり α = − 5 \alpha=-5 α = − 5 です。後半: ∥ x ∥ 2 = 1 + 10 − 18 \|\boldsymbol{x}\|_2=\sqrt{1+10^{-18}} ∥ x ∥ 2 = 1 + 1 0 − 18 は倍精度で 1 1 1 に丸められるので v 1 ′ = 1 − 1 = 0 v_1'=1-1=0 v 1 ′ = 1 − 1 = 0 となり、v ′ = ( 0 , 10 − 9 ) T \boldsymbol{v}'=(0,10^{-9})^{\mathsf{T}} v ′ = ( 0 , 1 0 − 9 ) T です。厳密には v 1 ′ = 1 − 1 + 10 − 18 ≈ − 5 × 10 − 19 v_1'=1-\sqrt{1+10^{-18}}\approx-5\times10^{-19} v 1 ′ = 1 − 1 + 1 0 − 18 ≈ − 5 × 1 0 − 19 なので、v 1 ′ v_1' v 1 ′ の相対誤差は 100% です。この v ′ \boldsymbol{v}' v ′ から作った鏡映は第 2 成分の符号を反転するだけで、x \boldsymbol{x} x を e 1 \boldsymbol{e}_1 e 1 の方向に写しません(( 1 , − 10 − 9 ) (1,-10^{-9}) ( 1 , − 1 0 − 9 ) になる)。定義の符号では v 1 = 2 v_1=2 v 1 = 2 で桁落ちは起きません。
演習 7.2 易
A = ( 1 1 0 0 ) A=\begin{pmatrix}1&1\\0&0\end{pmatrix} A = ( 1 0 1 0 ) について、R R R の対角成分が非負の QR 分解 A = Q R A=QR A = QR が 2 通り以上あることを示し、定理 4.1 の 2 で列の一次独立性が必要な理由を説明せよ。
解答 Q = I Q=I Q = I 、R = A R=A R = A と、Q ′ = diag ( 1 , − 1 ) Q'=\operatorname{diag}(1,-1) Q ′ = diag ( 1 , − 1 ) 、R ′ = Q ′ T A = A R'=Q'^{\mathsf{T}}A=A R ′ = Q ′ T A = A はどちらも A = Q R A=QR A = QR で、R R R の対角は ( 1 , 0 ) (1,0) ( 1 , 0 ) で非負です。Q ≠ Q ′ Q\ne Q' Q = Q ′ なので一意ではありません。r 22 = 0 r_{22}=0 r 22 = 0 のとき q 2 \boldsymbol{q}_2 q 2 は a 1 , a 2 \boldsymbol{a}_1,\boldsymbol{a}_2 a 1 , a 2 のどちらにも現れず、q 1 \boldsymbol{q}_1 q 1 に直交する任意の単位ベクトルを選べます。一意性の証明は r k k > 0 r_{kk}>0 r k k > 0 (すなわち a k ∉ span ( a 1 , … , a k − 1 ) \boldsymbol{a}_k\notin\operatorname{span}(\boldsymbol{a}_1,\ldots,\boldsymbol{a}_{k-1}) a k ∈ / span ( a 1 , … , a k − 1 ) )を使っていました。
演習 7.3 標準
列が 2 本(n = 2 n=2 n = 2 )のとき、CGS と MGS は浮動小数でもまったく同じ演算を行い、同じ結果を与えることを示せ。n = 3 n=3 n = 3 では最初にどこで違いが生じるか。
解答 k = 1 k=1 k = 1 はどちらも q 1 = f l ( a 1 / ∥ a 1 ∥ 2 ) \boldsymbol{q}_1=\mathrm{fl}(\boldsymbol{a}_1/\|\boldsymbol{a}_1\|_2) q 1 = fl ( a 1 /∥ a 1 ∥ 2 ) です。k = 2 k=2 k = 2 では CGS が r 12 = f l ( q ^ 1 T a 2 ) r_{12}=\mathrm{fl}(\widehat{\boldsymbol{q}}_1^{\mathsf{T}}\boldsymbol{a}_2) r 12 = fl ( q 1 T a 2 ) 、w 2 = f l ( a 2 − r 12 q ^ 1 ) \boldsymbol{w}_2=\mathrm{fl}(\boldsymbol{a}_2-r_{12}\widehat{\boldsymbol{q}}_1) w 2 = fl ( a 2 − r 12 q 1 ) を計算し、MGS は w 2 ( 1 ) = a 2 \boldsymbol{w}_2^{(1)}=\boldsymbol{a}_2 w 2 ( 1 ) = a 2 に対して同じ式を計算します。したがって演算は同一です。n = 3 n=3 n = 3 では k = 3 k=3 k = 3 の r 23 r_{23} r 23 で、CGS は q ^ 2 T a 3 \widehat{\boldsymbol{q}}_2^{\mathsf{T}}\boldsymbol{a}_3 q 2 T a 3 、MGS は q ^ 2 T w ^ 3 ( 2 ) \widehat{\boldsymbol{q}}_2^{\mathsf{T}}\widehat{\boldsymbol{w}}_3^{(2)} q 2 T w 3 ( 2 ) を計算し、ここで初めて違いが出ます。例 6.3 はまさにこの r 23 r_{23} r 23 の違い(0 0 0 と ε / 2 \varepsilon/\sqrt2 ε / 2 )が直交性を左右する例です。
N. J. Higham, Accuracy and Stability of Numerical Algorithms , 2nd ed., SIAM, 2002 — Ch. 19(Householder・Givens QR の後退誤差解析、Gram–Schmidt)。
G. H. Golub and C. F. Van Loan, Matrix Computations , 4th ed., Johns Hopkins University Press, 2013 — §5.1–5.2。
L. N. Trefethen and D. Bau III, Numerical Linear Algebra , SIAM, 1997 — Lectures 7–10, 16。
Å. Björck, Numerical Methods for Least Squares Problems , SIAM, 1996 — Ch. 2(Gram–Schmidt の丸め誤差、Läuchli の例)。
Å. Björck and C. C. Paige, “Loss and recapture of orthogonality in the modified Gram–Schmidt algorithm”, SIAM J. Matrix Anal. Appl. 13 (1992), 176–190.
L. Giraud, J. Langou, and M. Rozložník, “The loss of orthogonality in the Gram–Schmidt orthogonalization process”, Comput. Math. Appl. 50 (2005), 1069–1075.
執筆: Claude Code(Opus 5.5)、Claude Code(Sonnet 5.5)・監査 2 回(Claude Code)・最終 2026-10-12