QR分解シミュレーター 戻る
数値線形代数シミュレーター

QR分解シミュレーター — Gram-Schmidt法と最小二乗法

3×3行列 A を Modified Gram-Schmidt 法で Q(直交行列)と R(上三角行列)に分解し、Rx=Qᵀb の後退代入で最小二乗解を求めます。

パラメータ設定
A[0][0] 対角成分
A[1][1] 対角成分
A[2][2] 対角成分
b[0] 右辺第1成分

A の非対角・b の他成分は固定(A[0][1]=1, A[0][2]=0, A[1][0]=1, A[1][2]=1, A[2][0]=0, A[2][1]=1, b[1]=2, b[2]=2)。既定値で x=(1,1,1)、残差≈0、Q直交性誤差≈0。

計算結果
det(A) = ±det(R) の符号付
x_1 最小二乗解
残差 ‖Ax-b‖₂
Q 直交性誤差 ‖QᵀQ-I‖_F
A・b、Q・R、解 x の可視化

上段=A行列とbベクトル/中段=Q(直交、列=q₁ q₂ q₃)とR(上三角、青=上三角・灰=下三角)/下段=解ベクトル x

理論・主要公式

QR分解は、列が線形独立な行列 A を直交行列 Q と上三角行列 R の積に分解します。最小二乗問題 ‖Ax-b‖₂ の最小化に直結する基本道具です。

Q が直交、R が上三角の積に分解:

$$A = Q\,R, \qquad Q^{\top}Q = I$$

Modified Gram-Schmidt の漸化式(k 列目の更新):

$$r_{kk} = \|a_k^{(k-1)}\|_2,\quad q_k = \frac{a_k^{(k-1)}}{r_{kk}},\quad r_{kj} = q_k^{\top} a_j^{(k-1)},\quad a_j^{(k)} = a_j^{(k-1)} - r_{kj} q_k$$

最小二乗解は Rx = Qᵀb の後退代入で得られる:

$$\min_x \|Ax - b\|_2^2 \iff R\,x = Q^{\top} b$$

A が正方かつ正則であれば残差は 0 で、A の行列式は |det(A)| = |det(R)| = ∏ r_{kk} となります。

QR分解シミュレーターとは

🙋
QR分解って、なんで「Q」と「R」って文字なんですか?意味あるんですか?
🎓
いい質問だね。Q は「直交(Orthogonal)」のドイツ語起源の慣習で、R は「右上(Right triangular)」つまり上三角を意味する。歴史的に Householder と Gram-Schmidt がそれぞれ別文脈で使い始めて定着したんだ。上のシミュレーターで既定値(A の対角=1,0,1)を見ると、Q が直交、R が上三角になっているのが視覚的にわかる。「Q直交性誤差」のカードがほぼ 0(1e-15 オーダー)になっているのが直交の証拠だよ。
🙋
既定値で残差も 0 ですね。ということは「最小二乗法」って言ってるけど、実は普通の連立方程式と同じ答えが出るんですか?
🎓
鋭い。A が正則なら最小二乗解=厳密解で、残差はゼロになる。最小二乗の威力が出るのは「式が解より多い(過剰決定)」場合や、測定誤差で完全解が存在しない場合だ。本ツールは 3×3 の正方行列でも、Rx=Qᵀb の解法そのものは長方形行列の最小二乗と全く同じ。「A[1][1]」スライダーを 0 から動かしてみて。det が変わるけど x も同時に変わる。これが連立方程式の解だよ。
🙋
じゃあ正規方程式 AᵀAx=Aᵀb で解くのと何が違うんですか?教科書では正規方程式が先に出てきました。
🎓
数学的には同じ解だけど、数値計算では大違いだ。AᵀA を作ると条件数が κ(A)² に跳ね上がる。例えば κ(A)=10⁶ なら κ(AᵀA)=10¹²、倍精度の有効桁15桁のうち12桁を失う。一方 QR 経由なら条件数は κ(A) のままで、桁落ちは半分で済む。だから現代の数値ライブラリ(NumPy の lstsq、MATLAB の \\)は内部で QR か SVD を使う。教科書で正規方程式を先に教えるのは導出が直感的だからで、実装では避けるのが正解だよ。
🙋
「Modified Gram-Schmidt」って Modified の方を使う理由は何ですか?「古典」じゃダメなんですか?
🎓
古典 Gram-Schmidt(CGS)は数値的に脆い。各列から過去の全ての直交成分を「一度に」引くため、丸め誤差が累積して、計算後の Q が直交を失う(QᵀQ-I が 1e-3 とか出る)。Modified(MGS)は1基底ずつ「逐次的に」引いて引いた結果を使い回すから、誤差が抑えられて 1e-15 程度で済む。本ツールの「Q直交性誤差」のカードは、まさにこの違いを定量的に見せている。実務ではさらに堅牢な Householder 変換を使うことが多いけど、概念理解には MGS が分かりやすいんだ。

よくある質問

