コンテンツにスキップ

QR 分解:Householder 変換・Givens 回転・Gram–Schmidt の安定性

対象読者: 本テーマの行列ノルム・条件数の章と浮動小数点の誤差解析、内積空間とグラム・シュミット直交化を学んだ人。QR 分解や鏡映の知識は仮定しません。

前提となる記事:行列のノルムと線形方程式の条件数:誘導ノルム・後退誤差・特異行列までの距離、浮動小数点数と丸め誤差:IEEE 754・標準モデル・和と Horner 法の誤差解析、内積空間とグラム・シュミット直交化:長さと角度を線形代数に持ち込む

生 Markdown

QR 分解は、行列を「ベクトルの長さを変えない部分 QQ」と「三角形の形をした部分 RR」の積に分ける方法です。長さを変えない変換だけで計算すれば誤差が膨らみにくいので、最小二乗問題や固有値計算の土台として使われます。この記事では、その作り方(鏡映と回転)、コンピュータの丸め誤差があっても計算結果が「入力をほんの少し動かした問題の厳密な答え」になっていること、そして Gram–Schmidt 法では直交性が崩れうることを順に見ていきます。

  • 任意の m×nm\times n 実行列は A=QRA=QR(QQ は直交行列、RR は上三角)と書けます。列が一次独立なら、RR の対角を正にした薄い QR 分解は一意(薄い QR 分解とは QQ を m×nm\times n の長方形のまま使う形)で、その QQ の列は Gram–Schmidt の直交化と一致します。
  • Householder 鏡映 P=I−βvvTP=I-\beta\boldsymbol{v}\boldsymbol{v}^{\mathsf{T}} はベクトルを ∓∥x∥2e1\mp\|\boldsymbol{x}\|_2\boldsymbol{e}_1 に写す対称な直交行列です。符号を x1x_1 と同じ向きに選ぶと v1v_1 の計算で桁落ち(近い数の引き算で有効数字が減ること)が起きません。これを nn 回掛ける Householder QR の演算量は 2mn2−2n3/32mn^2-2n^3/3 です。
  • 浮動小数で計算した鏡映は「厳密な鏡映 + 相対 γ14p+29\gamma_{14p+29} の誤差」で、これを積み重ねると、計算した R^\widehat R についてある厳密な直交行列 QQ で A+ΔA=QR^A+\Delta A=Q\widehat R、∥Δaj∥2≤γ43mn∥aj∥2\|\Delta\boldsymbol{a}_j\|_2\le\gamma_{43mn}\|\boldsymbol{a}_j\|_2 が成り立ちます(列ごとの後退安定性。計算結果が、入力を少しだけ動かした問題の厳密な答えになっているということです)。Givens 回転による QR も同じ形です。
  • 古典 Gram–Schmidt と修正 Gram–Schmidt は厳密な算術では同じ Q,RQ,R を与えますが、浮動小数では直交性 ∥I−Q^TQ^∥\|I-\widehat Q^{\mathsf{T}}\widehat Q\| がそれぞれおよそ κ2u\kappa^2u、κu\kappa u まで崩れ、Householder では uu の程度にとどまります。後退誤差 ∥A−Q^R^∥/∥A∥\|A-\widehat Q\widehat R\|/\|A\| はどれも uu の程度で、違いは直交性に出ます。

最小二乗問題・固有値計算・Krylov 部分空間法は、どれも「列ベクトルを直交化する」操作を中心に持ちます。直交変換は 2 ノルムを保つので、誤差を拡大しません(行列のノルムと条件数 の ユニタリ不変性(命題 4.4)[行列のノルムと線形方程式の条件数])。ただし、それは厳密に直交な行列を掛けた場合の話で、計算機の中の「直交行列」は丸め誤差を含みます。

教科書で最初に習う Gram–Schmidt の直交化は、厳密な算術では申し分のない算法ですが、浮動小数では列がほとんど一次従属のとき直交性が崩れます。これに対して Householder 鏡映や Givens 回転は、「計算した結果が、少しだけ動かしたデータに厳密な直交変換を施した結果になっている」ことを証明できます。この記事の中心は、この後退誤差解析を、丸めの誤差モデルから省略せずに組み立てることです。

この記事では実数の行列を扱います(複素数でも、転置を共役転置に、符号 sgn⁡x1\operatorname{sgn}x_1 を x1/∣x1∣x_1/|x_1| に替えれば同じです)。sgn⁡(t)=1\operatorname{sgn}(t)=1(t≥0t\ge0)、−1-1(t<0t<0)と約束します。直交行列は QTQ=IQ^{\mathsf{T}}Q=I を満たす実正方行列で、ユニタリ行列の特徴づけ(命題 3.2)[スペクトル定理] により QQT=IQQ^{\mathsf{T}}=I かつ ∥Qx∥2=∥x∥2\|Q\boldsymbol{x}\|_2=\|\boldsymbol{x}\|_2 です。

浮動小数の約束. F\mathbb{F} は 2 進浮動小数の集合、uu は単位丸めで、計算の途中でアンダーフロー・オーバーフローは起きないとします。このとき四則と平方根は 四則の標準モデル(系 3.1)[浮動小数点数と丸め誤差] により fl(x∘y)=(x∘y)(1+δ)\mathrm{fl}(x\circ y)=(x\circ y)(1+\delta)、∣δ∣≤u|\delta|\le u を満たします。ku<1ku<1 のとき γk=ku/(1−ku)\gamma_k=ku/(1-ku) です(γₙ の定義(定義 3.1)[浮動小数と区間演算])。内積の丸め誤差は 内積の丸め誤差(定理 3.3)[浮動小数と区間演算]、γ\gamma の足し算・掛け算の規則は γₙ の計算規則(補題 3.2)[浮動小数点数と丸め誤差] を使います。以下「1+θ1+\theta、∣θ∣≤γk|\theta|\le\gamma_k」の形の因子を 1+θk1+\theta_k と略記することがあります。

後退誤差解析では定数の正確な値はあまり重要でないので、次の記法が便利です。

定義 2.1(γ̃ の記法)↗

cc を問題の大きさ(m,nm,n)とデータによらない正の整数定数とし、cku<1cku<1 のとき γ~k=γck=cku1−cku\widetilde\gamma_k=\gamma_{ck}=\dfrac{cku}{1-cku} とおく。本記事の定理では cc の値を明示する(Householder と Givens の QR では c=43c=43 で足りる)。

補題 2.2(逆数と平方根の誤差因子)✓

k≥1k\ge1、2ku<12ku<1、∣θ∣≤γk|\theta|\le\gamma_k とする。

  1. (1+θ)−1=1+θ′(1+\theta)^{-1}=1+\theta' と書くと ∣θ′∣≤γ2k|\theta'|\le\gamma_{2k}。
  2. 1+θ=1+θ′′\sqrt{1+\theta}=1+\theta'' と書くと ∣θ′′∣≤γk|\theta''|\le\gamma_k。
証明(補題 2.2)

2ku<12ku<1 から γk=ku/(1−ku)<1\gamma_k=ku/(1-ku)<1 なので 1+θ>01+\theta>0 です。(1) θ′=−θ/(1+θ)\theta'=-\theta/(1+\theta) なので

∣θ′∣≤γk1−γk=ku/(1−ku)(1−2ku)/(1−ku)=ku1−2ku≤2ku1−2ku=γ2k.|\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}.

(2) 1+θ−1=θ/(1+θ+1)\sqrt{1+\theta}-1=\theta/(\sqrt{1+\theta}+1) で、分母は 11 以上なので ∣θ′′∣≤∣θ∣≤γk|\theta''|\le|\theta|\le\gamma_k です。

ここで目指すのは、ベクトル x\boldsymbol{x} を「鏡」に映して座標軸 e1\boldsymbol{e}_1 の上に載せること、つまり第 1 成分以外を 0 にすることです。鏡映は長さを変えないので、列ごとにこれを繰り返せば、長さを保ったまま行列の左下を 0 にしていけます。Givens 回転は、鏡の代わりに 2 成分だけを回して 0 を作る道具です。

定義 3.1(Householder 鏡映)↗

0≠v∈Rp\boldsymbol{0}\ne\boldsymbol{v}\in\mathbb{R}^p について P=I−βvvTP=I-\beta\boldsymbol{v}\boldsymbol{v}^{\mathsf{T}}、β=2/(vTv)\beta=2/(\boldsymbol{v}^{\mathsf{T}}\boldsymbol{v}) を Householder 鏡映(Householder 変換)という。x∈Rp∖{0}\boldsymbol{x}\in\mathbb{R}^p\setminus\{\boldsymbol{0}\} に対して

σ=∥x∥2,v=x+sgn⁡(x1) σ e1,α=−sgn⁡(x1) σ\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\boldsymbol{x} の Householder 鏡映という。

