行列の総合レポート

理論・構造・分解・数値計算アルゴリズムを、Jordan 標準形を既知とする読者向けに体系化したノートです。LU 分解、Cholesky、QR、Schur、特異値分解、特殊行列クラス、疎構造、反復法、応用、演習を含みます。

MathJax 数式DOT + d3-graphviz 図対話的デモ擬似コード具体例・演習

0. 読み方・記法

行列を「数表」としてではなく、線形写像・基底変換・二次形式・データ変換・計算手続きの統一言語として扱います。Jordan 標準形は既知として、数値線形代数で実際に安定に使われる分解へ重点を移します。

基本記法
  • 体は主に \(\mathbb{R}\) または \(\mathbb{C}\)。\(A\in\mathbb{F}^{m\times n}\) は \(m\) 行 \(n\) 列。
  • 転置は \(A^T\)、共役転置は \(A^*\)。実行列では \(A^*=A^T\)。
  • 単位行列は \(I\)、零行列は \(0\)。列空間は \(\mathcal R(A)\)、零空間は \(\mathcal N(A)\)。
  • rank は \(\operatorname{rank}A\)、trace は \(\operatorname{tr}A\)、行列式は \(\det A\)。
  • 固有値集合は \(\Lambda(A)\)、スペクトル半径は \(\rho(A)=\max_{\lambda\in\Lambda(A)}|\lambda|\)。
  • 特異値は \(\sigma_1(A)\ge\sigma_2(A)\ge\cdots\ge0\)。文脈が明らかなとき \(\sigma_i\) と書きます。
Jordan 形と数値計算の距離

Jordan 標準形は代数的分類として完全ですが、数値計算では不安定です。重複固有値や非対角化可能性は微小摂動で壊れます。実務では、固有値問題に Schur 分解、線形方程式に LU/Cholesky、最小二乗に QR、rank・悪条件診断に SVD を使います。

1. 行列とは何か:線形写像・座標・合成

1.1 線形写像の座標表示

有限次元ベクトル空間 \(V,W\) と基底 \(\mathcal B=(v_1,\dots,v_n)\)、\(\mathcal C=(w_1,\dots,w_m)\) を固定すると、線形写像 \(T:V\to W\) は一意な行列 \([T]_{\mathcal C\leftarrow\mathcal B}\in\mathbb F^{m\times n}\) で表されます。

\[ [T(x)]_{\mathcal C}=[T]_{\mathcal C\leftarrow\mathcal B}[x]_{\mathcal B}. \]

この意味で、行列の列は「基底ベクトルの像」を並べたものです。第 \(j\) 列は \(T(v_j)\) の \(\mathcal C\) 座標です。

1.2 行列積は写像の合成

\(T:V\to W\)、\(S:W\to U\) なら、

\[ [S\circ T]_{\mathcal D\leftarrow\mathcal B} =[S]_{\mathcal D\leftarrow\mathcal C}[T]_{\mathcal C\leftarrow\mathcal B}. \]

行列積の非可換性は、写像の合成順序が一般に可換でないことの座標表示です。

1.3 基底変換と相似

同じ線形作用素 \(T:V\to V\) を基底 \(\mathcal B\) と \(\mathcal B'\) で表すと、基底変換行列 \(P=[\operatorname{id}]_{\mathcal B\leftarrow\mathcal B'}\) により

