QR は行列を回転と三角に分ける
行列の列はたいてい歪んでいます。互いに直角でもなく、長さもばらばらです。QR はこれらの列を二つの部品にきれいに分けます。まず列をグラム・シュミットでまっすぐに伸ばし、互いに垂直な単位ベクトルにします。これが Q で、長さも角度も触らない純粋な回転(または反射)です。そして伸ばす際に削り取った長さと重なりをすべて集めたのが R で、不思議なことにつねに上側だけが埋まった三角形です。A = QR、回転ひとつと三角ひとつ。この一行が最小二乗を最も安定に解く道であり、数値線形代数の働き手です。
ボタンで段階を踏んでください。段階0は A の二列 a1, a2 です。斜めで長さも違いますね。段階1では直前の講のグラム・シュミットがこの二つをまっすぐにします。a1 の向きを単位長に縮めたのが q1、a2 から q1 への影を引いて残った直交成分を単位化したのが q2 です。いま q1 と q2 はちょうど直角で、ともに長さ1です(点積が0と出ます)。段階2で R が現れます。R = Qᵀ A なので自動的に上三角となり、左下の成分 r21 は0です。A は歪んだ列、Q はまっすぐにした正規直交列、R はその間をつなぐ小さな三角。これが A = QR です。
Q の二列は互いに垂直な単位ベクトルです。だから Q を平面に作用させても格子は歪まず、全体が剛体のように回るだけです。角度のスライダーを動かしてみてください。マスは伸びも歪みもせず、正方形は正方形のままです。長さも角度も保たれるからです。反射ボタンを押すと鏡のように裏返りますが、列は依然として正規直交なので形は変わりません。これが直交行列の定義そのものです:QᵀQ = I。下の QᵀQ を見ると、どの角度でも単位行列のままです。Q が回転か反射にすぎない証拠です。
なぜ R はつねに上側の三角だけ埋まるのでしょう。各成分は rij = qi · aj、すなわち i 番目のまっすぐにした方向に j 番目の元の列を映した影の長さです。マスを切り替えて点積の値を確かめてください。鍵は対角の下のマスです。r21 = q2 · a1 ですが、q2 は a2 から a1 の方向を取り除いて残った成分なので、a1 にちょうど垂直です。垂直なら点積は0、だから r21 は0です。一般に、後で作った方向 qi は前の列 aj(j < i)にはまったく入りません。その列はすでに前の方向たちで表しきられているからです。だから対角の下はすべて0、R は上三角です。
今度は逆に、R を手に取って A を組み直します。Q は20度回転に固定し、スライダーで R の三成分を動かすと、A = QR がリアルタイムに描き直されます。r11 は第一列 a1 の長さを決めます。大きくすれば a1 は長くなります。r22 は第二の方向へどれだけ伸びるか、つまり直交成分の長さです。r12 はせん断です。第二列を第一の方向へどれだけ傾けるかを決めます。この三つの数が長さと傾きをすべて担い、Q はその結果を丸ごと20度回すだけです。R が形を、Q が向きを受け持つという分業が目に見えます。
さて QR が本当に役立つところ、最小二乗です。先の射影の講で、データに最もよく合う直線とは、残差(縦の点線)の二乗和を最も小さくする線でした。傾きと切片のスライダーを動かして SSE を縮めてみてください。教科書はたいてい AᵀA を作って正規方程式を解けと言います。しかし AᵀA は誤差に敏感で、数値的に不安定なことが多いのです。QR はその段階を飛ばします。A = QR を代入すると正規方程式は R x = Qᵀ b に縮み、R が三角なので後退代入一回で終わります。ボタンを押すとその QR 解に跳び、SSE が最小になります。AᵀA を作らずに同じ答えをより安定に得る、それが QR の値打ちです。