命題 3.2(Householder 鏡映の性質)✓

  1. 任意の v≠0\boldsymbol{v}\ne\boldsymbol{0} について、P=I−βvvTP=I-\beta\boldsymbol{v}\boldsymbol{v}^{\mathsf{T}} は対称な直交行列で P2=IP^2=I。Pv=−vP\boldsymbol{v}=-\boldsymbol{v}、w⊥v\boldsymbol{w}\perp\boldsymbol{v} なら Pw=wP\boldsymbol{w}=\boldsymbol{w}。
  2. x≠0\boldsymbol{x}\ne\boldsymbol{0} の Householder 鏡映では ∣v1∣=∣x1∣+σ≥σ>0|v_1|=|x_1|+\sigma\ge\sigma>0、vTv=2σ∣v1∣\boldsymbol{v}^{\mathsf{T}}\boldsymbol{v}=2\sigma|v_1|(したがって β=1/(σ∣v1∣)\beta=1/(\sigma|v_1|))で、Px=αe1P\boldsymbol{x}=\alpha\boldsymbol{e}_1。
証明(命題 3.2)

(1) PT=PP^{\mathsf{T}}=P は明らかです。βvTv=2\beta\boldsymbol{v}^{\mathsf{T}}\boldsymbol{v}=2 を使うと