\[ [T]_{\mathcal B'}=P^{-1}[T]_{\mathcal B}P. \]

この関係を相似といいます。固有値、特性多項式、最小多項式、Jordan ブロック構造、trace、determinant は相似不変です。一方、個々の成分、行和、列和、対角成分そのものは一般には不変ではありません。

相似不変量の基本確認

\(B=P^{-1}AP\) なら

\[ \det(\lambda I-B)= \det(P^{-1})\det(\lambda I-A)\det(P) =\det(\lambda I-A). \]

したがって特性多項式と固有値は不変です。また \(p(B)=P^{-1}p(A)P\) なので、最小多項式も不変です。

1.4 双線形形式・二次形式としての行列

行列 \(A\) は \(x^*Ay\) により双線形または半双線形形式を定めます。Hermitian 行列 \(A=A^*\) の二次形式 \(x^*Ax\) は実数値です。Rayleigh 商

\[ R_A(x)=\frac{x^*Ax}{x^*x},\qquad x\ne0 \]

は固有値、最適化、正定値性、反復法の解析で中心的役割を持ちます。

2. 基本構造:rank、核、像、ブロック、射影

2.1 四つの基本部分空間

\(A\in\mathbb F^{m\times n}\) の rank を \(r\) とすると、四つの基本部分空間があります。

部分空間定義次元直交関係
列空間\(\mathcal R(A)=\{Ax:x\in\mathbb F^n\}\subset\mathbb F^m\)\(r\)\(\mathcal R(A)=\mathcal N(A^*)^\perp\)
左零空間\(\mathcal N(A^*)\subset\mathbb F^m\)\(m-r\)\(\mathcal N(A^*)=\mathcal R(A)^\perp\)
行空間\(\mathcal R(A^*)\subset\mathbb F^n\)\(r\)\(\mathcal R(A^*)=\mathcal N(A)^\perp\)
零空間\(\mathcal N(A)=\{x:Ax=0\}\subset\mathbb F^n\)\(n-r\)\(\mathcal N(A)=\mathcal R(A^*)^\perp\)

rank-nullity は

\[ \dim\mathcal R(A)+\dim\mathcal N(A)=n. \]

SVD はこの四部分空間を最も透明に表します。非零特異値に対応する右特異ベクトルは行空間を張り、零特異値に対応する右特異ベクトルは零空間を張ります。

2.2 ブロック行列と Schur 補

ブロック行列

\[ A=\begin{bmatrix}B&C\\D&E\end{bmatrix},\qquad B\in\mathbb F^{k\times k} \]

で \(B\) が正則なら、\(B\) に関する Schur 補を

\[ S=E-DB^{-1}C \]

と定義します。このとき

\[ \begin{bmatrix}B&C\\D&E\end{bmatrix} = \begin{bmatrix}I&0\\DB^{-1}&I\end{bmatrix} \begin{bmatrix}B&C\\0&S\end{bmatrix}. \]
Schur 補の行列式公式

\(B\) が正則なら

\[ \det A=\det B\,\det(E-DB^{-1}C). \]

さらに \(A=A^*\)、\(B\succ0\) なら、\(A\succ0\) と \(S\succ0\) は同値です。

2.3 射影行列

\(P^2=P\) を射影といいます。さらに \(P=P^*\) なら直交射影です。列フルランク \(A\in\mathbb F^{m\times n}\) に対し、\(\mathcal R(A)\) への直交射影は

\[ P_A=A(A^*A)^{-1}A^*. \]

ただし数値計算では \(A^*A\) を直接作るより、QR 分解 \(A=QR\) から \(P_A=QQ^*\) と扱う方が安定です。

3. ノルム・条件数・浮動小数点

3.1 ベクトルノルムと誘導ノルム

代表的なベクトルノルムは

\[ \|x\|_1=\sum_i|x_i|,\quad \|x\|_2=\left(\sum_i|x_i|^2\right)^{1/2},\quad \|x\|_\infty=\max_i|x_i|. \]

行列ノルムがベクトルノルムから誘導されるとは

\[ \|A\|=\max_{x\ne0}\frac{\|Ax\|}{\|x\|} \]

であることです。代表例は

\[ \|A\|_1=\max_j\sum_i|a_{ij}|,\quad \|A\|_\infty=\max_i\sum_j|a_{ij}|,\quad \|A\|_2=\sigma_{\max}(A). \]

Frobenius ノルムは誘導ノルムではありませんが、特異値と trace で

\[ \|A\|_F=\left(\sum_{i,j}|a_{ij}|^2\right)^{1/2} =\left(\operatorname{tr}(A^*A)\right)^{1/2} =\left(\sum_i\sigma_i^2\right)^{1/2} \]

と書けます。

3.2 条件数

正則行列 \(A\) の線形方程式 \(Ax=b\) に対する条件数は

\[ \kappa(A)=\|A\|\,\|A^{-1}\|. \]

2-ノルムでは SVD により

\[ \kappa_2(A)=\frac{\sigma_{\max}(A)}{\sigma_{\min}(A)}. \]

摂動 \(A+\Delta A\), \(b+\Delta b\) に対し、\(\|A^{-1}\Delta A\|<1\) なら概略として

\[ \frac{\|\Delta x\|}{\|x\|} \lesssim \frac{\kappa(A)}{1-\kappa(A)\|\Delta A\|/\|A\|} \left( \frac{\|\Delta A\|}{\|A\|}+ \frac{\|\Delta b\|}{\|b\|} \right). \]
条件と安定性を分ける

問題自体が悪条件なら、どれほど安定なアルゴリズムでも入力誤差を大きく反映します。数値線形代数では「問題の条件」と「アルゴリズムの安定性」を分けて評価します。

3.3 浮動小数点と後退安定性

丸めモデルでは、基本演算 \(\circ\in\{+,-,\times,/\}\) について

\[ \operatorname{fl}(x\circ y)=(x\circ y)(1+\delta),\qquad |\delta|\le u \]

と書きます。\(u\) は unit roundoff です。

後退安定とは、計算結果 \(\widehat x\) が少し摂動した問題の厳密解になっていることです。線形方程式なら

\[ (A+\Delta A)\widehat x=b+\Delta b,\qquad \frac{\|\Delta A\|}{\|A\|},\frac{\|\Delta b\|}{\|b\|}=O(u). \]

Householder QR や Cholesky は典型的に安定です。部分ピボット付き LU も実用上は非常に安定ですが、最悪ケースでは成長因子が大きくなり得ます。

4. 行列クラスの分類

行列クラスを認識できると、分解・固有値・計算量・安定性が一気に見通せます。

4.1 対角・スカラー・置換行列

対角行列 \(D=\operatorname{diag}(d_1,\dots,d_n)\) は成分ごとに作用します。\(D^{-1}\) は全 \(d_i\ne0\) のとき存在し、\(D^{-1}=\operatorname{diag}(d_i^{-1})\) です。置換行列 \(P\) は標準基底を並べ替える行列で、\(P^{-1}=P^T\) です。

4.2 三角行列

上三角行列 \(U\) は \(i>j\Rightarrow u_{ij}=0\) を満たします。積、逆行列、固有値に関して閉じています。固有値は対角成分です。

\[ \det(\lambda I-U)=\prod_{i=1}^n(\lambda-u_{ii}). \]

三角行列の連立方程式は \(O(n^2)\) で解けるため、LU、QR、Schur の最終形として頻出します。

4.3 Hermitian・正規・ユニタリ・正定値

クラス定義主要事実
Hermitian\(A=A^*\)固有値は実数。ユニタリ対角化可能。Rayleigh 商が使える。
実対称\(A=A^T\)Hermitian の実版。直交対角化可能。
正規\(A^*A=AA^*\)ユニタリ対角化可能。固有ベクトル直交基底を持つ。
ユニタリ\(U^*U=I\)長さ・角度を保存。全特異値が 1。固有値は単位円上。
正定値\(A=A^*,\ x^*Ax>0\)Cholesky 分解 \(A=LL^*\)。全固有値正。

4.4 帯行列・三重対角行列・Hessenberg 行列

帯行列では非零成分が対角近傍に限定されます。半帯幅 \(p,q\) を用いると \(a_{ij}=0\) for \(i-j>p\) or \(j-i>q\)。三重対角行列は \(p=q=1\) です。上 Hessenberg 行列は \(i>j+1\Rightarrow h_{ij}=0\)。一般行列の QR 固有値アルゴリズムでは、まず Hessenberg 形へ縮約します。Hermitian 行列なら三重対角形へ縮約できます。

4.5 Toeplitz・巡回行列

Toeplitz 行列は \(a_{ij}=t_{i-j}\)、つまり各対角線上で成分が一定です。巡回行列はさらに各行が循環シフトであり、離散 Fourier 行列で対角化されます。

\[ C=F^*\operatorname{diag}(Fc)F. \]

この構造は畳み込み、信号処理、FFT に直結します。

5. 分解の地図:何を、なぜ、どの順番で使うか

行列分解は、複雑な線形変換を「解きやすい」「直交的」「対角的」「低ランク的」な因子に分ける技術です。

分解主目的代表計算量安定性の傾向
LU\(PA=LU\)一般正方 \(Ax=b\)\(2n^3/3\)部分ピボットで実用的に安定
Cholesky\(A=LL^*\)Hermitian 正定値\(n^3/3\)非常に安定
QR\(A=QR\)最小二乗、直交化\(2mn^2-2n^3/3\)Householder は安定
Schur\(A=QTQ^*\)固有値計算概ね \(O(n^3)\)QR 法の基礎
SVD\(A=U\Sigma V^*\)rank、低ランク、悪条件診断概ね \(O(mn^2)\)最も診断力が高い
使い分けの基本

連立一次方程式なら LU。ただし正定値なら Cholesky、最小二乗なら QR、rank 欠損や数値ランクが問題なら SVD、固有値なら Schur/Hermitian 専用法を選びます。

6. LU 分解:数理・計算・安定性

6.1 Gaussian 消去と LU

正方行列 \(A\in\mathbb F^{n\times n}\) に対し、下三角行列 \(L\) と上三角行列 \(U\) で

\[ A=LU \]

と分解するのが LU 分解です。通常は \(L\) の対角を 1 とする Doolittle 型を使います。Gaussian 消去の乗数

\[ \ell_{ik}=\frac{a^{(k)}_{ik}}{a^{(k)}_{kk}},\qquad i=k+1,\dots,n \]

を \(L\) の下三角成分に保存し、消去後の上三角部分が \(U\) になります。

ピボットなし LU の存在条件

\(A\) の先頭主座小行列 \(A_{1:k,1:k}\) が \(k=1,\dots,n-1\) ですべて正則なら、対角が 1 の下三角 \(L\) と上三角 \(U\) が一意に存在して \(A=LU\) となります。さらに \(A\) 正則なら \(U\) の対角成分も全て非零です。

6.2 Doolittle 公式

\(L\) は単位下三角、\(U\) は上三角とします。成分比較から

\[ a_{ij}=\sum_{k=1}^{\min(i,j)}\ell_{ik}u_{kj},\qquad \ell_{ii}=1. \]

したがって、\(i\le j\) では

\[ u_{ij}=a_{ij}-\sum_{k=1}^{i-1}\ell_{ik}u_{kj}, \]

\(i>j\) では

\[ \ell_{ij}=\frac{1}{u_{jj}}\left(a_{ij}-\sum_{k=1}^{j-1}\ell_{ik}u_{kj}\right). \]
アルゴリズム:Doolittle LU(ピボットなし)
for k = 1..n:
    for j = k..n:
        U[k,j] = A[k,j] - sum_{s=1}^{k-1} L[k,s] U[s,j]
    L[k,k] = 1
    for i = k+1..n:
        L[i,k] = (A[i,k] - sum_{s=1}^{k-1} L[i,s] U[s,k]) / U[k,k]

計算量は主に \(2n^3/3+O(n^2)\) flops です。

6.3 PLU:部分ピボット

ピボット \(a^{(k)}_{kk}\) が零または小さいと、消去が不可能または不安定になります。そこで列 \(k\) の下側から絶対値最大の成分を探して行交換します。

\[ p=\arg\max_{i=k,\dots,n}|a^{(k)}_{ik}|. \]

この結果は

\[ PA=LU \]

と表されます。\(P\) は置換行列です。

アルゴリズム:部分ピボット付き LU
Input: A in F^{n x n}
P = I
for k = 1..n-1:
    p = argmax_{i=k..n} |A[i,k]|
    if A[p,k] == 0: stop; matrix is singular to working precision
    swap rows k and p of A
    swap rows k and p of P
    swap L multipliers already stored in columns 1..k-1
    for i = k+1..n:
        A[i,k] = A[i,k] / A[k,k]              # multiplier l_ik
        for j = k+1..n:
            A[i,j] = A[i,j] - A[i,k] A[k,j]
Output: P, L = unit lower part of A, U = upper part of A

分解後、\(Ax=b\) は \(PAx=Pb\)、すなわち \(LUx=Pb\) として、前進代入 \(Ly=Pb\) と後退代入 \(Ux=y\) で解きます。

6.4 具体例

例:ピボットなし LU

\[ A=\begin{bmatrix}2&1&1\\4&-6&0\\-2&7&2\end{bmatrix}. \]

第1列の乗数は \(\ell_{21}=4/2=2\)、\(\ell_{31}=-2/2=-1\)。第1列を消去すると

\[ \begin{bmatrix}2&1&1\\0&-8&-2\\0&8&3\end{bmatrix}. \]

第2列の乗数は \(\ell_{32}=8/(-8)=-1\)。消去後

\[ U=\begin{bmatrix}2&1&1\\0&-8&-2\\0&0&1\end{bmatrix},\qquad L=\begin{bmatrix}1&0&0\\2&1&0\\-1&-1&1\end{bmatrix}. \]

実際に \(LU=A\) です。

6.5 完全ピボット・rook pivoting・成長因子

部分ピボットは行交換のみです。完全ピボットは残り部分行列から最大絶対値成分を選び、行と列を交換します。

\[ P A Q = L U. \]

完全ピボットは理論的により安全ですが、探索コストと列交換管理が重く、通常は部分ピボットが標準です。対称不定値行列には Bunch–Kaufman 型の対称ピボットがよく使われます。

LU の誤差解析で重要なのが成長因子

\[ g=\frac{\max_{i,j,k}|a^{(k)}_{ij}|}{\max_{i,j}|a_{ij}|}. \]

後退誤差評価は概ね \(g\) に比例します。部分ピボットでは最悪 \(g\) が指数的に大きくなり得ますが、実用上は多くの問題で小さいままです。

6.6 ブロック LU

現代計算機では BLAS-3、つまり行列-行列積を活用するためブロック化が重要です。

\[ A=\begin{bmatrix}A_{11}&A_{12}\\A_{21}&A_{22}\end{bmatrix},\quad A_{11}=L_{11}U_{11}. \]

すると

\[ L_{21}=A_{21}U_{11}^{-1},\qquad U_{12}=L_{11}^{-1}A_{12},\qquad S=A_{22}-L_{21}U_{12}. \]

最後に Schur 補 \(S\) を再帰的に分解します。大きな更新 \(A_{22}\leftarrow A_{22}-L_{21}U_{12}\) が性能の鍵です。

6.7 行列式・逆行列・複数右辺

\(PA=LU\) なら

\[ \det A=\det(P)\prod_{i=1}^n u_{ii}. \]

逆行列を明示的に作ることは多くの場合避けます。\(A^{-1}B\) が必要なら、各列について \(AX=B\) を LU の三角解法で解く方が良いです。右辺が複数ある場合、分解 \(PA=LU\) は一度だけ行い、三角解法を使い回します。

7. Cholesky 分解・LDL* 分解

7.1 正定値行列と Cholesky

Hermitian 正定値行列 \(A\succ0\) に対して、一意な下三角行列 \(L\) が存在し、対角成分は正で

\[ A=LL^* \]

と分解できます。LU の約半分の計算量で、ピボット不要かつ安定です。

Cholesky の存在と一意性

\(A=A^*\succ0\) なら、正対角をもつ下三角 \(L\) が一意に存在して \(A=LL^*\)。逆に \(A=LL^*\) で \(L\) が正則なら \(A\succ0\)。

7.2 成分公式

\(A=LL^*\) の成分比較から

\[ \ell_{kk}=\left(a_{kk}-\sum_{s=1}^{k-1}|\ell_{ks}|^2\right)^{1/2}, \] \[ \ell_{ik}=\frac{1}{\ell_{kk}}\left(a_{ik}-\sum_{s=1}^{k-1}\ell_{is}\overline{\ell_{ks}}\right), \qquad i=k+1,\dots,n. \]
アルゴリズム:Cholesky
for k = 1..n:
    s = A[k,k] - sum_{j=1}^{k-1} |L[k,j]|^2
    if s <= 0: stop; not positive definite in working precision
    L[k,k] = sqrt(s)
    for i = k+1..n:
        L[i,k] = (A[i,k] - sum_{j=1}^{k-1} L[i,j] conj(L[k,j])) / L[k,k]

7.3 LDL* 分解

平方根を避けたい場合、Hermitian 行列を

\[ A=LDL^* \]

と分解します。\(L\) は単位下三角、\(D\) は対角またはブロック対角です。正定値なら \(D\) は正対角で済みます。不定値なら安定性のため 1×1 と 2×2 ピボットを使う Bunch–Kaufman 型分解が標準です。

7.4 正定値判定

Hermitian 行列 \(A\) について、次は同値です。

  1. \(A\succ0\)。
  2. 全固有値が正。
  3. すべての先頭主座小行列式が正。
  4. Cholesky 分解が失敗せず、対角成分が全て正。

7.5 例

例:2×2 Cholesky

\[ A=\begin{bmatrix}4&2\\2&3\end{bmatrix}. \]

\(\ell_{11}=2\)、\(\ell_{21}=2/2=1\)、\(\ell_{22}=\sqrt{3-1^2}=\sqrt2\)。

\[ L=\begin{bmatrix}2&0\\1&\sqrt2\end{bmatrix},\qquad LL^T=\begin{bmatrix}4&2\\2&3\end{bmatrix}. \]

8. QR 分解:直交性を使う分解

8.1 QR 分解の定義

\(A\in\mathbb F^{m\times n}\)、\(m\ge n\) に対し、列フルランクなら

\[ A=QR \]

と分解できます。ここで \(Q\in\mathbb F^{m\times n}\) は \(Q^*Q=I_n\) を満たす列直交行列、\(R\in\mathbb F^{n\times n}\) は上三角行列です。完全 QR では \(Q\in\mathbb F^{m\times m}\)、\(R\in\mathbb F^{m\times n}\)。

QR は最小二乗問題

\[ \min_x\|Ax-b\|_2 \]

を安定に解く基本手段です。

8.2 Gram–Schmidt

古典 Gram–Schmidt は列ベクトル \(a_j\) から直交基底を作ります。

\[ r_{ij}=q_i^*a_j,\qquad \tilde q_j=a_j-\sum_{i=1}^{j-1}q_i r_{ij},\qquad r_{jj}=\|\tilde q_j\|_2,\qquad q_j=\tilde q_j/r_{jj}. \]

丸め誤差のため、古典 Gram–Schmidt は列がほぼ線形従属だと直交性を失いやすいです。修正 Gram–Schmidt は投影を逐次的に更新し、より安定です。さらに必要なら再直交化を行います。

アルゴリズム:修正 Gram–Schmidt
for j = 1..n:
    v = A[:,j]
    for i = 1..j-1:
        R[i,j] = Q[:,i]^* v
        v = v - Q[:,i] R[i,j]
    R[j,j] = ||v||_2
    Q[:,j] = v / R[j,j]

8.3 Householder QR

実務上の標準は Householder 反射です。ベクトル \(x\in\mathbb F^k\) に対し、\(Hx=\alpha e_1\) となるユニタリ反射

\[ H=I-\tau vv^* \]

を作ります。実数なら \(\tau=2/(v^Tv)\)。桁落ちを避けるため、典型的には

\[ \alpha=-\operatorname{sign}(x_1)\|x\|_2,\qquad v=x-\alpha e_1 \]

を選びます。

アルゴリズム:Householder QR
R = A
for k = 1..n:
    x = R[k:m, k]
    construct Householder vector v so that (I - tau v v*) x = alpha e_1
    R[k:m, k:n] = R[k:m, k:n] - tau v (v* R[k:m, k:n])
    store v below diagonal of R
Q is represented implicitly as H_1 H_2 ... H_n

Householder QR は後退安定で、密行列では計算量 \(2mn^2-2n^3/3\) flops です。

8.4 Givens 回転

Givens 回転は平面 \((i,j)\) 内の回転で一つの成分を零にします。

\[ \begin{bmatrix}c&s\\-\overline{s}&c\end{bmatrix}^* \begin{bmatrix}a\\b\end{bmatrix} = \begin{bmatrix}r\\0\end{bmatrix},\qquad |c|^2+|s|^2=1. \]

疎行列、Hessenberg 行列、逐次更新 QR では Givens が便利です。

8.5 列ピボット付き QR と rank revealing

数値ランク判定には列ピボット付き QR を使います。

\[ AP=QR. \]

列ノルムが大きい列を先に選び、\(|r_{11}|\ge |r_{22}|\ge\cdots\) に近い構造を得ます。\(|r_{kk}|\) の急落は数値ランクの手がかりです。ただし最良低ランク近似の精度診断では SVD がより信頼できます。

8.6 QR と最小二乗

列フルランク \(A\in\mathbb F^{m\times n}\)、\(m\ge n\) とし、薄い QR \(A=QR\) を使います。すると

\[ \|Ax-b\|_2^2 = \|Rx-Q^*b\|_2^2+\|(I-QQ^*)b\|_2^2. \]

したがって解は三角方程式 \(Rx=Q^*b\) から得られます。正規方程式 \(A^*Ax=A^*b\) は \(\kappa_2(A^*A)=\kappa_2(A)^2\) と条件数を二乗するため、数値的には QR が標準です。

9. Schur 分解・固有値計算・Jordan 形との関係

9.1 Schur 分解

任意の正方複素行列 \(A\in\mathbb C^{n\times n}\) はユニタリ行列 \(Q\) と上三角行列 \(T\) により

\[ A=QTQ^* \]

と分解できます。\(T\) の対角成分が \(A\) の固有値です。実行列では実 Schur 分解として、\(T\) は 1×1 と 2×2 ブロックをもつ準上三角行列になります。

Jordan 形ではなく Schur 形を使う理由

Jordan 形は代数構造を完全に表しますが、重複固有値や固有ベクトルの合流に対して不連続・不安定です。Schur 分解はユニタリ相似だけを使うためノルムを保ち、数値計算に適しています。

9.2 Hessenberg 縮約

QR 固有値アルゴリズムの前処理として、一般行列を上 Hessenberg 形へユニタリ相似変換します。

\[ A=QHQ^*,\qquad h_{ij}=0\quad(i>j+1). \]

Hessenberg 形は QR 反復で保存され、1回の反復を \(O(n^2)\) にできます。Hermitian 行列では三重対角形に縮約できます。

9.3 QR アルゴリズム

基本 QR 反復は

\[ A_k=Q_kR_k,\qquad A_{k+1}=R_kQ_k=Q_k^*A_kQ_k. \]

各ステップはユニタリ相似なので固有値を保ちます。実装ではシフト \(\mu_k\) を使い、

\[ A_k-\mu_k I=Q_kR_k,\qquad A_{k+1}=R_kQ_k+\mu_k I. \]

Hessenberg 構造を保ちながら「bulge chasing」で実装します。

アルゴリズム概略:実用 QR 固有値法
1. Householder 相似変換で A を Hessenberg H に縮約する。
2. H の右下 1x1 または 2x2 ブロックからシフトを選ぶ。
3. implicit QR step を行い、Hessenberg 構造を保つ。
4. 副対角成分が十分小さくなったら deflation する。
5. 残ったブロックに対して反復する。

9.4 Hermitian 固有値問題

\(A=A^*\) なら固有値は実数、固有ベクトルは直交基底に選べます。まず三重対角化

\[ A=QTQ^* \]

を行い、三重対角 \(T\) の固有値を QR、二分法、dqds、分割統治、MRRR などで求めます。三重対角化は \(O(n^3)\)、三重対角固有値計算は多くの場合それより低コストです。

9.5 固有値の摂動と pseudospectrum

正規行列では固有値摂動がよく制御されます。非正規行列では固有値が非常に敏感になり得ます。これを理解するには pseudospectrum

\[ \Lambda_\varepsilon(A)=\{z\in\mathbb C:\|(zI-A)^{-1}\|_2>\varepsilon^{-1}\} \]

が有効です。固有値だけを見ると安定そうに見えても、非正規性が強いと \(e^{tA}\) や反復過程で大きな過渡増幅が起こります。

10. 特異値分解 SVD:理論・幾何・アルゴリズム

10.1 SVD 定理

任意の \(A\in\mathbb C^{m\times n}\) に対し、ユニタリ行列 \(U\in\mathbb C^{m\times m}\)、\(V\in\mathbb C^{n\times n}\)、非負対角成分をもつ \(\Sigma\in\mathbb R^{m\times n}\) が存在して

\[ A=U\Sigma V^*. \]

\(\Sigma\) の対角成分 \(\sigma_1\ge\sigma_2\ge\cdots\ge0\) を特異値といいます。rank \(r\) なら \(\sigma_1\ge\cdots\ge\sigma_r>0=\sigma_{r+1}=\cdots\)。薄い SVD は

\[ A=U_r\Sigma_rV_r^*. \]
SVD と固有値問題

\(A^*A\) は Hermitian 半正定値であり、

\[ A^*A=V\Sigma^*\Sigma V^*. \]

したがって右特異ベクトルは \(A^*A\) の固有ベクトル、特異値の二乗は \(A^*A\) の固有値です。同様に \(AA^*=U\Sigma\Sigma^*U^*\)。

10.2 幾何学的意味

SVD は線形写像を

\[ x \xmapsto{V^*} \text{右特異方向へ回転} \xmapsto{\Sigma} \text{座標軸方向の伸縮} \xmapsto{U} \text{出力空間へ回転} \]

に分解します。単位球は楕円体に写り、その半軸長が特異値です。

10.3 SVD と四つの基本部分空間

薄い SVD を \(A=U_r\Sigma_rV_r^*\) とします。さらに \(V=[V_r,V_0]\)、\(U=[U_r,U_0]\) と拡張すると

\[ \mathcal R(A)=\operatorname{span}(U_r),\quad \mathcal N(A^*)=\operatorname{span}(U_0), \] \[ \mathcal R(A^*)=\operatorname{span}(V_r),\quad \mathcal N(A)=\operatorname{span}(V_0). \]

これが SVD の診断力の本質です。

10.4 低ランク近似:Eckart–Young–Mirsky

\(A=U\Sigma V^*\) とし、

\[ A_k=\sum_{i=1}^k\sigma_i u_iv_i^*. \]

すると rank \(k\) 以下の行列全体で、\(A_k\) は最良近似です。

\[ \min_{\operatorname{rank}(B)\le k}\|A-B\|_2=\sigma_{k+1}, \] \[ \min_{\operatorname{rank}(B)\le k}\|A-B\|_F= \left(\sum_{i>k}\sigma_i^2\right)^{1/2}. \]

画像圧縮、PCA、潜在意味解析、モデル縮約の中心定理です。

10.5 疑似逆

Moore–Penrose 疑似逆は

\[ A^+=V\Sigma^+U^* \]

で定義されます。\(\Sigma^+\) は非零特異値を逆数にして転置した対角行列です。最小二乗解のうち最小ノルム解は

\[ x=A^+b. \]

特異値が小さいと \(1/\sigma_i\) が大きくなりノイズを増幅します。このため切断 SVD や Tikhonov 正則化が使われます。

10.6 SVD の計算アルゴリズム概観

SVD を \(A^*A\) の固有値問題として解く方法は理論的に簡単ですが、条件数を二乗し、小さい特異値の精度を悪化させます。実用的な密行列 SVD は次の二段階が標準です。

  1. Householder 変換で \(A\) を双対角行列 \(B\) へ縮約する。
  2. 双対角 \(B\) の SVD を QR 型、dqds、分割統治などで求める。

10.7 Golub–Kahan 双対角化

\(m\ge n\) とします。左と右から Householder 変換をかけ、

\[ U_0^*AV_0=B \]

となる上双対角行列

\[ B=\begin{bmatrix} \alpha_1&\beta_1&0&\cdots\\ 0&\alpha_2&\beta_2&\ddots\\ \vdots&\ddots&\ddots&\ddots\\ 0&\cdots&0&\alpha_n\\ 0&\cdots&0&0 \end{bmatrix} \]

を作ります。

アルゴリズム:Householder 双対角化の概略
for k = 1..n:
    choose left Householder H_k to zero A[k+1:m, k]
    A[k:m, k:n] = H_k A[k:m, k:n]
    if k < n:
        choose right Householder G_k to zero A[k, k+2:n]
        A[k:m, k+1:n] = A[k:m, k+1:n] G_k
Result: bidiagonal B stored in A, with accumulated U and V if needed

密行列でのコストは概ね \(4mn^2-4n^3/3\) flops 程度です。特異ベクトルも必要なら左右の Householder を蓄積します。

10.8 双対角 SVD・Jacobi SVD・Lanczos・ランダム化 SVD

双対角 \(B\) の特異値は対称三重対角 \(T=B^*B\) の固有値の平方根です。ただし明示的に \(B^*B\) を作ると相対精度に問題が出るため、実装では双対角構造上で implicit QR や dqds を行います。

Jacobi 型 SVD は列対の直交化を反復します。非常に高精度ですが、大規模密行列では標準法より遅いことがあります。巨大疎行列や行列ベクトル積だけ可能な場合は Lanczos 双対角化を使います。

\[ Av_k=\alpha_k u_k+\beta_{k-1}u_{k-1},\qquad A^*u_k=\alpha_k v_k+\beta_k v_{k+1}. \]
アルゴリズム:randomized SVD
Input: A, target rank k, oversampling p, power iterations q
1. Draw random Ω in F^{n x (k+p)}
2. Y = A Ω
3. for t = 1..q: Y = A (A* Y), with orthonormalization
4. Orthonormalize Y = Q R
5. Form small B = Q* A
6. Compute SVD B = Ũ Σ V*
7. U = Q Ũ
Output: U[:,1:k], Σ[1:k], V[:,1:k]

10.9 具体例

例:対角行列の SVD

\[ A=\begin{bmatrix}3&0\\0&-2\end{bmatrix}. \]

特異値は \(3,2\)。負号は右または左特異ベクトルに吸収できます。

\[ A=I\begin{bmatrix}3&0\\0&2\end{bmatrix} \begin{bmatrix}1&0\\0&-1\end{bmatrix}^T. \]

11. 特殊行列クラス別の理論とアルゴリズム

11.1 Hermitian 行列

スペクトル定理

\(A=A^*\) ならユニタリ行列 \(Q\) と実対角行列 \(\Lambda\) が存在し、

\[ A=Q\Lambda Q^*. \]

固有値は実数で、異なる固有値に属する固有ベクトルは直交します。

Rayleigh 商は

\[ R_A(x)=\frac{x^*Ax}{x^*x} =\frac{\sum_i\lambda_i|q_i^*x|^2}{\sum_i|q_i^*x|^2} \]

なので、\(\lambda_{\min}\le R_A(x)\le\lambda_{\max}\)。Courant–Fischer の min-max 原理は

\[ \lambda_k=\min_{\dim S=n-k+1}\max_{x\in S, x\ne0}R_A(x) =\max_{\dim S=k}\min_{x\in S,x\ne0}R_A(x). \]

Hermitian 行列のアルゴリズムでは、三重対角化、Lanczos 法、共役勾配法、Cholesky が基本です。

11.2 ユニタリ行列

\(U^*U=I\) は内積を保存します。

\[ \langle Ux,Uy\rangle=x^*U^*Uy=x^*y. \]

したがって \(\|Ux\|_2=\|x\|_2\)。数値計算でユニタリ変換が好まれる理由は、ノルムと条件を悪化させないためです。Householder、Givens、QR、Schur、SVD の中心にユニタリ行列があります。

ユニタリ行列の固有値は \(|\lambda|=1\) を満たします。特異値はすべて 1 です。

11.3 上三角行列

上三角行列 \(U\) の固有値は対角成分です。関数 \(f(U)\) も上三角で、対角成分は \(f(u_{ii})\) になります。三角方程式 \(Ux=b\) は後ろから

\[ x_i=\frac{1}{u_{ii}}\left(b_i-\sum_{j=i+1}^n u_{ij}x_j\right) \]

と解けます。計算量は \(O(n^2)\)。上三角は Schur 分解と LU の \(U\) に現れます。

11.4 三重対角行列

三重対角行列

\[ T=\begin{bmatrix} b_1&c_1&0&\cdots\\ a_2&b_2&c_2&\ddots\\ 0&a_3&b_3&\ddots\\ \vdots&\ddots&\ddots&\ddots \end{bmatrix} \]

に対する連立方程式は Thomas 法で \(O(n)\) です。これはピボットなし LU を三重対角構造に特殊化したものです。

アルゴリズム:Thomas 法
Given lower a[2..n], diagonal b[1..n], upper c[1..n-1], rhs d[1..n]
for i = 2..n:
    m = a[i] / b[i-1]
    b[i] = b[i] - m c[i-1]
    d[i] = d[i] - m d[i-1]
x[n] = d[n] / b[n]
for i = n-1 down to 1:
    x[i] = (d[i] - c[i] x[i+1]) / b[i]

対称三重対角行列の固有値は Sturm 列で個数判定できます。\(T-\mu I\) の LDL^T 分解の符号変化数により、\(\mu\) 未満の固有値数を数えられます。これにより二分法で固有値を高信頼に求められます。

11.5 正規行列

正規行列 \(A^*A=AA^*\) はユニタリ対角化可能です。Hermitian、歪 Hermitian、ユニタリはいずれも正規です。正規行列では

\[ \|A\|_2=\max_i|\lambda_i|,\qquad \|f(A)\|_2=\max_i|f(\lambda_i)| \]

が成り立ちます。非正規行列では固有値だけからノルムや過渡挙動を判断できません。

11.6 冪零行列・Jordan ブロック

\(N^k=0\) となる行列を冪零行列といいます。Jordan ブロック

\[ J_\lambda=\lambda I+N,\qquad N=\begin{bmatrix}0&1&0&\cdots\\0&0&1&\ddots\\\vdots&&\ddots&\ddots\\0&\cdots&0&0\end{bmatrix} \]

は固有値 \(\lambda\) まわりの非対角化可能性を表します。行列関数では

\[ f(J_\lambda)=\sum_{k=0}^{s-1}\frac{f^{(k)}(\lambda)}{k!}N^k. \]

しかし数値計算で Jordan 構造を直接求めるのは避けます。

12. 低ランク近似・疑似逆・最小二乗

12.1 最小二乗の三つの解法

方法長所短所
正規方程式\(A^*Ax=A^*b\)実装容易。正定値なら Cholesky 可。条件数が二乗。悪条件に弱い。
QR\(A=QR,\ Rx=Q^*b\)安定。標準的。SVD より rank 診断は弱い。
SVD\(x=V\Sigma^+U^*b\)rank 欠損・最小ノルム・正則化に強い。計算量が高い。

12.2 Tikhonov 正則化

ノイズ増幅を抑えるため

\[ \min_x \|Ax-b\|_2^2+\lambda^2\|x\|_2^2 \]

を解くと、SVD 表現で

\[ x_\lambda=\sum_i\frac{\sigma_i}{\sigma_i^2+\lambda^2}(u_i^*b)v_i. \]

小さい特異値方向の係数が抑制されます。切断 SVD は \(\sigma_i\) が閾値以下の項を捨てる方法です。

12.3 PCA

データ行列 \(X\in\mathbb R^{m\times n}\) の列を中心化したとき、共分散行列は \(C=(1/(m-1))X^TX\)。SVD \(X=U\Sigma V^T\) により主成分方向は \(V\)、分散は \(\sigma_i^2/(m-1)\) です。

rank \(k\) 近似 \(X_k=U_k\Sigma_kV_k^T\) は Frobenius ノルムで最良なので、PCA は最小二乗的な次元削減です。

13. 行列関数・指数関数・極分解

13.1 行列多項式と解析関数

多項式 \(p(z)=\sum_k c_k z^k\) に対し

\[ p(A)=\sum_k c_kA^k. \]

解析関数 \(f\) も冪級数や Schur 分解を通じて定義できます。\(A=QTQ^*\) なら

\[ f(A)=Qf(T)Q^*. \]

対角化可能なら \(A=X\Lambda X^{-1}\) により \(f(A)=Xf(\Lambda)X^{-1}\)。Jordan 形を使う場合は導関数が現れます。

13.2 行列指数関数

行列指数関数は

\[ e^A=\sum_{k=0}^{\infty}\frac{A^k}{k!} \]

で定義され、線形微分方程式 \(x'(t)=Ax(t)\) の解は \(x(t)=e^{tA}x(0)\) です。計算には scaling and squaring + Padé 近似、Krylov 法、対角化・Schur 法が使われます。

13.3 極分解

任意の \(A\in\mathbb C^{m\times n}\) は

\[ A=QH \]

と分解できます。\(H=(A^*A)^{1/2}\) は Hermitian 半正定値、\(Q\) は部分等長写像です。列フルランクなら

\[ Q=A(A^*A)^{-1/2}. \]

SVD \(A=U\Sigma V^*\) から \(Q=UV^*\)、\(H=V\Sigma V^*\) と得られます。

14. 疎行列・グラフ・帯行列

14.1 疎行列の本質

疎行列とは非零成分が少ない行列です。ただし「少ない」だけでは不十分で、非零パターン、fill-in、メモリアクセス、並列性が重要です。疎行列を密行列として扱うと計算量・メモリが破綻します。

14.2 行列とグラフ

対称疎行列の非零パターンは無向グラフで表せます。\(a_{ij}\ne0\) なら頂点 \(i,j\) に辺を張ります。Cholesky 分解で新たに非零が発生する fill-in は、グラフの消去過程で辺を追加することに対応します。

14.3 並べ替え

疎 Cholesky/LU の fill-in を減らすため、対称問題では Approximate Minimum Degree、Nested Dissection などの並べ替えを使います。非対称 LU では列・行の並べ替えと数値ピボットの両立が課題です。

14.4 反復法と前処理

大規模疎行列では直接法より反復法が有効なことがあります。基本は Krylov 部分空間

\[ \mathcal K_k(A,r_0)=\operatorname{span}\{r_0,Ar_0,A^2r_0,\dots,A^{k-1}r_0\}. \]

正定値 Hermitian なら共役勾配法、非対称なら GMRES、BiCGSTAB などを使います。収束には前処理 \(M^{-1}A\) が決定的です。

\[ M^{-1}Ax=M^{-1}b. \]

Jacobi、SSOR、不完全 LU/Cholesky、代数的マルチグリッドなどがあります。良い前処理はスペクトルを集中させ、Krylov 法の反復回数を減らします。

15. 対話的デモ

以下はブラウザ上で動く簡易デモです。外部ライブラリに依存しない部分はオフラインでも動きます。Graphviz 図は d3-graphviz の読み込み後にレンダリングされます。

15.1 2×2 線形変換の可視化

行列 \(A=\begin{bmatrix}a&b\\c&d\end{bmatrix}\) を入力してください。

15.2 小行列計算機

行列 A、B を JSON 風に入力します。例:[[1,2],[3,4]]

15.3 LU 分解ステップ

部分ピボット付き LU を計算します。小さい行列で試してください。

15.4 Power iteration

2×2 行列の最大固有値方向を反復で近似します。

15.5 SVD 特異値デモ

実行列 A に対し、Jacobi 法で \(A^TA\) を対角化し、特異値を近似します。

16. 例題集

例題 1:rank と基本部分空間

\[ A=\begin{bmatrix}1&2&3\\2&4&6\\1&1&1\end{bmatrix}. \]

第2行は第1行の2倍なので rank は高々 2。第1行と第3行は独立なので rank は 2。

零空間は \(x_1+2x_2+3x_3=0\)、\(x_1+x_2+x_3=0\)。差を取ると \(x_2+2x_3=0\)、つまり \(x_2=-2x_3\)、\(x_1=x_3\)。

\[ \mathcal N(A)=\operatorname{span}\{(1,-2,1)^T\}. \]
例題 2:Schur 補で行列式を計算

\[ A=\begin{bmatrix}2&0&1\\0&2&1\\1&1&3\end{bmatrix} =\begin{bmatrix}B&C\\D&E\end{bmatrix}, \quad B=2I_2,\quad C=\begin{bmatrix}1\\1\end{bmatrix},\quad D=\begin{bmatrix}1&1\end{bmatrix},\quad E=3. \]

Schur 補は \(S=3-D B^{-1}C=3-(1,1)(\frac12 I)(1,1)^T=3-1=2\)。よって

\[ \det A=\det B\det S=4\cdot2=8. \]
例題 3:Cholesky で連立方程式を解く

\(A=\begin{bmatrix}4&2\\2&3\end{bmatrix}\)、\(b=(6,5)^T\)。先に求めた \(L=\begin{bmatrix}2&0\\1&\sqrt2\end{bmatrix}\)。

\(Ly=b\) より \(2y_1=6\)、\(y_1+\sqrt2y_2=5\)。したがって \(y_1=3\)、\(y_2=\sqrt2\)。次に \(L^Tx=y\)。

\[ \sqrt2 x_2=\sqrt2\Rightarrow x_2=1,\qquad 2x_1+x_2=3\Rightarrow x_1=1. \]

解は \(x=(1,1)^T\)。

例題 4:QR による最小二乗

\[ A=\begin{bmatrix}1\\1\\1\end{bmatrix},\quad b=\begin{bmatrix}1\\2\\4\end{bmatrix}. \]

これは定数 \(x\) でデータを近似する問題。\(q=(1,1,1)^T/\sqrt3\)、\(R=[\sqrt3]\)。

\[ x=R^{-1}q^Tb=\frac1{\sqrt3}\cdot\frac{1+2+4}{\sqrt3}=\frac73. \]

平均値が最小二乗解になります。

例題 5:SVD と条件数

\[ A=\begin{bmatrix}1&0\\0&10^{-6}\end{bmatrix}. \]

特異値は \(1,10^{-6}\)。したがって \(\kappa_2(A)=10^6\)。右辺の相対誤差が \(10^{-8}\) でも、解の相対誤差は最悪 \(10^{-2}\) 程度まで増幅され得ます。

例題 6:ユニタリ不変ノルム

ユニタリ \(Q,Z\) について \(\|QAZ\|_2=\|A\|_2\)。なぜなら

\[ \|QAZx\|_2=\|AZx\|_2 \]

かつ \(z=Zx\) は \(\|z\|_2=\|x\|_2\) を保って全単位球を走るためです。Frobenius ノルムも trace により同様です。

17. 演習問題

各問題の下にヒントを折りたたみで置いています。

A. 基礎・構造
  1. \(AB\) と \(BA\) がともに定義されるとき、非零固有値が重複度込みで一致する条件を調べよ。特に \(A\in\mathbb F^{m\times n},B\in\mathbb F^{n\times m}\) で示せ。
  2. 射影 \(P^2=P\) の固有値が 0 または 1 であることを示せ。
  3. \(A\) が冪零なら \(I-A\) が正則であることを示し、逆行列を有限和で書け。
  4. ブロック行列の Schur 補を使って逆行列公式を導け。
  5. \(\operatorname{rank}(A^*A)=\operatorname{rank}(A)\) を示せ。
ヒント
Sylvester の行列式恒等式、最小多項式、有限 Neumann 級数、ブロック Gaussian 消去、\(x^*A^*Ax=\|Ax\|^2\) を使う。
B. LU・Cholesky
  1. \(A=\begin{bmatrix}0&1\\1&0\end{bmatrix}\) がピボットなし LU を持たないこと、しかし PLU を持つことを説明せよ。
  2. 任意の正定値 Hermitian 行列の先頭主座小行列が正定値であることを示せ。
  3. Cholesky の計算量が LU の約半分になる理由を成分数から説明せよ。
  4. 三重対角正定値行列の Cholesky が三重対角構造を保つことを示せ。
  5. 部分ピボット付き LU で \(PA=LU\) を得たとき、\(Ax=b\) の解法手順を擬似コードで書け。
ヒント
先頭ピボット、主座小行列の二次形式、下三角のみの演算、fill-in の位置、置換後の前進・後退代入を確認する。
C. QR・最小二乗
  1. Householder 反射 \(H=I-2vv^*/(v^*v)\) が Hermitian かつユニタリであることを示せ。
  2. 正規方程式の条件数が \(\kappa_2(A)^2\) になることを示せ。
  3. 列ピボット付き QR の \(|r_{kk}|\) が数値ランクの指標になる理由を説明せよ。
  4. Gram–Schmidt が列の線形従属性に弱い理由を丸め誤差の観点から説明せよ。
  5. \(A=QR\) で \(Q^*Q=I\) のとき、\(\|Ax-b\|_2^2=\|Rx-Q^*b\|_2^2+\|(I-QQ^*)b\|_2^2\) を示せ。
ヒント
射影分解 \(b=QQ^*b+(I-QQ^*)b\) と直交性を使う。
D. 固有値・SVD
  1. Hermitian 行列の固有値が実数であることを示せ。
  2. 正規行列がユニタリ対角化可能であることの証明方針を Schur 分解から述べよ。
  3. SVD から \(\|A\|_2=\sigma_1\) を示せ。
  4. SVD から \(\mathcal N(A)=\operatorname{span}\{v_i:\sigma_i=0\}\) を示せ。
  5. Eckart–Young の 2-ノルム版を、右特異ベクトル部分空間を使って証明せよ。
ヒント
\(Ax=U\Sigma V^*x\) と置き、\(y=V^*x\) を使う。最良近似では rank-nullity により、ある単位ベクトルが \(B\) の核と上位特異空間の交わりに存在する。
E. 特殊行列・応用
  1. ユニタリ行列の特異値がすべて 1 であることを示せ。
  2. 三重対角 Thomas 法を 4×4 の記号行列に対して手で実行せよ。
  3. 巡回行列が Fourier 行列で対角化されることを 3×3 の例で確認せよ。
  4. グラフ Laplacian が半正定値で、定数ベクトルを核にもつことを示せ。
  5. Tikhonov 正則化の SVD フィルタ係数 \(\sigma/(\sigma^2+\lambda^2)\) の形を導け。
ヒント
\(U^*U=I\)、FFT 基底、\(x^TLx=\sum_{(i,j)}(x_i-x_j)^2\)、正規方程式 \((A^*A+\lambda^2I)x=A^*b\) を使う。

18. 実装チェックリスト

行列計算で最初に確認すること
  • 行列は正方か長方か。\(m,n\) はどちらが大きいか。
  • Hermitian、正定値、三角、帯、疎、低ランクなどの構造があるか。
  • 解きたい問題は線形方程式、最小二乗、固有値、特異値、行列関数のどれか。
  • 条件数または小さい特異値が問題になりそうか。
  • 右辺が1本か複数か。分解コストを使い回せるか。
  • 密行列か疎行列か。メモリ帯域が律速か、演算が律速か。
  • 精度優先か速度優先か。後退安定性が必要か。
状況推奨避けたいこと
一般正方 \(Ax=b\)部分ピボット付き LU逆行列を明示的に作る
Hermitian 正定値Cholesky、反復なら CG一般 LU で構造を捨てる
過決定最小二乗Householder QR悪条件で正規方程式
rank 欠損・悪条件SVD、正則化閾値なしの疑似逆
一般固有値Hessenberg + QR/SchurJordan 形を数値的に求める
Hermitian 固有値三重対角化 + 専用法一般非対称固有値法
三重対角連立Thomas 法密 LU
大規模疎疎直接法または前処理付き Krylov密行列化

19. 参考文献・次に読むもの

さらに深めるには以下の古典的文献が有用です。

  • Golub and Van Loan, Matrix Computations.
  • Trefethen and Bau, Numerical Linear Algebra.
  • Horn and Johnson, Matrix Analysis.
  • Demmel, Applied Numerical Linear Algebra.
  • Higham, Accuracy and Stability of Numerical Algorithms.
  • Saad, Iterative Methods for Sparse Linear Systems.
このレポートの拡張候補

Cauchy interlacing、Weyl 不等式、Davis–Kahan sin Θ 定理、pseudospectrum、structured matrices、matrix manifolds、random matrix theory、preconditioning theory、communication avoiding algorithms、mixed precision iterative refinement などへ進めます。