古典的Gram-Schmidt(CGS)は各列ベクトルから過去の全ての直交基底成分を一度に引き、Modified Gram-Schmidt(MGS)は1基底ずつ逐次的に引きます。数学的には等価ですが、有限精度演算ではCGSが直交性を急激に失うのに対し、MGSは桁落ちに対してはるかに頑健で、‖QᵀQ-I‖_F がほぼ機械精度で抑えられます。実務では特に理由がない限りMGS、または更に堅牢なHouseholder変換が選ばれます。
正規方程式 AᵀAx=Aᵀb は条件数が κ(A)² となり数値的に不安定です。一方、A=QR から ‖Ax-b‖² = ‖Rx-Qᵀb‖² となるので、Rx=Qᵀb の後退代入で解けば条件数 κ(A) のままで済み、数値的安定性が大幅に向上します。Aの列が独立であれば、解は一意で、計算コストもほぼ同等です。
Householder変換は鏡映行列を順次掛けて A を上三角化する方法で、MGSより更に直交性が良く、疎な構造も乱しにくい性質があります。LAPACK の geqrf もHouseholder方式です。一方、Gram-Schmidtは1列ずつ直交化するため、ストリーミング処理や反復解法(GMRES等)の中で部分直交化に使いやすいという利点があります。用途によって使い分けます。
はい、QRアルゴリズムは固有値計算の標準手法です。A_k=Q_k R_k と分解し A_{k+1}=R_k Q_k を繰り返すと、A_k は上三角行列に収束し、その対角成分が固有値になります。シフト戦略(Wilkinsonシフト等)と組み合わせると収束が劇的に速くなり、現在ほぼ全ての固有値ソルバ(LAPACK の dgeev 等)の中核です。本ツールは1ステップのQR分解そのものを可視化したものです。

実世界での応用

線形回帰と統計モデリング:多項式フィット、重回帰、機械学習の最小二乗問題は全て本質的に Ax=b の最小二乗解です。R の lm 関数、Python の numpy.linalg.lstsq、MATLAB のバックスラッシュ演算子は内部で QR(または SVD)を実行しています。CAEのパラメータフィッティング、流体抵抗係数の最小二乗フィット等にも直接使われます。

有限要素法の反復解法:大規模疎行列の連立方程式に使う GMRES(Generalized Minimal Residual)法では、Krylov 部分空間の基底を作るために MGS による直交化を毎反復で実行します。CFD・構造解析の Krylov ソルバの心臓部であり、ベクトル長が大きくなると CGS では発散してしまうため MGS(または DGKS 再直交化)が必須です。

固有値計算と PCA:主成分分析(PCA)や固有モード解析(モーダル解析)では QR アルゴリズムが固有値抽出の標準ルーチンです。本ツールが示す1回のQR分解を、上三角行列に収束するまで反復することで、構造物の固有振動数や機械学習の特徴抽出に必須の固有値が得られます。

センサー融合とカルマンフィルタ:Square-root カルマンフィルタは共分散行列の Cholesky 因子(または QR 分解)を直接更新することで、数値的不安定性を回避します。GPS+IMU 融合、ロボット制御、航空宇宙の姿勢推定など、リアルタイム性と数値安定性が両立必要な現場で QR 分解が中核を担っています。

よくある誤解と注意点

最も多い誤解は、「QR分解は正方行列でしか使えない」と思い込むことです。実際には m×n(m≥n)の長方形行列にもそのまま適用でき、過剰決定系 Ax=b(式の数 m が未知数 n より多い)の最小二乗解を求める標準手段です。本ツールは可視化の都合で 3×3 を扱っていますが、計算ロジックは Modified Gram-Schmidt そのもので、長方形に拡張するのは循環範囲を変えるだけです。実務では m=10000、n=10 のような縦長行列が頻出します。

次に多いのが、「Q が直交だから QᵀQ=I は当然成り立つ」と数値計算でも信じることです。理論上は Qᵀ Q=I ですが、有限精度演算では誤差が必ず混入します。本ツールの「Q直交性誤差」カードがちょうど 1e-15 程度(倍精度のマシンイプシロン)を示すのは、Modified Gram-Schmidt が極めて優秀だからです。古典的Gram-Schmidt で同じ計算をすると、条件数の悪い行列では誤差が 1e-3 以上に跳ね上がることも珍しくありません。「直交性は計算後に必ず検証する」が鉄則です。

最後に、このシミュレーターが扱う行列は対角要素以外がほぼ固定の特殊形である点に注意してください。スライダーで動かせるのは A の3つの対角成分と b の第1成分のみで、非対角要素は数値安定性が良い値に固定されています。実際の応用では条件数が 10⁸ を超えるような病的に近い行列も現れ、その場合は MGS でも直交性誤差が増大します。本ツールは概念理解と典型的な良条件問題の挙動を見るためのものであり、極端な病的問題には Householder 変換や SVD(特異値分解)を選ぶべきです。