PTP=P2=I−2βvvT+β2v(vTv)vT=I−2βvvT+2βvvT=IP^{\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

で、PP は直交行列です。Pv=v−β(vTv)v=−vP\boldsymbol{v}=\boldsymbol{v}-\beta(\boldsymbol{v}^{\mathsf{T}}\boldsymbol{v})\boldsymbol{v}=-\boldsymbol{v}、vTw=0\boldsymbol{v}^{\mathsf{T}}\boldsymbol{w}=0 なら Pw=wP\boldsymbol{w}=\boldsymbol{w} です。

(2) v1=x1+sgn⁡(x1)σv_1=x_1+\operatorname{sgn}(x_1)\sigma で、x1x_1 と sgn⁡(x1)σ\operatorname{sgn}(x_1)\sigma は同符号(または x1=0x_1=0)なので ∣v1∣=∣x1∣+σ|v_1|=|x_1|+\sigma です。vTv=σ2+2∣x1∣σ+σ2=2σ(σ+∣x1∣)=2σ∣v1∣\boldsymbol{v}^{\mathsf{T}}\boldsymbol{v}=\sigma^2+2|x_1|\sigma+\sigma^2=2\sigma(\sigma+|x_1|)=2\sigma|v_1|。また vTx=σ2+∣x1∣σ=vTv/2\boldsymbol{v}^{\mathsf{T}}\boldsymbol{x}=\sigma^2+|x_1|\sigma=\boldsymbol{v}^{\mathsf{T}}\boldsymbol{v}/2 なので βvTx=1\beta\boldsymbol{v}^{\mathsf{T}}\boldsymbol{x}=1、Px=x−v=−sgn⁡(x1)σe1P\boldsymbol{x}=\boldsymbol{x}-\boldsymbol{v}=-\operatorname{sgn}(x_1)\sigma\boldsymbol{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) に着地する

PP は v\boldsymbol{v} に直交する超平面に関する鏡映です。x\boldsymbol{x} を ∥x∥2e1\|\boldsymbol{x}\|_2\boldsymbol{e}_1 と −∥x∥2e1-\|\boldsymbol{x}\|_2\boldsymbol{e}_1 のどちらに写すかは自由ですが、v=x−sgn⁡(x1)σe1\boldsymbol{v}=\boldsymbol{x}-\operatorname{sgn}(x_1)\sigma\boldsymbol{e}_1 を選ぶと、x\boldsymbol{x} が e1\boldsymbol{e}_1 の方向に近いとき v1=x1−sgn⁡(x1)σv_1=x_1-\operatorname{sgn}(x_1)\sigma が近い数の引き算になり、桁落ちで v\boldsymbol{v} の相対誤差が大きくなります。定義の符号はこれを避ける選び方で、後の 補題 5.1 の証明で ∣x1∣+σ|x_1|+\sigma の相対誤差が σ\sigma の相対誤差以下になることに効いています。

定義 3.3(Givens 回転)↗

1≤i<k≤p1\le i<k\le p、c2+s2=1c^2+s^2=1 について、単位行列の (i,i),(i,k),(k,i),(k,k)(i,i),(i,k),(k,i),(k,k) 成分を c,s,−s,cc,s,-s,c に置き換えた行列 G(i,k;c,s)∈Rp×pG(i,k;c,s)\in\mathbb{R}^{p\times p} を Givens 回転という。(a,b)≠(0,0)(a,b)\ne(0,0) に対しては r=a2+b2r=\sqrt{a^2+b^2}、c=a/rc=a/r、s=b/rs=b/r と選ぶ。

命題 3.4(Givens 回転の性質)✓

G=G(i,k;c,s)G=G(i,k;c,s) は直交行列で、GyG\boldsymbol{y} は y\boldsymbol{y} の第 ii・第 kk 成分だけを (cyi+syk, −syi+cyk)(cy_i+sy_k,\ -sy_i+cy_k) に替える。c=a/rc=a/r、s=b/rs=b/r のとき、yi=ay_i=a、yk=by_k=b なら (Gy)i=r(G\boldsymbol{y})_i=r、(Gy)k=0(G\boldsymbol{y})_k=0。

証明(命題 3.4)

成分の式は行列の積の定義どおりです。GTGG^{\mathsf{T}}G は第 ii・kk 行列以外で単位行列に一致し、その 2×22\times2 の部分は

(c−ssc)(cs−sc)=(c2+s200c2+s2)=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

です。ca+sb=(a2+b2)/r=rca+sb=(a^2+b^2)/r=r、−sa+cb=(−ab+ab)/r=0-sa+cb=(-ab+ab)/r=0 です。

Householder 鏡映は 1 回で多くの成分を 0 にし、Givens 回転は 1 成分ずつ、しかも 2 行しか動かさずに 0 にします。密な行列では前者、すでに 0 の多い行列(対角の 1 つ下より下がすべて 0 の Hessenberg 行列や、帯行列)では後者が向いています。

4. QR 分解の存在・一意性と演算量

Section titled “4. QR 分解の存在・一意性と演算量”

前節の鏡映を第 1 列、第 2 列、…と順に使って AA の左下を 0 にしていくと、上三角の RR が残り、掛けた鏡映の積が QQ になります。次の定理は、これがどんな行列でもできること、そして列が一次独立なら Gram–Schmidt の直交化と同じ結果になることを述べます。

定理 4.1(QR 分解の存在と一意性)✓

  1. 任意の A∈Rm×nA\in\mathbb{R}^{m\times n} について、直交行列 Q∈Rm×mQ\in\mathbb{R}^{m\times m} と上三角(i>ji>j で rij=0r_{ij}=0)の R∈Rm×nR\in\mathbb{R}^{m\times n} で A=QRA=QR となるものがある。QQ は高々 min⁡(m,n)\min(m,n) 個の Householder 鏡映の積にとれる。
  2. AA の列 a1,…,an\boldsymbol{a}_1,\ldots,\boldsymbol{a}_n が一次独立(したがって m≥nm\ge n)なら、列が正規直交な Q1∈Rm×nQ_1\in\mathbb{R}^{m\times n} と対角成分が正の上三角行列 R1∈Rn×nR_1\in\mathbb{R}^{n\times n} で A=Q1R1A=Q_1R_1 となるもの(薄い QR 分解)がただ 1 組存在する。Q1Q_1 の第 kk 列は a1,…,an\boldsymbol{a}_1,\ldots,\boldsymbol{a}_n を Gram–Schmidt の直交化で正規直交化した第 kk のベクトルであり、rkk=qkTakr_{kk}=\boldsymbol{q}_k^{\mathsf{T}}\boldsymbol{a}_k である。
証明(定理 4.1)

(1) A(1)=AA^{(1)}=A とし、k=1,…,min⁡(m,n)k=1,\ldots,\min(m,n) について次を行います。A(k)A^{(k)} の第 kk 列の第 kk〜mm 成分を x∈Rm−k+1\boldsymbol{x}\in\mathbb{R}^{m-k+1} とし、x≠0\boldsymbol{x}\ne\boldsymbol{0} なら P~k\widetilde P_k を x\boldsymbol{x} の Householder 鏡映、x=0\boldsymbol{x}=\boldsymbol{0} なら P~k=I\widetilde P_k=I として、Pk=diag⁡(Ik−1,P~k)P_k=\operatorname{diag}(I_{k-1},\widetilde P_k)、A(k+1)=PkA(k)A^{(k+1)}=P_kA^{(k)} とおきます。命題 3.2 により PkP_k は対称な直交行列で、A(k+1)A^{(k+1)} の第 kk 列の第 k+1k+1 成分以降は 0 です。PkP_k は第 11〜k−1k-1 行を変えず、第 j<kj<k 列については第 kk 行以降が帰納法の仮定により 0 なので、その列を変えません。よって R:=A(min⁡(m,n)+1)R:=A^{(\min(m,n)+1)} は上三角で、Q:=P1P2⋯Pmin⁡(m,n)Q:=P_1P_2\cdots P_{\min(m,n)} とおけば QT=Pmin⁡(m,n)⋯P1Q^{\mathsf{T}}=P_{\min(m,n)}\cdots P_1、R=QTAR=Q^{\mathsf{T}}A、A=QRA=QR です。

(2) 存在. (1) の A=QRA=QR で Q=(Q1 Q2)Q=(Q_1\ Q_2)(Q1Q_1 は最初の nn 列)、R=(R10)R=\binom{R_1}{0} と分けると A=Q1R1A=Q_1R_1 です。QQ は正則なので rank⁡R1=rank⁡R=rank⁡A=n\operatorname{rank}R_1=\operatorname{rank}R=\operatorname{rank}A=n、上三角の R1R_1 の行列式は対角成分の積なので対角成分はすべて 0 でありません。D=diag⁡(sgn⁡r11,…,sgn⁡rnn)D=\operatorname{diag}(\operatorname{sgn}r_{11},\ldots,\operatorname{sgn}r_{nn}) とすると D2=ID^2=I で、A=(Q1D)(DR1)A=(Q_1D)(DR_1) は対角が正の薄い QR 分解です。

一意性と Gram–Schmidt. A=Q1R1A=Q_1R_1 を任意の薄い QR 分解(対角は正)とし、Q1Q_1 の列を qk\boldsymbol{q}_k とします。ak=∑i≤krikqi\boldsymbol{a}_k=\sum_{i\le k}r_{ik}\boldsymbol{q}_i と rkk≠0r_{kk}\ne0 から、kk についての帰納法で span⁡(a1,…,ak)=span⁡(q1,…,qk)\operatorname{span}(\boldsymbol{a}_1,\ldots,\boldsymbol{a}_k)=\operatorname{span}(\boldsymbol{q}_1,\ldots,\boldsymbol{q}_k) です。また qkTak=∑i≤krikqkTqi=rkk>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 です。したがって q1,…,qn\boldsymbol{q}_1,\ldots,\boldsymbol{q}_n は Gram–Schmidt の直交化(定理 6.1)[内積空間とグラム・シュミット直交化] の条件 1・2・3 を満たし、同定理の一意性の主張により Gram–Schmidt の出力と一致します。R1=Q1TAR_1=Q_1^{\mathsf{T}}A も決まるので、薄い QR 分解は一意です。

Householder QR の算法. 実際の計算では QQ を作らず、鏡映 PkP_k をベクトル vk\boldsymbol{v}_k と βk\beta_k で持ち、残りの列 BB(第 kk〜mm 行、第 k+1k+1〜nn 列)に P~kB=B−(βkvk)(vkTB)\widetilde P_kB=B-(\beta_k\boldsymbol{v}_k)(\boldsymbol{v}_k^{\mathsf{T}}B) と作用させます。第 kk 列そのものは計算せず、対角に αk\alpha_k を書き、その下に 0 を書きます(命題 3.2 の 2)。

命題 4.2(Householder QR の演算量)✓

m≥nm\ge n とし、浮動小数の加減乗除を 1 回 1 演算と数える。上の算法で鏡映を残りの列に作用させる演算は、p×qp\times q の行列 BB に B−(βv)(vTB)B-(\beta\boldsymbol{v})(\boldsymbol{v}^{\mathsf{T}}B) を 4pq4pq 回で計算するとき合計

∑k=1n4(m−k+1)(n−k)=2mn2−23n3−2mn+2n2−43n\sum_{k=1}^{n}4(m-k+1)(n-k)=2mn^2-\frac23n^3-2mn+2n^2-\frac43n

回であり、鏡映のベクトルの計算は合計 O(mn)O(mn) 回である。したがって全体は 2mn2−23n3+O(mn)2mn^2-\frac23n^3+O(mn) である。

証明(命題 4.2)

wT=vTB\boldsymbol{w}^{\mathsf{T}}=\boldsymbol{v}^{\mathsf{T}}B は qq 個の長さ pp の内積で q(2p−1)q(2p-1) 回、βv\beta\boldsymbol{v} は pp 回、B−(βv)wTB-(\beta\boldsymbol{v})\boldsymbol{w}^{\mathsf{T}} は 2pq2pq 回で、主要部は 4pq4pq です(pp と qq の 1 次の項は O(p+q)O(p+q) で、kk について足しても O(mn)O(mn))。第 kk 段では p=m−k+1p=m-k+1、q=n−kq=n-k です。j=n−kj=n-k(0≤j≤n−10\le j\le n-1)とおくと p=m−n+1+jp=m-n+1+j で

∑j=0n−14(m−n+1+j)j=2(m−n+1)n(n−1)+23n(n−1)(2n−1)\sum_{j=0}^{n-1}4(m-n+1+j)j=2(m-n+1)n(n-1)+\frac23n(n-1)(2n-1)

を展開すると主張の式です。m≥nm\ge n なので −2mn+2n2−43n=O(mn)-2mn+2n^2-\frac43n=O(mn) です。vk\boldsymbol{v}_k・βk\beta_k の計算は第 kk 段で O(m−k+1)O(m-k+1) 回、合計 O(mn)O(mn) です。

m=nm=n なら 43n3\frac43n^3 で、LU 分解(23n3\frac23n^3)の 2 倍です。QQ を明示的に作るには、さらに鏡映を単位行列に作用させる O(m2n)O(m^2n) の手間がかかります。最小二乗問題では QTbQ^{\mathsf{T}}\boldsymbol{b} だけが要るので、QQ を作らずに鏡映を b\boldsymbol{b} に作用させます。

例 4.3(Hessenberg 行列の QR を Givens 回転で O(n²) で行う)

H∈Rn×nH\in\mathbb{R}^{n\times n} を上 Hessenberg 行列(i>j+1i>j+1 で hij=0h_{ij}=0)とします。k=1,…,n−1k=1,\ldots,n-1 の順に、第 kk・k+1k+1 行に Givens 回転 Gk=G(k,k+1;ck,sk)G_k=G(k,k+1;c_k,s_k) を掛けて (k+1,k)(k+1,k) 成分を 0 にします。第 kk 段の時点で第 kk 列の第 k+2k+2 行以降はもとから 0、それより左の列の第 kk・k+1k+1 行は 0 なので、回転は第 kk〜nn 列の 2 行だけを動かし、1 列あたり乗算 4 回・加算 2 回の 6 演算です。合計 ∑k=1n−16(n−k+1)=3n2+O(n)\sum_{k=1}^{n-1}6(n-k+1)=3n^2+O(n) 演算で、Gn−1⋯G1H=RG_{n-1}\cdots G_1H=R が上三角になります。Householder 鏡映をそのまま使うと 43n3\frac43n^3 演算かかるので、0 の構造を使う Givens 回転が有利です。この計算は QR 法(固有値計算)の 1 反復の中身です。

5. 丸め誤差の解析と後退安定性

Section titled “5. 丸め誤差の解析と後退安定性”

x∈Fp\boldsymbol{x}\in\mathbb{F}^p、x≠0\boldsymbol{x}\ne\boldsymbol{0} に対し、Householder 鏡映を次のように計算します( ^\widehat{\ } は計算値)。

s^=fl(xTx),σ^=fl(s^),v^1=fl(x1+sgn⁡(x1)σ^),v^i=xi (i≥2),β^=fl(1/fl(σ^∣v^1∣)),α^=−sgn⁡(x1)σ^.\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^\widehat s は先頭から順に足します。b∈Fp\boldsymbol{b}\in\mathbb{F}^p への作用は

t^=fl(v^Tb),τ^=fl(β^ t^),y^i=fl(bi−fl(τ^ 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)

で計算します。比べる相手は、同じ x\boldsymbol{x} から厳密に作った鏡映 PP(定義 3.1)です。

次の補題は、計算した鏡映が厳密な鏡映からどれだけずれるかを測ります。証明は、各演算に標準モデルの誤差因子 (1+δ)(1+\delta) を掛けて追いかけ、現れる γ\gamma の添字を足し合わせていく作業です。添字 14p+2914p+29 はその合計で、数そのものより「pp の 1 次式で済む」ことが大事です。

補題 5.1(鏡映 1 回の丸め誤差)✓

p≥1p\ge1、43pu<1/243pu<1/2 とし、上の計算でアンダーフロー・オーバーフローが起きないとする。v,β,α,P\boldsymbol{v},\beta,\alpha,P を x\boldsymbol{x} から厳密に作った量とする。

  1. v^1=v1(1+θv)\widehat v_1=v_1(1+\theta_v)、∣θv∣≤γp+2|\theta_v|\le\gamma_{p+2}、β^=β(1+θβ)\widehat\beta=\beta(1+\theta_\beta)、∣θβ∣≤γ4p+8|\theta_\beta|\le\gamma_{4p+8}。
  2. 任意の b∈Fp\boldsymbol{b}\in\mathbb{F}^p について ∥y^−Pb∥2≤γ14p+29∥b∥2\|\widehat{\boldsymbol{y}}-P\boldsymbol{b}\|_2\le\gamma_{14p+29}\|\boldsymbol{b}\|_2。
  3. ∥α^e1−Px∥2≤γp+1∥x∥2\|\widehat\alpha\boldsymbol{e}_1-P\boldsymbol{x}\|_2\le\gamma_{p+1}\|\boldsymbol{x}\|_2。
証明(補題 5.1)

以下、γ\gamma の和・積の評価には γₙ の計算規則(補題 3.2)[浮動小数点数と丸め誤差] を、∣δ∣≤u≤γ1|\delta|\le u\le\gamma_1 の形の丸めには 四則の標準モデル(系 3.1)[浮動小数点数と丸め誤差] を断らずに使います。現れる添字はすべて 43p43p 以下なので、規則の前提 ku<1ku<1 は満たされます。

σ^\widehat\sigma. 内積の丸め誤差(定理 3.3)[浮動小数と区間演算] により s^=∑ixi2(1+θ(i))\widehat s=\sum_ix_i^2(1+\theta^{(i)})、∣θ(i)∣≤γp|\theta^{(i)}|\le\gamma_p です。各項が非負なので s^=σ2(1+θs)\widehat s=\sigma^2(1+\theta_s)、θs=∑ixi2θ(i)/σ2\theta_s=\sum_ix_i^2\theta^{(i)}/\sigma^2、∣θs∣≤γp|\theta_s|\le\gamma_p と書けます。補題 2.2 の 2 で 1+θs=1+η\sqrt{1+\theta_s}=1+\eta、∣η∣≤γp|\eta|\le\gamma_p なので、σ^=σ(1+η)(1+δ)=σ(1+θσ)\widehat\sigma=\sigma(1+\eta)(1+\delta)=\sigma(1+\theta_\sigma)、∣θσ∣≤γp+1|\theta_\sigma|\le\gamma_{p+1} です。

(3). 命題 3.2 の 2 より Px=αe1P\boldsymbol{x}=\alpha\boldsymbol{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 です。

(1). sgn⁡(x1)x1=∣x1∣\operatorname{sgn}(x_1)x_1=|x_1| なので v^1=sgn⁡(x1)(∣x1∣+σ+σθσ)(1+δ1)\widehat v_1=\operatorname{sgn}(x_1)\bigl(|x_1|+\sigma+\sigma\theta_\sigma\bigr)(1+\delta_1) です。∣x1∣+σ+σθσ=(∣x1∣+σ)(1+θ′)|x_1|+\sigma+\sigma\theta_\sigma=(|x_1|+\sigma)(1+\theta')、θ′=σθσ/(∣x1∣+σ)\theta'=\sigma\theta_\sigma/(|x_1|+\sigma) とおくと ∣θ′∣≤∣θσ∣≤γp+1|\theta'|\le|\theta_\sigma|\le\gamma_{p+1} で(ここで符号の選び方が効く)、v1=sgn⁡(x1)(∣x1∣+σ)v_1=\operatorname{sgn}(x_1)(|x_1|+\sigma) から v^1=v1(1+θ′)(1+δ1)=v1(1+θv)\widehat v_1=v_1(1+\theta')(1+\delta_1)=v_1(1+\theta_v)、∣θv∣≤γp+2|\theta_v|\le\gamma_{p+2} です。次に fl(σ^∣v^1∣)=σ^∣v^1∣(1+δ2)\mathrm{fl}(\widehat\sigma|\widehat v_1|)=\widehat\sigma|\widehat v_1|(1+\delta_2)、β^=(1+δ3)/(σ^∣v^1∣(1+δ2))\widehat\beta=(1+\delta_3)/(\widehat\sigma|\widehat v_1|(1+\delta_2)) で、β=1/(σ∣v1∣)\beta=1/(\sigma|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+δ2)−1=1−δ2/(1+δ2)(1+\delta_2)^{-1}=1-\delta_2/(1+\delta_2) で ∣δ2∣/(1−u)≤γ1|\delta_2|/(1-u)\le\gamma_1 なので 1+θ11+\theta_1、残りの 2 つは 補題 2.2 の 1 でそれぞれ 1+θ2p+21+\theta_{2p+2}、1+θ2p+41+\theta_{2p+4} となり、積は 1+θβ1+\theta_\beta、∣θβ∣≤γ1+1+(2p+2)+(2p+4)=γ4p+8|\theta_\beta|\le\gamma_{1+1+(2p+2)+(2p+4)}=\gamma_{4p+8} です。

(2). 厳密な値を T=vTbT=\boldsymbol{v}^{\mathsf{T}}\boldsymbol{b}、z=βTv\boldsymbol{z}=\beta T\boldsymbol{v} とおくと Pb=b−zP\boldsymbol{b}=\boldsymbol{b}-\boldsymbol{z} です。

(i) v^\widehat{\boldsymbol{v}} は v\boldsymbol{v} と第 1 成分だけが違い、∣v^∣≤(1+γp+2)∣v∣|\widehat{\boldsymbol{v}}|\le(1+\gamma_{p+2})|\boldsymbol{v}| です。内積の丸め誤差から t^=v^Tb+e\widehat t=\widehat{\boldsymbol{v}}^{\mathsf{T}}\boldsymbol{b}+e、∣e∣≤γp∣v^∣T∣b∣|e|\le\gamma_p|\widehat{\boldsymbol{v}}|^{\mathsf{T}}|\boldsymbol{b}| で、v^Tb=T+θvv1b1\widehat{\boldsymbol{v}}^{\mathsf{T}}\boldsymbol{b}=T+\theta_vv_1b_1 なので t^=T+e′\widehat t=T+e'、

∣e′∣≤(γp+2+γp(1+γp+2))∣v∣T∣b∣≤γ2p+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

です(最後は 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')、∣θa∣≤γ4p+9|\theta_a|\le\gamma_{4p+9} です。q^i:=fl(τ^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}) で、v^i(1+δ5,i)=vi+fi\widehat v_i(1+\delta_{5,i})=v_i+f_i と書くと ∣fi∣≤γp+3∣vi∣|f_i|\le\gamma_{p+3}|v_i|、したがって ∥f∥2≤γp+3∥v∥2\|\boldsymbol{f}\|_2\le\gamma_{p+3}\|\boldsymbol{v}\|_2 です。よって q^=β(1+θa)(T+e′)(v+f)\widehat{\boldsymbol{q}}=\beta(1+\theta_a)(T+e')(\boldsymbol{v}+\boldsymbol{f}) です。

(iii) (1+θa)(T+e′)(v+f)−Tv(1+\theta_a)(T+e')(\boldsymbol{v}+\boldsymbol{f})-T\boldsymbol{v} を展開すると、θa,e′,f\theta_a,e',\boldsymbol{f} の少なくとも 1 つを含む 7 項の和です。∣T∣≤∥v∥2∥b∥2|T|\le\|\boldsymbol{v}\|_2\|\boldsymbol{b}\|_2、∣e′∣≤γ2p+2∥v∥2∥b∥2|e'|\le\gamma_{2p+2}\|\boldsymbol{v}\|_2\|\boldsymbol{b}\|_2、∥f∥2≤γp+3∥v∥2\|\boldsymbol{f}\|_2\le\gamma_{p+3}\|\boldsymbol{v}\|_2 を各項に使って足すと

∥q^−z∥2≤β∥v∥22∥b∥2[(1+γ4p+9)(1+γ2p+2)(1+γp+3)−1]≤2γ7p+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

です(β∥v∥22=2\beta\|\boldsymbol{v}\|_2^2=2)。

(iv) y^i=(bi−q^i)(1+δ6,i)\widehat y_i=(b_i-\widehat q_i)(1+\delta_{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 です。b−q^=Pb−(q^−z)\boldsymbol{b}-\widehat{\boldsymbol{q}}=P\boldsymbol{b}-(\widehat{\boldsymbol{q}}-\boldsymbol{z}) と ∥Pb∥2=∥b∥2\|P\boldsymbol{b}\|_2=\|\boldsymbol{b}\|_2(命題 3.2 の 1)から

∥y^−Pb∥2≤u∥b∥2+(1+u)∥q^−z∥2≤(u+(1+u)γ14p+28)∥b∥2≤γ14p+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

です(2γ7p+14≤γ14p+282\gamma_{7p+14}\le\gamma_{14p+28})。

定数 14p+2914p+29 は評価を簡単にするための粗いもので、丁寧に数えれば小さくできます。大事なのは、誤差が b\boldsymbol{b} の大きさに比例し、pp の 1 次でしか増えないことです。

補題 5.2(誤差を含む直交変換の積み重ね)✓

Q1,…,Qr∈Rp×pQ_1,\ldots,Q_r\in\mathbb{R}^{p\times p} を直交行列、δ≥0\delta\ge0 とし、y0=b\boldsymbol{y}_0=\boldsymbol{b} と y1,…,yr\boldsymbol{y}_1,\ldots,\boldsymbol{y}_r が ∥yk−Qkyk−1∥2≤δ∥yk−1∥2\|\boldsymbol{y}_k-Q_k\boldsymbol{y}_{k-1}\|_2\le\delta\|\boldsymbol{y}_{k-1}\|_2 を満たすとする。このとき

∥yr−Qr⋯Q1b∥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

であり、δ≤γk\delta\le\gamma_k、rku<1rku<1 なら右辺は γrk∥b∥2\gamma_{rk}\|\boldsymbol{b}\|_2 以下である。

証明(補題 5.2)

∥Qkyk−1∥2=∥yk−1∥2\|Q_k\boldsymbol{y}_{k-1}\|_2=\|\boldsymbol{y}_{k-1}\|_2 なので ∥yk∥2≤(1+δ)∥yk−1∥2\|\boldsymbol{y}_k\|_2\le(1+\delta)\|\boldsymbol{y}_{k-1}\|_2、帰納的に ∥yk∥2≤(1+δ)k∥b∥2\|\boldsymbol{y}_k\|_2\le(1+\delta)^k\|\boldsymbol{b}\|_2 です。dk=yk−Qk⋯Q1b\boldsymbol{d}_k=\boldsymbol{y}_k-Q_k\cdots Q_1\boldsymbol{b} とおくと dk=(yk−Qkyk−1)+Qkdk−1\boldsymbol{d}_k=(\boldsymbol{y}_k-Q_k\boldsymbol{y}_{k-1})+Q_k\boldsymbol{d}_{k-1} なので

∥dk∥2≤δ(1+δ)k−1∥b∥2+∥dk−1∥2,∥dr∥2≤∑k=1rδ(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

です(d0=0\boldsymbol{d}_0=\boldsymbol{0})。後半は、γₙ の計算規則(補題 3.2)[浮動小数点数と丸め誤差] の 2 を繰り返して (1+γk)r≤1+γrk(1+\gamma_k)^r\le1+\gamma_{rk} とすればよいです。

5.3. Householder QR と Givens QR の後退安定性

Section titled “5.3. Householder QR と Givens QR の後退安定性”

算法(浮動小数). A∈Fm×nA\in\mathbb{F}^{m\times n}、m≥nm\ge n とし、k=1,…,nk=1,\ldots,n について、現在の行列の第 kk 列の第 kk〜mm 成分を x\boldsymbol{x} とします。x=0\boldsymbol{x}=\boldsymbol{0} なら何もしません。そうでなければ 5.1 の方法で v^,β^,α^\widehat{\boldsymbol{v}},\widehat\beta,\widehat\alpha を計算し、第 k+1k+1〜nn 列の第 kk〜mm 行に鏡映を作用させ、第 kk 列の第 kk 成分を α^\widehat\alpha、第 k+1k+1〜mm 成分を 00 とします。最後の行列を R^\widehat R とします。各段で使った x\boldsymbol{x}(計算値)から厳密に作った鏡映を P~k\widetilde P_k(x=0\boldsymbol{x}=\boldsymbol{0} なら II)、Pk=diag⁡(Ik−1,P~k)P_k=\operatorname{diag}(I_{k-1},\widetilde P_k) とします。

各段の誤差は 5.1 の補題で、段を重ねたときの誤差の増え方は 5.2 の補題で抑えられます。次の定理は、この 2 つを列ごとに組み合わせたものです。

定理 5.3(Householder QR の後退安定性)✓

上の算法でアンダーフロー・オーバーフローが起きず、86mnu<186mnu<1 とする。Q=P1P2⋯PnQ=P_1P_2\cdots P_n は直交行列で、

  1. A+ΔA=QR^A+\Delta A=Q\widehat R、∥Δaj∥2≤γ43mn∥aj∥2\|\Delta\boldsymbol{a}_j\|_2\le\gamma_{43mn}\|\boldsymbol{a}_j\|_2(j=1,…,nj=1,\ldots,n、Δaj\Delta\boldsymbol{a}_j は ΔA\Delta A の第 jj 列)。とくに ∥ΔA∥F≤γ43mn∥A∥F\|\Delta A\|_F\le\gamma_{43mn}\|A\|_F。
  2. b∈Fm\boldsymbol{b}\in\mathbb{F}^m に同じ鏡映を順に作用させた計算値 c^\widehat{\boldsymbol{c}} について、c^=QT(b+Δb)\widehat{\boldsymbol{c}}=Q^{\mathsf{T}}(\boldsymbol{b}+\Delta\boldsymbol{b})、∥Δb∥2≤γ43mn∥b∥2\|\Delta\boldsymbol{b}\|_2\le\gamma_{43mn}\|\boldsymbol{b}\|_2。
証明(定理 5.3)

PkP_k は 命題 3.2 により対称な直交行列なので、QQ は直交行列で QT=Pn⋯P1Q^{\mathsf{T}}=P_n\cdots P_1 です。第 kk 段の x\boldsymbol{x} の長さは p=m−k+1≤mp=m-k+1\le m で、14p+29≤43m14p+29\le43m、p+1≤43mp+1\le43m です。また 86mnu<186mnu<1 から 43pu≤43mu<1/243pu\le43mu<1/2 なので 補題 5.1 が使えます。

(1) 第 jj 列を固定し、第 kk 段の後の第 jj 列(計算値)を yk\boldsymbol{y}_k、y0=aj\boldsymbol{y}_0=\boldsymbol{a}_j とします。

  • k<jk<j: 第 11〜k−1k-1 成分は変わらず、PkP_k もそこを変えません。第 kk〜mm 成分には鏡映が作用し、補題 5.1 の 2 から ∥yk−Pkyk−1∥2≤γ43m∥yk−1∥2\|\boldsymbol{y}_k-P_k\boldsymbol{y}_{k-1}\|_2\le\gamma_{43m}\|\boldsymbol{y}_{k-1}\|_2。
  • k=jk=j: 第 jj 列が x\boldsymbol{x} そのもので、補題 5.1 の 3 から同じ評価(x=0\boldsymbol{x}=\boldsymbol{0} なら誤差 0)。
  • k>jk>j: 第 jj 列は変わらず、第 kk 行以降は 0 なので Pkyk−1=yk−1P_k\boldsymbol{y}_{k-1}=\boldsymbol{y}_{k-1}、誤差 0。

補題 5.2(r=nr=n、δ=γ43m\delta=\gamma_{43m}、43mnu<143mnu<1)により r^j:=yn\widehat{\boldsymbol{r}}_j:=\boldsymbol{y}_n は ∥r^j−QTaj∥2≤γ43mn∥aj∥2\|\widehat{\boldsymbol{r}}_j-Q^{\mathsf{T}}\boldsymbol{a}_j\|_2\le\gamma_{43mn}\|\boldsymbol{a}_j\|_2 を満たします。Δaj:=Qr^j−aj=Q(r^j−QTaj)\Delta\boldsymbol{a}_j:=Q\widehat{\boldsymbol{r}}_j-\boldsymbol{a}_j=Q(\widehat{\boldsymbol{r}}_j-Q^{\mathsf{T}}\boldsymbol{a}_j) とおけば、QQ は 2 ノルムを保つので主張の評価です。Frobenius ノルムの評価は列ごとの評価の 2 乗和です。

(2) 各段で 補題 5.1 の 2 を使い、(1) と同様に 補題 5.2 を適用して Δb:=Qc^−b\Delta\boldsymbol{b}:=Q\widehat{\boldsymbol{c}}-\boldsymbol{b} とおけばよいです。

この定理は「R^\widehat R は AA の厳密な QR 分解の RR に近い」とは言っていません。言っているのは「R^\widehat R は、各列を相対 γ43mn\gamma_{43mn} だけ動かした行列の、厳密な QR 分解の RR である」ことです。前進誤差(計算結果そのものと厳密な答えとのずれ)は QR 分解の条件数に依存します。また QQ は計算で現れる行列ではなく、解析のための厳密な直交行列です。計算機の中で QQ を作った場合については次の系が成り立ちます。

系 5.4(計算した Q の直交性)✓

定理 5.3 の仮定のもとで、ImI_m の各列に鏡映を Pn,…,P1P_n,\ldots,P_1 の順に作用させて計算した Q^\widehat Q は Q^=Q(I+Δ)\widehat Q=Q(I+\Delta)、∥Δ∥F≤m γ43mn\|\Delta\|_F\le\sqrt m\,\gamma_{43mn} を満たし、

∥Q^TQ^−I∥2≤2m γ43mn+mγ43mn2.\|\widehat Q^{\mathsf{T}}\widehat Q-I\|_2\le2\sqrt m\,\gamma_{43mn}+m\gamma_{43mn}^2.
証明(系 5.4)

ei\boldsymbol{e}_i に Pn,…,P1P_n,\ldots,P_1 の順に作用させる計算に、補題 5.1 の 2 と 補題 5.2(QkQ_k を Pn+1−kP_{n+1-k} とする)を使うと、第 ii 列は P1⋯Pnei+di=Q(ei+QTdi)P_1\cdots P_n\boldsymbol{e}_i+\boldsymbol{d}_i=Q(\boldsymbol{e}_i+Q^{\mathsf{T}}\boldsymbol{d}_i)、∥di∥2≤γ43mn\|\boldsymbol{d}_i\|_2\le\gamma_{43mn} です。Δ\Delta の第 ii 列を QTdiQ^{\mathsf{T}}\boldsymbol{d}_i とすれば ∥Δ∥F2≤mγ43mn2\|\Delta\|_F^2\le m\gamma_{43mn}^2。Q^TQ^−I=Δ+ΔT+ΔTΔ\widehat Q^{\mathsf{T}}\widehat Q-I=\Delta+\Delta^{\mathsf{T}}+\Delta^{\mathsf{T}}\Delta で、Frobenius ノルムの性質(命題 4.4)[行列のノルムと線形方程式の条件数] の 3 から ∥Δ∥2≤∥Δ∥F\|\Delta\|_2\le\|\Delta\|_F、劣乗法性から ∥ΔTΔ∥2≤∥Δ∥22\|\Delta^{\mathsf{T}}\Delta\|_2\le\|\Delta\|_2^2 です。

Givens QR の算法(浮動小数). k=1,…,nk=1,\ldots,n、i=k+1,…,mi=k+1,\ldots,m の順に、現在の (i,k)(i,k) 成分 bb が 0 でなければ、(k,k)(k,k) 成分 aa と合わせて r^=fl(fl(fl(a2)+fl(b2)))\widehat r=\mathrm{fl}\bigl(\sqrt{\mathrm{fl}(\mathrm{fl}(a^2)+\mathrm{fl}(b^2))}\bigr)、c^=fl(a/r^)\widehat c=\mathrm{fl}(a/\widehat r)、s^=fl(b/r^)\widehat s=\mathrm{fl}(b/\widehat r) を計算し、第 k+1k+1〜nn 列の第 kk・ii 行を (x,y)↦(fl(fl(c^x)+fl(s^y)), fl(fl(c^y)−fl(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))) で置き換え、(k,k)(k,k) 成分を r^\widehat r、(i,k)(i,k) 成分を 00 とします。比べる相手は、計算値の a,ba,b から厳密に作った回転 G=G(k,i;a/r,b/r)G=G(k,i;a/r,b/r) です。

定理 5.5(Givens QR の後退安定性)✓

上の算法でアンダーフロー・オーバーフローが起きず、36mnu<136mnu<1 とする。使った回転(厳密)の積を QT=GN⋯G1Q^{\mathsf{T}}=G_N\cdots G_1(N≤mnN\le mn)とすると、A+ΔA=QR^A+\Delta A=Q\widehat R、∥Δaj∥2≤γ18mn∥aj∥2\|\Delta\boldsymbol{a}_j\|_2\le\gamma_{18mn}\|\boldsymbol{a}_j\|_2。

証明(定理 5.5)

回転 1 回. fl(a2)+fl(b2)\mathrm{fl}(a^2)+\mathrm{fl}(b^2) の丸めを含めて fl(fl(a2)+fl(b2))=r2(1+θ2)\mathrm{fl}(\mathrm{fl}(a^2)+\mathrm{fl}(b^2))=r^2(1+\theta_2)(a2(1+δ)+b2(1+δ′)=r2(1+η)a^2(1+\delta)+b^2(1+\delta')=r^2(1+\eta)、∣η∣≤u|\eta|\le u と和の丸め)なので、補題 2.2 の 2 と平方根の丸めで r^=r(1+θr)\widehat r=r(1+\theta_r)、∣θr∣≤γ3|\theta_r|\le\gamma_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∣≤γ7|\theta_c|\le\gamma_7、同様に s^=s(1+θs)\widehat s=s(1+\theta_s)、∣θs∣≤γ7|\theta_s|\le\gamma_7 です。作用させた成分は x^′=cx(1+θ9)+sy(1+θ9′)\widehat x'=cx(1+\theta_9)+sy(1+\theta_9')、y^′=cy(1+θ9′′)−sx(1+θ9′′′)\widehat y'=cy(1+\theta_9'')-sx(1+\theta_9''') と書けるので、誤差ベクトルの成分は γ9(∣c∣∣x∣+∣s∣∣y∣)\gamma_9(|c||x|+|s||y|)、γ9(∣s∣∣x∣+∣c∣∣y∣)\gamma_9(|s||x|+|c||y|) 以下です。Cauchy–Schwarz の不等式で (∣c∣∣x∣+∣s∣∣y∣)2≤(c2+s2)(x2+y2)(|c||x|+|s||y|)^2\le(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 です。0 にした列では、厳密な回転の結果 (r,0)(r,0) との差は ∣r^−r∣≤γ3r≤γ18∥(a,b)∥2|\widehat r-r|\le\gamma_3r\le\gamma_{18}\|(a,b)\|_2 です。どちらの場合も、2 行以外の成分は変わらず、列全体で ∥y^−Gy∥2≤γ18∥y∥2\|\widehat{\boldsymbol{y}}-G\boldsymbol{y}\|_2\le\gamma_{18}\|\boldsymbol{y}\|_2 です。

積み重ね. 第 kk 段の回転は第 kk 行と第 i>ki>k 行だけを動かし、第 j<kj<k 列のそれらの成分は 0 なので、その列には厳密に作用します(誤差 0)。回転の総数は N=∑k=1n(m−k)≤mnN=\sum_{k=1}^n(m-k)\le mn で、命題 3.4 により各 GℓG_\ell は直交行列です。補題 5.2(δ=γ18\delta=\gamma_{18}、r=Nr=N、18Nu≤18mnu<118Nu\le18mnu<1)から、定理 5.3 の証明と同じく ∥r^j−QTaj∥2≤γ18mn∥aj∥2\|\widehat{\boldsymbol{r}}_j-Q^{\mathsf{T}}\boldsymbol{a}_j\|_2\le\gamma_{18mn}\|\boldsymbol{a}_j\|_2 で、Δaj=Qr^j−aj\Delta\boldsymbol{a}_j=Q\widehat{\boldsymbol{r}}_j-\boldsymbol{a}_j とおけばよいです。補題 2.2 の前提(2⋅3u<12\cdot3u<1)や γ18\gamma_{18} の定義の前提は 36mnu<136mnu<1 に含まれます。

注意 5.6

互いに重ならない行の組への回転は同時に(順序によらず)行えるので、回転を O(m+n)O(m+n) 個の「段」にまとめると、1 列が受ける誤差の積み重ねは段の数で数えられ、評価は γ~m+n\widetilde\gamma_{m+n} にまで改善されます(Higham, §19.6)。上の定理はこの改善を使わない素朴な版です。

6. Gram–Schmidt の直交化と直交性の喪失

Section titled “6. Gram–Schmidt の直交化と直交性の喪失”

定義 6.1(古典 Gram–Schmidt と修正 Gram–Schmidt)↗

列が一次独立な A=(a1,…,an)∈Rm×nA=(\boldsymbol{a}_1,\ldots,\boldsymbol{a}_n)\in\mathbb{R}^{m\times n} について、k=1,…,nk=1,\ldots,n の順に次で qk\boldsymbol{q}_k と RR の第 kk 列を作る。

  • 古典 Gram–Schmidt(CGS): rik=qiTakr_{ik}=\boldsymbol{q}_i^{\mathsf{T}}\boldsymbol{a}_k(i<ki<k)、wk=ak−∑i<krikqi\boldsymbol{w}_k=\boldsymbol{a}_k-\sum_{i<k}r_{ik}\boldsymbol{q}_i。
  • 修正 Gram–Schmidt(MGS): wk(1)=ak\boldsymbol{w}_k^{(1)}=\boldsymbol{a}_k、i=1,…,k−1i=1,\ldots,k-1 について rik=qiTwk(i)r_{ik}=\boldsymbol{q}_i^{\mathsf{T}}\boldsymbol{w}_k^{(i)}、wk(i+1)=wk(i)−rikqi\boldsymbol{w}_k^{(i+1)}=\boldsymbol{w}_k^{(i)}-r_{ik}\boldsymbol{q}_i。wk=wk(k)\boldsymbol{w}_k=\boldsymbol{w}_k^{(k)}。

どちらも rkk=∥wk∥2r_{kk}=\|\boldsymbol{w}_k\|_2、qk=wk/rkk\boldsymbol{q}_k=\boldsymbol{w}_k/r_{kk} とする。

CGS は係数をすべて元の ak\boldsymbol{a}_k との内積で計算し、MGS は「それまでの方向を取り除いた残り」との内積で計算します。

命題 6.2(厳密な算術では CGS と MGS は一致する)✓

厳密な算術では、CGS と MGS は同じ q1,…,qn\boldsymbol{q}_1,\ldots,\boldsymbol{q}_n と RR を与え、それは 定理 4.1 の 2 の薄い QR 分解(対角が正)に一致する。

証明(命題 6.2)

kk についての帰納法で、両者の q1,…,qk−1\boldsymbol{q}_1,\ldots,\boldsymbol{q}_{k-1} が一致して正規直交であると仮定します。MGS で wk(i)=ak−∑j<irjkqj\boldsymbol{w}_k^{(i)}=\boldsymbol{a}_k-\sum_{j<i}r_{jk}\boldsymbol{q}_j ですから、qiTqj=0\boldsymbol{q}_i^{\mathsf{T}}\boldsymbol{q}_j=0(j<ij<i)より qiTwk(i)=qiTak\boldsymbol{q}_i^{\mathsf{T}}\boldsymbol{w}_k^{(i)}=\boldsymbol{q}_i^{\mathsf{T}}\boldsymbol{a}_k で、係数 rikr_{ik} は CGS と同じです。したがって wk\boldsymbol{w}_k も同じです。CGS の漸化式は、実内積 ⟨ak,qi⟩=qiTak\langle\boldsymbol{a}_k,\boldsymbol{q}_i\rangle=\boldsymbol{q}_i^{\mathsf{T}}\boldsymbol{a}_k で書いた Gram–Schmidt の直交化(定理 6.1)[内積空間とグラム・シュミット直交化] の漸化式そのものなので、wk≠0\boldsymbol{w}_k\ne\boldsymbol{0} で q1,…,qk\boldsymbol{q}_1,\ldots,\boldsymbol{q}_k は正規直交です。作り方から ak=∑i<krikqi+rkkqk\boldsymbol{a}_k=\sum_{i<k}r_{ik}\boldsymbol{q}_i+r_{kk}\boldsymbol{q}_k、すなわち A=Q1R1A=Q_1R_1、rkk=∥wk∥2>0r_{kk}=\|\boldsymbol{w}_k\|_2>0 で、定理 4.1 の 2 の一意性から主張が従います。

浮動小数では両者は違う結果を与えます。違いが目に見える最小の例は 3 列です(2 列では CGS と MGS は同じ演算を行います。演習を参照)。

次の例で丸められるのは ε2=10−16\varepsilon^2=10^{-16} です。倍精度では 11 に足しても桁に収まらず消えるので、1+ε21+\varepsilon^2 は 11 になります。この消えた分が、直交性の喪失のもとになります。

例 6.3(古典 Gram–Schmidt が直交性を完全に失う例)

ε>0\varepsilon>0 を fl(1+ε2)=1\mathrm{fl}(1+\varepsilon^2)=1 となるほど小さく(倍精度で ε=10−8\varepsilon=10^{-8})とり、

A=(111ε000ε000ε)A=\begin{pmatrix}1&1&1\\\varepsilon&0&0\\0&\varepsilon&0\\0&0&\varepsilon\end{pmatrix}

とします(列は一次独立)。計算では ∥a1∥2=1+ε2\|\boldsymbol{a}_1\|_2=\sqrt{1+\varepsilon^2} が 11 に丸められ、q^1=(1,ε,0,0)T\widehat{\boldsymbol{q}}_1=(1,\varepsilon,0,0)^{\mathsf{T}} です。q1Ta2=1\boldsymbol{q}_1^{\mathsf{T}}\boldsymbol{a}_2=1 で w2=(0,−ε,ε,0)T\boldsymbol{w}_2=(0,-\varepsilon,\varepsilon,0)^{\mathsf{T}}、q^2=(0,−1,1,0)T/2\widehat{\boldsymbol{q}}_2=(0,-1,1,0)^{\mathsf{T}}/\sqrt2。

  • CGS: q1Ta3=1\boldsymbol{q}_1^{\mathsf{T}}\boldsymbol{a}_3=1、q2Ta3=0\boldsymbol{q}_2^{\mathsf{T}}\boldsymbol{a}_3=0 なので w3=(0,−ε,0,ε)T\boldsymbol{w}_3=(0,-\varepsilon,0,\varepsilon)^{\mathsf{T}}、q^3=(0,−1,0,1)T/2\widehat{\boldsymbol{q}}_3=(0,-1,0,1)^{\mathsf{T}}/\sqrt2 で、q^2Tq^3=1/2\widehat{\boldsymbol{q}}_2^{\mathsf{T}}\widehat{\boldsymbol{q}}_3=1/2。
  • MGS: q1\boldsymbol{q}_1 を除いた w3(2)=(0,−ε,0,ε)T\boldsymbol{w}_3^{(2)}=(0,-\varepsilon,0,\varepsilon)^{\mathsf{T}} との内積 q2Tw3(2)=ε/2\boldsymbol{q}_2^{\mathsf{T}}\boldsymbol{w}_3^{(2)}=\varepsilon/\sqrt2 を使うので w3=(0,−ε/2,−ε/2,ε)T\boldsymbol{w}_3=(0,-\varepsilon/2,-\varepsilon/2,\varepsilon)^{\mathsf{T}}、q^3=(0,−1,−1,2)T/6\widehat{\boldsymbol{q}}_3=(0,-1,-1,2)^{\mathsf{T}}/\sqrt6 で、q^2Tq^3=0\widehat{\boldsymbol{q}}_2^{\mathsf{T}}\widehat{\boldsymbol{q}}_3=0。

どちらも q^1Tq^2=−ε/2\widehat{\boldsymbol{q}}_1^{\mathsf{T}}\widehat{\boldsymbol{q}}_2=-\varepsilon/\sqrt2 程度の誤差は残ります。CGS では q2\boldsymbol{q}_2 の方向の成分が a3\boldsymbol{a}_3 の段階で 0 と計算され、q1\boldsymbol{q}_1 を引いた後に初めて現れる q2\boldsymbol{q}_2 方向の成分が取り除かれません。倍精度で実行すると、CGS の Q^TQ^\widehat Q^{\mathsf{T}}\widehat Q の (2,3)(2,3) 成分は 0.50.5、MGS では 0.00.0(表示 10 桁)でした。この行列は Läuchli の例として知られる形です(Björck, Ch. 2)。

注意 6.4

MGS の直交性(主張のみ、定理環境にしない). 列の数を nn、κ2(A)u\kappa_2(A)u が十分小さいとき、MGS の Q^\widehat Q は ∥I−Q^TQ^∥2≤c1(m,n) κ2(A) u\|I-\widehat Q^{\mathsf{T}}\widehat Q\|_2\le c_1(m,n)\,\kappa_2(A)\,u を満たします(Björck の教科書 Ch. 2)。CGS では喪失が κ2(A)2u\kappa_2(A)^2u の程度まで悪化しうること、κ2(A)2u\kappa_2(A)^2u が十分小さければその程度で抑えられることが知られています(Giraud–Langou–Rozložník 2005 の概説)。丸めの解析が長いのでこの記事では証明せず、以後の証明でも使いません。

注意 6.5

再直交化. CGS の各段で wk\boldsymbol{w}_k に対してもう一度同じ射影を行う(CGS2、“twice is enough”)と、κ2(A)u\kappa_2(A)u が十分小さい範囲で直交性は uu の程度に回復します(同じ概説を参照)。CGS2 は内積をまとめて行列ベクトル積で計算できるので、並列計算機では MGS より速いことが多く、Krylov 部分空間法の Arnoldi 過程でも使われます。

注意 6.6

MGS と Householder の関係. AA の上に n×nn\times n の零行列を積んだ (OA)\binom{O}{A} に Householder QR を施すと、浮動小数でも MGS と同じ数値が現れます(Björck–Paige 1992)。この同値性により、MGS の R^\widehat R と Q^\widehat Q の組は「直交性は崩れても、最小二乗問題を解くには後退安定」に使えることが示されます。

例 6.7(4 通りの直交化の比較)

特異値を 11 から 1/κ1/\kappa まで等比に並べた 60×2060\times20 の行列 A=UΣVTA=U\Sigma V^{\mathsf{T}}(U,VU,V は乱数行列の QR 分解の QQ)で、CGS・MGS・CGS2・numpy.linalg.qr(LAPACK の Householder QR)の直交性 ∥I−Q^TQ^∥2\|I-\widehat Q^{\mathsf{T}}\widehat Q\|_2 を比べます。

# Python 3.12.10 / NumPy 2.5.2 /乱数種 20261006
import numpy as np
def cgs(A, passes=1): # 古典 Gram-Schmidt(passes=2 で再直交化)
m, n = A.shape; Q = np.zeros((m, n)); R = np.zeros((n, n))
for k in range(n):
v = A[:, k].copy()
for _ in range(passes):
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]
return Q, R
def mgs(A): # 修正 Gram-Schmidt
m, n = A.shape; V = A.copy(); Q = np.zeros((m, n))
R = np.zeros((n, n))
for k in range(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:])
return Q, R
rng = np.random.default_rng(20261006)
m, n = 60, 20
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 と、mpmath の 50 桁で計算した QR 分解に対する Householder の Q^\widehat Q・R^\widehat R の前進誤差(列の符号をそろえて比べる)を見ます。

# (上のブロックの続き。cgs・mgs・U・V・m・n を使う)
import mpmath as mp # mpmath 1.3.0
mp.mp.dps = 50
nrm = lambda X: np.linalg.norm(X, 2)
print("kappa CGS MGS CGS2 Househ. Q fwd R fwd")
for e in (2, 6, 10):
A = U @ np.diag(np.logspace(0, -e, n)) @ V.T
QRs = [cgs(A), mgs(A), cgs(A, 2), np.linalg.qr(A)]
Q, R = QRs[3]
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]
fq = nrm(Q * d - Qe)
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) 既知値: AA の 2 ノルムの条件数は構成から厳密に κ\kappa です。系 5.4 が予言するとおり、Householder の直交性は κ\kappa によらず 10−1510^{-15} の程度です。(b) 別精度・別手法: 4 通りの直交化を並べ、Householder の Q^,R^\widehat Q,\widehat R は mpmath の 50 桁の QR 分解と比べました。R^\widehat R の前進誤差は uu の程度、Q^\widehat Q の前進誤差は κu\kappa u の程度(κu=1.1×10−14,10−10,10−6\kappa u=1.1\times10^{-14},10^{-10},10^{-6} に対し 7×10−15,2×10−11,1×10−77\times10^{-15},2\times10^{-11},1\times10^{-7})で、Q^\widehat Q は「真の QQ からは κu\kappa u ずれるが、それ自体はほぼ直交」です。これは 定理 5.3 の「近いデータの厳密な分解」という形の主張と合っています。(c) 次数: κ\kappa を 10210^2 倍するごとに、CGS の喪失はおよそ 10410^4 倍(κ2u\kappa^2u に比例、κ=108\kappa=10^8 以降は O(1)O(1) で飽和)、MGS はおよそ 10210^2 倍(κu\kappa u に比例)になり、CGS2 と Householder は変わりません。後退誤差はどの方法でも uu の程度で、違いは直交性にだけ出ます。

演習 7.1易

x=(3,4)T\boldsymbol{x}=(3,4)^{\mathsf{T}} の Householder 鏡映 v,β,P\boldsymbol{v},\beta,P を求め、PxP\boldsymbol{x} を計算せよ。また x=(1,10−9)T\boldsymbol{x}=(1,10^{-9})^{\mathsf{T}} について、逆の符号 v′=x−sgn⁡(x1)∥x∥2e1\boldsymbol{v}'=\boldsymbol{x}-\operatorname{sgn}(x_1)\|\boldsymbol{x}\|_2\boldsymbol{e}_1 を倍精度で計算すると何が起きるか説明せよ。

解答

σ=5\sigma=5、v=(8,4)T\boldsymbol{v}=(8,4)^{\mathsf{T}}、vTv=80=2σ∣v1∣\boldsymbol{v}^{\mathsf{T}}\boldsymbol{v}=80=2\sigma|v_1|、β=1/40\beta=1/40 で

P=I−140(64323216)=(−0.6−0.8−0.80.6),Px=(−5,0)TP=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}}

で、命題 3.2 の 2 のとおり α=−5\alpha=-5 です。後半: ∥x∥2=1+10−18\|\boldsymbol{x}\|_2=\sqrt{1+10^{-18}} は倍精度で 11 に丸められるので v1′=1−1=0v_1'=1-1=0 となり、v′=(0,10−9)T\boldsymbol{v}'=(0,10^{-9})^{\mathsf{T}} です。厳密には v1′=1−1+10−18≈−5×10−19v_1'=1-\sqrt{1+10^{-18}}\approx-5\times10^{-19} なので、v1′v_1' の相対誤差は 100% です。この v′\boldsymbol{v}' から作った鏡映は第 2 成分の符号を反転するだけで、x\boldsymbol{x} を e1\boldsymbol{e}_1 の方向に写しません((1,−10−9)(1,-10^{-9}) になる)。定義の符号では v1=2v_1=2 で桁落ちは起きません。

演習 7.2易

A=(1100)A=\begin{pmatrix}1&1\\0&0\end{pmatrix} について、RR の対角成分が非負の QR 分解 A=QRA=QR が 2 通り以上あることを示し、定理 4.1 の 2 で列の一次独立性が必要な理由を説明せよ。

解答

Q=IQ=I、R=AR=A と、Q′=diag⁡(1,−1)Q'=\operatorname{diag}(1,-1)、R′=Q′TA=AR'=Q'^{\mathsf{T}}A=A はどちらも A=QRA=QR で、RR の対角は (1,0)(1,0) で非負です。Q≠Q′Q\ne Q' なので一意ではありません。r22=0r_{22}=0 のとき q2\boldsymbol{q}_2 は a1,a2\boldsymbol{a}_1,\boldsymbol{a}_2 のどちらにも現れず、q1\boldsymbol{q}_1 に直交する任意の単位ベクトルを選べます。一意性の証明は rkk>0r_{kk}>0(すなわち ak∉span⁡(a1,…,ak−1)\boldsymbol{a}_k\notin\operatorname{span}(\boldsymbol{a}_1,\ldots,\boldsymbol{a}_{k-1}))を使っていました。

演習 7.3標準

列が 2 本(n=2n=2)のとき、CGS と MGS は浮動小数でもまったく同じ演算を行い、同じ結果を与えることを示せ。n=3n=3 では最初にどこで違いが生じるか。

解答

k=1k=1 はどちらも q1=fl(a1/∥a1∥2)\boldsymbol{q}_1=\mathrm{fl}(\boldsymbol{a}_1/\|\boldsymbol{a}_1\|_2) です。k=2k=2 では CGS が r12=fl(q^1Ta2)r_{12}=\mathrm{fl}(\widehat{\boldsymbol{q}}_1^{\mathsf{T}}\boldsymbol{a}_2)、w2=fl(a2−r12q^1)\boldsymbol{w}_2=\mathrm{fl}(\boldsymbol{a}_2-r_{12}\widehat{\boldsymbol{q}}_1) を計算し、MGS は w2(1)=a2\boldsymbol{w}_2^{(1)}=\boldsymbol{a}_2 に対して同じ式を計算します。したがって演算は同一です。n=3n=3 では k=3k=3 の r23r_{23} で、CGS は q^2Ta3\widehat{\boldsymbol{q}}_2^{\mathsf{T}}\boldsymbol{a}_3、MGS は q^2Tw^3(2)\widehat{\boldsymbol{q}}_2^{\mathsf{T}}\widehat{\boldsymbol{w}}_3^{(2)} を計算し、ここで初めて違いが出ます。例 6.3 はまさにこの r23r_{23} の違い(00 と ε/2\varepsilon/\sqrt2)が直交性を左右する例です。

  • 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.

このテーマの 100 本ノック(100 問)

執筆: Claude Code(Opus 5.5)、Claude Code(Sonnet 5.5)・監査 2 回(Claude Code)・最終 2026-10-12

この記事の誤りを報告する ・運営: 夢現技研合同会社 ・料金 ・利用条件 ・特定商取引法に基づく表記

© 2026 夢現技研合同会社 ・コード例は MIT ライセンスです。