コンテンツにスキップ

Krylov 部分空間法 I:Lanczos 法と共役勾配法の最適性と Chebyshev 多項式による収束評価

対象読者: 本テーマの冪乗法の章と定常反復法の章、および多項式補間(チェビシェフ点)を学んだ人。クリロフ部分空間や共役勾配法は仮定せず、ここから導入します。

前提となる記事:固有値の計算 I:冪乗法・逆反復・Rayleigh 商反復と同時反復、定常反復法:Jacobi 法・Gauss–Seidel 法・SOR 法の収束と最適な緩和係数、多項式補間:誤差公式・Runge 現象・Chebyshev 点と Lebesgue 定数

生 Markdown

未知数が何万もある連立一次方程式 Ax=bA\boldsymbol{x} = \boldsymbol{b} や、大きな行列の固有値を、行列とベクトルの掛け算だけで効率よく求める方法の話です。ベクトルに行列を繰り返し掛けると新しいベクトルが次々にできますが、基本の発想は、それらを捨てずに全部使って最もよい近似を選ぶことです。読み終えると、共役勾配法がなぜ少ない回数で解けるのか、反復回数が行列の「性質の悪さ」を表す数の平方根に比例するとはどういうことかが分かります。

  • b,Ab,…,Ak−1b\boldsymbol{b}, A\boldsymbol{b}, \ldots, A^{k-1}\boldsymbol{b} の張る Krylov 部分空間 Kk(A,b)\mathcal{K}_k(A, \boldsymbol{b}) は「deg⁡p<k\deg p < k の多項式 pp による p(A)bp(A)\boldsymbol{b} の全体」です。冪乗法は最後のベクトル Ak−1bA^{k-1}\boldsymbol{b} しか使いませんが、Krylov 部分空間法はこの空間全体から最良のものを選びます。
  • 正規直交基底を作る Arnoldi の過程(Kk\mathcal{K}_k の基底を 1 本ずつ直交化しながら作る手順)は AQk=Qk+1H~kAQ_k = Q_{k+1}\tilde{H}_k を満たし、AA が Hermite 行列なら HkH_k は三重対角になって、3 項の漸化式(Lanczos 法)で済みます。
  • HkH_k の固有値(Ritz 値。Kk\mathcal{K}_k の中で見つかる固有値の近似値)の最大は Kk\mathcal{K}_k 上の Rayleigh 商の最大で、kk とともに単調に増えて λ1\lambda_1 に近づきます。誤差は (λ1−λn)tan⁡2∠(b,u1)/Tk−1(1+2γ)2(\lambda_1 - \lambda_n)\tan^2\angle(\boldsymbol{b}, \boldsymbol{u}_1)/T_{k-1}(1 + 2\gamma)^2 以下です(Kaniel–Paige の評価)。
  • 正定値行列の共役勾配法は、x0+Kk\boldsymbol{x}_0 + \mathcal{K}_k の上で誤差の AA ノルム(誤差 e\boldsymbol{e} の大きさを (e∗Ae)1/2(\boldsymbol{e}^{*}A\boldsymbol{e})^{1/2} で測ったもの)を最小にします。そのため ∥ek∥A≤2((κ−1)/(κ+1))k∥e0∥A\|\boldsymbol{e}_k\|_A \le 2\bigl((\sqrt{\kappa} - 1)/(\sqrt{\kappa} + 1)\bigr)^k\|\boldsymbol{e}_0\|_A が成り立ち、反復回数は κ\sqrt{\kappa} に比例します。最急降下法の (κ−1)/(κ+1)(\kappa - 1)/(\kappa + 1) より桁違いに速く、厳密な算術では相異なる固有値の個数以下の回数で終わります。
  • 共役勾配法の残差は Lanczos ベクトルの定数倍で、共役勾配法は Lanczos 法で作った三重対角の系を解くことと同じです。前処理つき共役勾配法(前処理は、方程式を解きやすい形に変える下ごしらえ)は M−1/2AM−1/2M^{-1/2}AM^{-1/2} への共役勾配法と同じ反復で、収束は κ(M−1A)\kappa(M^{-1}A) で決まります。

定常反復法の章 では、2 次元の離散 Laplace 方程式で Jacobi 法の反復回数が h−2h^{-2} に比例し、最適な ω\omega を知っていても SOR 法は h−1h^{-1} が限界であることを見ました。しかも ω\omega の最適値は Jacobi 法のスペクトル半径という、ふつうは分からない量に依存していました。

定常反復の kk 回目の誤差は Gke0G^k\boldsymbol{e}_0 です。G=I−M−1AG = I - M^{-1}A なので、これは「p(0)=1p(0) = 1 を満たす特定の kk 次多項式 p(t)=(1−t)kp(t) = (1 - t)^k に M−1AM^{-1}A を代入して e0\boldsymbol{e}_0 に掛けたもの」です。それなら、p(0)=1p(0) = 1 の kk 次多項式の中から最良のものを選べばもっと速くなるはずです。この発想を、パラメータを一切知らずに実行するのが共役勾配法です。

固有値の計算でも事情は同じです。冪乗法 は Ak−1bA^{k-1}\boldsymbol{b} だけを使い、それまでに作った b,Ab,…\boldsymbol{b}, A\boldsymbol{b}, \ldots を捨てていました。これらが張る空間の中で Rayleigh 商を最大にすれば、同じ行列ベクトル積の回数ではるかによい近似が得られます。これが Lanczos 法です。

2 つの算法は同じ Krylov 部分空間の上で動き、収束の評価はどちらも「区間の外で急に大きくなる多項式」、すなわち Chebyshev 多項式で与えられます。

この章でも Cn\mathbb{C}^n の標準内積 y∗x\boldsymbol{y}^{*}\boldsymbol{x}、ノルム ∥⋅∥\|\cdot\| と、冪乗法の章 の角(定義 2.1[固有値の計算 I])と Rayleigh 商 RA(x)R_A(\boldsymbol{x}) を使います。Pk\mathcal{P}_k は次数 kk 以下の多項式全体です。

定義 2.1(Krylov 部分空間)↗

A∈Cn×nA \in \mathbb{C}^{n\times n}、b∈Cn\boldsymbol{b} \in \mathbb{C}^n、b≠0\boldsymbol{b} \ne \boldsymbol{0} とする。k≥1k \ge 1 について

Kk(A,b)=span⁡{b,Ab,…,Ak−1b}\mathcal{K}_k(A, \boldsymbol{b}) = \operatorname{span}\{\boldsymbol{b}, A\boldsymbol{b}, \ldots, A^{k-1}\boldsymbol{b}\}

を kk 次の Krylov 部分空間という。Adb∈Kd(A,b)A^{d}\boldsymbol{b} \in \mathcal{K}_d(A, \boldsymbol{b}) となる最小の d≥1d \ge 1 を b\boldsymbol{b} の次数(grade)という。

命題 2.2(Krylov 部分空間の基本性質)✓

定義 2.1 の記号で次が成り立つ。

  1. Kk(A,b)={p(A)b:p∈Pk−1}\mathcal{K}_k(A, \boldsymbol{b}) = \{p(A)\boldsymbol{b} : p \in \mathcal{P}_{k-1}\}。
  2. dim⁡Kk(A,b)=min⁡(k,d)\dim\mathcal{K}_k(A, \boldsymbol{b}) = \min(k, d) であり、k≥dk \ge d なら Kk=Kd\mathcal{K}_k = \mathcal{K}_d で、Kd\mathcal{K}_d は AA で不変である。
  3. AA が対角化可能で相異なる固有値が ss 個なら d≤sd \le s である。
証明(命題 2.2)
  1. p(t)=∑j<kcjtjp(t) = \sum_{j<k}c_jt^j なら p(A)b=∑jcjAjbp(A)\boldsymbol{b} = \sum_jc_jA^j\boldsymbol{b} なので、定義の言い換えです。

  2. k<dk < d では dd の最小性から Akb∉KkA^{k}\boldsymbol{b} \notin \mathcal{K}_k なので、帰納法で b,…,Akb\boldsymbol{b}, \ldots, A^{k}\boldsymbol{b} は一次独立、つまり dim⁡Kk+1=k+1\dim\mathcal{K}_{k+1} = k + 1 です(k+1≤dk + 1 \le d)。Adb∈KdA^d\boldsymbol{b} \in \mathcal{K}_d なら AKd=span⁡{Ab,…,Adb}⊂KdA\mathcal{K}_d = \operatorname{span}\{A\boldsymbol{b}, \ldots, A^d\boldsymbol{b}\} \subset \mathcal{K}_d で、Kd\mathcal{K}_d は AA で不変です。よって Ajb∈KdA^j\boldsymbol{b} \in \mathcal{K}_d(j≥dj \ge d)で、k≥dk \ge d なら Kk=Kd\mathcal{K}_k = \mathcal{K}_d です。

  3. 対角化可能なので固有ベクトルの基底があり(定理 3.2[対角化とジョルダン標準形])、相異なる固有値を μ1,…,μs\mu_1, \ldots, \mu_s として q(t)=∏i=1s(t−μi)q(t) = \prod_{i=1}^{s}(t - \mu_i) とおくと、q(A)q(A) はすべての固有ベクトルを 00 に写すので q(A)=Oq(A) = O です。qq はモニックな ss 次式なので Asb=Asb−q(A)b∈KsA^s\boldsymbol{b} = A^s\boldsymbol{b} - q(A)\boldsymbol{b} \in \mathcal{K}_s で、d≤sd \le s です。

3. Arnoldi の関係式と Lanczos の三項漸化式

Section titled “3. Arnoldi の関係式と Lanczos の三項漸化式”

b,Ab,A2b,…\boldsymbol{b}, A\boldsymbol{b}, A^2\boldsymbol{b}, \ldots をそのまま基底に使うと、冪乗法と同じ理由で後のベクトルほど v1\boldsymbol{v}_1 の方向にそろい、数値的に一次従属に近づきます。そこで 1 本ずつ AA を掛けては直交化します。

定義 3.1(Arnoldi の過程)↗

q1=b/∥b∥\boldsymbol{q}_1 = \boldsymbol{b}/\|\boldsymbol{b}\| とし、j=1,2,…j = 1, 2, \ldots について

hij=qi∗Aqj (i≤j),wj=Aqj−∑i=1jhijqi,hj+1,j=∥wj∥h_{ij} = \boldsymbol{q}_i^{*}A\boldsymbol{q}_j\ (i \le j),\qquad \boldsymbol{w}_j = A\boldsymbol{q}_j - \sum_{i=1}^{j}h_{ij}\boldsymbol{q}_i,\qquad h_{j+1,j} = \|\boldsymbol{w}_j\|

を計算し、hj+1,j≠0h_{j+1,j} \ne 0 なら qj+1=wj/hj+1,j\boldsymbol{q}_{j+1} = \boldsymbol{w}_j/h_{j+1,j} とする。hj+1,j=0h_{j+1,j} = 0 なら停止する。Qk=(q1 ⋯ qk)Q_k = (\boldsymbol{q}_1\ \cdots\ \boldsymbol{q}_k)、Hk=(hij)1≤i,j≤kH_k = (h_{ij})_{1\le i,j\le k}(i>j+1i > j + 1 では hij=0h_{ij} = 0)、H~k\tilde{H}_k を HkH_k の下に行 (0,…,0,hk+1,k)(0, \ldots, 0, h_{k+1,k}) を足した (k+1)×k(k+1)\times k 行列とする。

定理 3.2(Arnoldi の関係式)✓

dd を b\boldsymbol{b} の次数とする。Arnoldi の過程は j=1,…,d−1j = 1, \ldots, d - 1 では停止せず(hj+1,j>0h_{j+1,j} > 0)、j=dj = d で停止する(hd+1,d=0h_{d+1,d} = 0)。1≤k≤d1 \le k \le d について次が成り立つ。

  1. q1,…,qk\boldsymbol{q}_1, \ldots, \boldsymbol{q}_k は正規直交で Kk(A,b)\mathcal{K}_k(A, \boldsymbol{b}) を張る。
  2. k<dk < d なら AQk=Qk+1H~kAQ_k = Q_{k+1}\tilde{H}_k、k=dk = d なら AQd=QdHdAQ_d = Q_dH_d。
  3. Hk=Qk∗AQkH_k = Q_k^{*}AQ_k。

証明は jj についての帰納法です。各段で「AqjA\boldsymbol{q}_j はまだ Kj\mathcal{K}_j に入っていないので、Kj\mathcal{K}_j への成分を引くと零でない新しい方向が残り、それを正規化したものが qj+1\boldsymbol{q}_{j+1} になる」ことを確かめ、最後に j=dj = d で新しい方向が残らなくなることを見ます。

証明(定理 3.2)

jj についての帰納法で、j<dj < d のとき「q1,…,qj\boldsymbol{q}_1, \ldots, \boldsymbol{q}_j は正規直交で Kj\mathcal{K}_j を張り、hj+1,j>0h_{j+1,j} > 0 で、q1,…,qj+1\boldsymbol{q}_1, \ldots, \boldsymbol{q}_{j+1} は正規直交で Kj+1\mathcal{K}_{j+1} を張る」ことを示します。K1=span⁡{q1}\mathcal{K}_1 = \operatorname{span}\{\boldsymbol{q}_1\} は明らかです。

q1,…,qj\boldsymbol{q}_1, \ldots, \boldsymbol{q}_j が正規直交で Kj\mathcal{K}_j を張るとします。qj∈Kj\boldsymbol{q}_j \in \mathcal{K}_j ですが、j≥2j \ge 2 では qj⊥Kj−1\boldsymbol{q}_j \perp \mathcal{K}_{j-1} なので qj∉Kj−1\boldsymbol{q}_j \notin \mathcal{K}_{j-1} です。よって qj=p(A)b\boldsymbol{q}_j = p(A)\boldsymbol{b} の pp はちょうど j−1j - 1 次で(命題 2.2 の 1)、Aqj=Ap(A)bA\boldsymbol{q}_j = Ap(A)\boldsymbol{b} を b,Ab,…\boldsymbol{b}, A\boldsymbol{b}, \ldots で展開したときの AjbA^j\boldsymbol{b} の係数は 00 でありません。j<dj < d では b,…,Ajb\boldsymbol{b}, \ldots, A^j\boldsymbol{b} は一次独立(命題 2.2 の 2)なので Aqj∉KjA\boldsymbol{q}_j \notin \mathcal{K}_j です。wj\boldsymbol{w}_j は AqjA\boldsymbol{q}_j から Kj\mathcal{K}_j への直交射影を引いたもの(定理 7.1[内積空間とグラム・シュミット直交化])なので wj≠0\boldsymbol{w}_j \ne \boldsymbol{0}、wj⊥Kj\boldsymbol{w}_j \perp \mathcal{K}_j で、qj+1\boldsymbol{q}_{j+1} は q1,…,qj\boldsymbol{q}_1, \ldots, \boldsymbol{q}_j と直交する単位ベクトルです。qj+1∈span⁡{Aqj,Kj}⊂Kj+1\boldsymbol{q}_{j+1} \in \operatorname{span}\{A\boldsymbol{q}_j, \mathcal{K}_j\} \subset \mathcal{K}_{j+1} で、次元を比べて span⁡{q1,…,qj+1}=Kj+1\operatorname{span}\{\boldsymbol{q}_1, \ldots, \boldsymbol{q}_{j+1}\} = \mathcal{K}_{j+1} です。

j=dj = d では Kd\mathcal{K}_d が AA で不変(命題 2.2 の 2)なので Aqd∈KdA\boldsymbol{q}_d \in \mathcal{K}_d で、wd=0\boldsymbol{w}_d = \boldsymbol{0}、つまり hd+1,d=0h_{d+1,d} = 0 です。

定義を書き直すと Aqj=∑i=1j+1hijqiA\boldsymbol{q}_j = \sum_{i=1}^{j+1}h_{ij}\boldsymbol{q}_i(j=dj = d では和は i≤di \le d まで)で、これを列に並べたものが 2 です。2 の左から Qk∗Q_k^{*} を掛けると、Qk∗Qk+1=(Ik  0)Q_k^{*}Q_{k+1} = (I_k\ \ \boldsymbol{0}) から Qk∗AQk=HkQ_k^{*}AQ_k = H_k です。

系 3.3(Lanczos の三項漸化式)✓

AA が Hermite 行列なら、HkH_k は実の三重対角行列

Hk=Tk=(α1β1β1α2⋱⋱⋱βk−1βk−1αk),αj=qj∗Aqj∈R,βj=hj+1,j>0H_k = T_k = \begin{pmatrix} \alpha_1 & \beta_1 & & \\ \beta_1 & \alpha_2 & \ddots & \\ & \ddots & \ddots & \beta_{k-1} \\ & & \beta_{k-1} & \alpha_k \end{pmatrix},\qquad \alpha_j = \boldsymbol{q}_j^{*}A\boldsymbol{q}_j \in \mathbb{R},\quad \beta_j = h_{j+1,j} > 0

であり、Arnoldi の過程は

βjqj+1=Aqj−αjqj−βj−1qj−1(β0q0=0)\beta_j\boldsymbol{q}_{j+1} = A\boldsymbol{q}_j - \alpha_j\boldsymbol{q}_j - \beta_{j-1}\boldsymbol{q}_{j-1}\qquad(\beta_0\boldsymbol{q}_0 = \boldsymbol{0})

に簡約される(Lanczos 法)。

証明の中心は、上 Hessenberg 行列(対角線のすぐ下より下がすべて 00 の行列)が Hermite でもあれば三重対角になる、という点です。

証明(系 3.3)

定理 3.2 の 3 から Hk∗=Qk∗A∗Qk=HkH_k^{*} = Q_k^{*}A^{*}Q_k = H_k で、HkH_k は Hermite 行列です。HkH_k は上 Hessenberg(i>j+1i > j + 1 で 00)なので、Hermite 性から j>i+1j > i + 1 でも 00、すなわち三重対角です。対角成分は Hermite 行列の対角なので実数、副対角は hij=hji‾h_{ij} = \overline{h_{ji}} と hj+1,j=∥wj∥>0h_{j+1,j} = \|\boldsymbol{w}_j\| > 0 から hj,j+1=hj+1,jh_{j,j+1} = h_{j+1,j} で実数です。漸化式は Arnoldi の wj\boldsymbol{w}_j の和の中で hij=0h_{ij} = 0(i<j−1i < j - 1)の項を落としたものです。

1 回の Lanczos の反復は、行列ベクトル積 1 回とベクトル演算 O(n)O(n) だけで済み、保持するベクトルも 3 本です。Arnoldi の過程は jj 本すべてとの内積が要るので、反復が進むほど重くなります。この差が、Hermite 行列の Krylov 部分空間法(Lanczos 法・共役勾配法)が一般の行列の方法(Arnoldi 法・GMRES)より軽い理由です。

以下この節では AA を nn 次 Hermite 行列とし、固有値を λ1≥λ2≥⋯≥λn\lambda_1 \ge \lambda_2 \ge \cdots \ge \lambda_n、対応する正規直交な固有ベクトルを u1,…,un\boldsymbol{u}_1, \ldots, \boldsymbol{u}_n とします(定理 4.2[スペクトル定理])。

定義 4.1(Ritz 値)↗

1≤k≤d1 \le k \le d について、三重対角行列 Tk=Qk∗AQkT_k = Q_k^{*}AQ_k の固有値 θ1(k)≥⋯≥θk(k)\theta_1^{(k)} \ge \cdots \ge \theta_k^{(k)} を Kk(A,b)\mathcal{K}_k(A, \boldsymbol{b}) に関する Ritz 値という。Tks=θsT_k\boldsymbol{s} = \theta\boldsymbol{s} のとき QksQ_k\boldsymbol{s} を Ritz ベクトルという。

定理 4.2(Ritz 値の最適性と交互性)✓

1≤k≤d1 \le k \le d とする。

  1. θ1(k)=max⁡{RA(x):x∈Kk, x≠0}\theta_1^{(k)} = \max\{R_A(\boldsymbol{x}) : \boldsymbol{x} \in \mathcal{K}_k,\ \boldsymbol{x} \ne \boldsymbol{0}\}、θk(k)=min⁡{RA(x):x∈Kk, x≠0}\theta_k^{(k)} = \min\{R_A(\boldsymbol{x}) : \boldsymbol{x} \in \mathcal{K}_k,\ \boldsymbol{x} \ne \boldsymbol{0}\}。
  2. λi≥θi(k)≥λi+n−k\lambda_i \ge \theta_i^{(k)} \ge \lambda_{i+n-k}(1≤i≤k1 \le i \le k)。
  3. k+1≤dk + 1 \le d なら θi(k+1)≥θi(k)≥θi+1(k+1)\theta_i^{(k+1)} \ge \theta_i^{(k)} \ge \theta_{i+1}^{(k+1)}(1≤i≤k1 \le i \le k)。とくに θ1(k)\theta_1^{(k)} は kk について単調に増加して λ1\lambda_1 を超えず、θk(k)\theta_k^{(k)} は単調に減少して λn\lambda_n を下回らない。
  4. k=dk = d なら Ritz 値はすべて AA の固有値である。
証明(定理 4.2)
  1. x∈Kk\boldsymbol{x} \in \mathcal{K}_k は x=Qky\boldsymbol{x} = Q_k\boldsymbol{y} と一意に書け、QkQ_k の列は正規直交なので ∥x∥=∥y∥\|\boldsymbol{x}\| = \|\boldsymbol{y}\|、x∗Ax=y∗Tky\boldsymbol{x}^{*}A\boldsymbol{x} = \boldsymbol{y}^{*}T_k\boldsymbol{y} です。よって RA(x)=RTk(y)R_A(\boldsymbol{x}) = R_{T_k}(\boldsymbol{y}) で、y\boldsymbol{y} は Ck∖{0}\mathbb{C}^k \setminus \{\boldsymbol{0}\} 全体を動きます。Hermite 行列 TkT_k の Rayleigh 商の最大・最小は最大・最小の固有値です(定理 7.1[スペクトル定理] の 1)。

  2. Cauchy の交互定理(定理 3.3[行列の固有値評価と不等式])を P=QkP = Q_k(Qk∗Qk=IkQ_k^{*}Q_k = I_k)に使えばよい。

  3. TkT_k は Tk+1T_{k+1} の左上の kk 次主部分行列なので、交互定理を Tk+1T_{k+1} と P=(Ik  0)TP = (I_k\ \ \boldsymbol{0})^{\mathsf{T}} に使うと θi(k+1)≥θi(k)≥θi+1(k+1)\theta_i^{(k+1)} \ge \theta_i^{(k)} \ge \theta_{i+1}^{(k+1)} です。後半はこれと 2 から従います。

  4. AQd=QdTdAQ_d = Q_dT_d(定理 3.2 の 2)なので、Tds=θsT_d\boldsymbol{s} = \theta\boldsymbol{s}、s≠0\boldsymbol{s} \ne \boldsymbol{0} なら A(Qds)=QdTds=θQdsA(Q_d\boldsymbol{s}) = Q_dT_d\boldsymbol{s} = \theta Q_d\boldsymbol{s} で、Qds≠0Q_d\boldsymbol{s} \ne \boldsymbol{0} です。

冪乗法の Rayleigh 商 RA(Ak−1b)R_A(A^{k-1}\boldsymbol{b}) は Kk\mathcal{K}_k の 1 点での値なので、1 から θ1(k)≥RA(Ak−1b)\theta_1^{(k)} \ge R_A(A^{k-1}\boldsymbol{b}) です。同じ k−1k - 1 回の行列ベクトル積で、Lanczos 法はつねに冪乗法以上の近似を与えます。どれだけ上回るかを定量化したのが次の定理で、ここで Chebyshev 多項式 TjT_j(定義 2.1[誤差保証つきの求積と関数近似])が登場します。使う性質は 2 つ、[−1,1][-1, 1] で ∣Tj(x)∣≤1|T_j(x)| \le 1 であること(Tj(cos⁡ϕ)=cos⁡jϕT_j(\cos\phi) = \cos j\phi。補題 6.1[多項式補間])と、x≥1x \ge 1 で Tj(x)≥12(x+x2−1)jT_j(x) \ge \tfrac{1}{2}(x + \sqrt{x^2 - 1})^j と急に大きくなること(補題 6.4[多項式補間])です。

次の定理の γ\gamma は、最大固有値 λ1\lambda_1 が残りの固有値の区間 [λn,λ2][\lambda_n, \lambda_2] からどれだけ離れているかを、区間の幅との比で測った量で、離れているほど Lanczos 法は速く収束します。Chebyshev 多項式を使うのは、区間 [λn,λ2][\lambda_n, \lambda_2] の上では絶対値が 1 以下におさまり、その外の λ1\lambda_1 では急に大きくなる多項式だからです。証明では、Kk\mathcal{K}_k の元 p(A)bp(A)\boldsymbol{b} の中で u1\boldsymbol{u}_1 の成分だけが大きく他の成分が小さいものとして、この多項式を選びます。

定理 4.3(最大の Ritz 値の収束(Kaniel–Paige の評価))✓

λ1>λ2>λn\lambda_1 > \lambda_2 > \lambda_n とし、u1∗b≠0\boldsymbol{u}_1^{*}\boldsymbol{b} \ne 0、1≤k≤d1 \le k \le d とする。

γ=λ1−λ2λ2−λn\gamma = \frac{\lambda_1 - \lambda_2}{\lambda_2 - \lambda_n}

とおくと

0≤λ1−θ1(k)≤(λ1−λn)(tan⁡∠(b,u1)Tk−1(1+2γ))20 \le \lambda_1 - \theta_1^{(k)} \le (\lambda_1 - \lambda_n)\left(\frac{\tan\angle(\boldsymbol{b}, \boldsymbol{u}_1)}{T_{k-1}(1 + 2\gamma)}\right)^2

が成り立つ。

証明(定理 4.3)

左の不等号は 定理 4.2 の 2 です。p∈Pk−1p \in \mathcal{P}_{k-1} で p(λ1)≠0p(\lambda_1) \ne 0 なものを 1 つとり、x=p(A)b∈Kk\boldsymbol{x} = p(A)\boldsymbol{b} \in \mathcal{K}_k とします(命題 2.2 の 1)。ci=ui∗bc_i = \boldsymbol{u}_i^{*}\boldsymbol{b} とおくと x=∑icip(λi)ui≠0\boldsymbol{x} = \sum_ic_ip(\lambda_i)\boldsymbol{u}_i \ne \boldsymbol{0} で、

λ1−RA(x)=∑i≥2∣ci∣2∣p(λi)∣2(λ1−λi)∑i∣ci∣2∣p(λi)∣2≤(λ1−λn)max⁡i≥2∣p(λi)∣2∣p(λ1)∣2⋅∑i≥2∣ci∣2∣c1∣2\lambda_1 - R_A(\boldsymbol{x}) = \frac{\sum_{i\ge2}|c_i|^2|p(\lambda_i)|^2(\lambda_1 - \lambda_i)}{\sum_{i}|c_i|^2|p(\lambda_i)|^2} \le (\lambda_1 - \lambda_n)\max_{i\ge2}\frac{|p(\lambda_i)|^2}{|p(\lambda_1)|^2}\cdot\frac{\sum_{i\ge2}|c_i|^2}{|c_1|^2}

です(分母を ∣c1∣2∣p(λ1)∣2|c_1|^2|p(\lambda_1)|^2 に減らした)。最後の比は tan⁡2∠(b,u1)\tan^2\angle(\boldsymbol{b}, \boldsymbol{u}_1) です(補題 2.2[固有値の計算 I] の 4)。定理 4.2 の 1 から θ1(k)≥RA(x)\theta_1^{(k)} \ge R_A(\boldsymbol{x}) なので、λ1−θ1(k)\lambda_1 - \theta_1^{(k)} も同じ式で抑えられます。

ここで ℓ(t)=(2t−λ2−λn)/(λ2−λn)\ell(t) = (2t - \lambda_2 - \lambda_n)/(\lambda_2 - \lambda_n) とおき、p(t)=Tk−1(ℓ(t))p(t) = T_{k-1}(\ell(t)) とします(ℓ\ell は 1 次式なので p∈Pk−1p \in \mathcal{P}_{k-1})。ℓ\ell は [λn,λ2][\lambda_n, \lambda_2] を [−1,1][-1, 1] に写し、ℓ(λ1)=1+2γ>1\ell(\lambda_1) = 1 + 2\gamma > 1 です。i≥2i \ge 2 では ℓ(λi)∈[−1,1]\ell(\lambda_i) \in [-1, 1] なので、ℓ(λi)=cos⁡ϕ\ell(\lambda_i) = \cos\phi と書いて ∣p(λi)∣=∣cos⁡((k−1)ϕ)∣≤1|p(\lambda_i)| = |\cos((k-1)\phi)| \le 1(補題 6.1[多項式補間])です。一方 p(λ1)=Tk−1(1+2γ)≥12(1+2γ+(1+2γ)2−1)k−1>0p(\lambda_1) = T_{k-1}(1 + 2\gamma) \ge \tfrac12(1 + 2\gamma + \sqrt{(1 + 2\gamma)^2 - 1})^{k-1} > 0(補題 6.4[多項式補間])です。これを代入すれば主張を得ます。

冪乗法(系 3.5[固有値の計算 I]。AA が正定値なら ∣λ2/λ1∣|\lambda_2/\lambda_1| が比)と比べます。γ\gamma が小さいとき Tk−1(1+2γ)≈12e2(k−1)γT_{k-1}(1 + 2\gamma) \approx \tfrac12 e^{2(k-1)\sqrt{\gamma}} なので、Lanczos 法の誤差は 1 回あたり約 e−4γe^{-4\sqrt{\gamma}} 倍、冪乗法は (λ2/λ1)2≈e−2(λ1−λ2)/λ1(\lambda_2/\lambda_1)^2 \approx e^{-2(\lambda_1 - \lambda_2)/\lambda_1} 倍です。たとえば固有値が [0,1][0, 1] に広がり λ1−λ2=10−2\lambda_1 - \lambda_2 = 10^{-2} なら、γ≈10−2\gamma \approx 10^{-2} で Lanczos 法は 1 回あたり e−0.4e^{-0.4}、冪乗法は e−0.02e^{-0.02} で、Lanczos 法は約 20 倍少ない反復で済みます。差は隔たり γ\gamma の平方根から生じます。

注意 4.4(有限精度の Lanczos 法:直交性の喪失とゴースト)

三項漸化式は qj+1\boldsymbol{q}_{j+1} を直前の 2 本とだけ直交化するので、丸め誤差があると qj\boldsymbol{q}_j たちの直交性は失われます。Paige は、直交性の喪失がちょうど Ritz 値が固有値に収束したときに起こり、その結果すでに収束した固有値が Ritz 値として何度も現れる(ゴースト、複製)ことを示しました。Ritz 値の位置そのものは正しく、失われるのは重複度の情報です。この解析は研究水準の議論で、本章では使いません。Paige の 1971 年の学位論文と 1976・1980 年の論文、Parlett『The Symmetric Eigenvalue Problem』第 13 章、Meurant–Strakoš, “The Lanczos and conjugate gradient algorithms in finite precision arithmetic”, Acta Numerica 15 (2006) を参照してください。実用では、収束した Ritz ベクトルに対してだけ直交化し直す選択的再直交化などが使われます。

再直交化とは、新しいベクトルを直前の 2 本だけでなく、それまでに作った全部のベクトルと直交させ直す手間のことです。これを省くと丸め誤差で直交性が崩れ、同じ固有値が Ritz 値として何度も現れます(ゴースト)。

次のコードは、固有値が上の端で疎になるように並べた対角行列(Strakoš が有限精度の解析で使った分布)で、Lanczos 法を再直交化なしと完全再直交化で行い、最大固有値 λmax⁡\lambda_{\max} に 10−810^{-8} 以内まで近い Ritz 値の個数を数えたものです。

# Python 3.12.10 / NumPy 2.5.2(x86-64, OpenBLAS)
import numpy as np
n = 100 # 固有値の分布(Strakoš の例、rho = 0.9)
i = np.arange(n)
lam = 0.1 + i / (n - 1) * 99.9 * 0.9 ** (n - 1 - i) # A = diag(lam)
def lanczos(k, reorth):
Q = np.zeros((n, k + 1))
Q[:, 0] = np.ones(n) / np.sqrt(n)
al, be = np.zeros(k), np.zeros(k)
for j in range(k): # j = 0 では be[-1] = 0 なので第 2 項は 0
w = lam * Q[:, j] - be[j - 1] * Q[:, j - 1]
al[j] = Q[:, j] @ w
w -= al[j] * Q[:, j]
for _ in range(2 * reorth): # 完全再直交化(2 回)
w -= Q[:, :j + 1] @ (Q[:, :j + 1].T @ w)
be[j] = np.linalg.norm(w)
Q[:, j + 1] = w / be[j]
T = np.diag(al) + np.diag(be[:-1], 1) + np.diag(be[:-1], -1)
return np.linalg.eigvalsh(T), Q[:, :k]
print("k 再直交化 lam_max に 1e-8 以内の Ritz 値の個数")
for k, r in [(k, r) for k in range(20, 101, 20) for r in (0, 1)]:
th, Q = lanczos(k, r)
c = np.sum(abs(th - lam[-1]) < 1e-8)
e = np.linalg.norm(Q.T @ Q - np.eye(k))
es = "< 1e-14" if e < 1e-14 else f"{e:.0e}"
print(f"{k:3d} {'あり' if r else 'なし'} {c:2d}"
f" ||Q^T Q - I|| = {es}")
k 再直交化 lam_max に 1e-8 以内の Ritz 値の個数
20 なし 1 ||Q^T Q - I|| = 3e-08
20 あり 1 ||Q^T Q - I|| = < 1e-14
40 なし 2 ||Q^T Q - I|| = 3e+00
40 あり 1 ||Q^T Q - I|| = < 1e-14
60 なし 3 ||Q^T Q - I|| = 6e+00
60 あり 1 ||Q^T Q - I|| = < 1e-14
80 なし 4 ||Q^T Q - I|| = 9e+00
80 あり 1 ||Q^T Q - I|| = < 1e-14
100 なし 5 ||Q^T Q - I|| = 1e+01
100 あり 1 ||Q^T Q - I|| = < 1e-14

検算. (a) 固有値はすべて相異なり(構成した値)、λmax⁡=100\lambda_{\max} = 100 は単純なので、厳密な算術では 定理 4.2 の 3 と 2 から λmax⁡\lambda_{\max} の近くの Ritz 値は高々 1 個です。(b) 完全再直交化した計算ではつねに 1 個で、QQ の直交性も単位丸めの程度に保たれます。再直交化なしでは、k=20k = 20 ですでに直交性が 10−810^{-8} の程度まで崩れ始め、k=40k = 40 以降は約 20 回ごとに λmax⁡\lambda_{\max} の複製が 1 個ずつ増えます。(c) ゴーストが現れる周期は、Ritz 値が収束して直交性が失われる周期に対応しています(注意 4.4 の Paige の理論)。

以下 AA は正定値 Hermite 行列、x∗=A−1b\boldsymbol{x}^{*} = A^{-1}\boldsymbol{b} とし、誤差を AA ノルム(エネルギーノルム)∥e∥A=(e∗Ae)1/2\|\boldsymbol{e}\|_A = (\boldsymbol{e}^{*}A\boldsymbol{e})^{1/2} で測ります。x\boldsymbol{x} の誤差 x−x∗\boldsymbol{x} - \boldsymbol{x}^{*} と残差 r=b−Ax\boldsymbol{r} = \boldsymbol{b} - A\boldsymbol{x} の間には r=−A(x−x∗)\boldsymbol{r} = -A(\boldsymbol{x} - \boldsymbol{x}^{*}) の関係があります。

定義 5.1(共役勾配法)↗

x0∈Cn\boldsymbol{x}_0 \in \mathbb{C}^n から r0=b−Ax0\boldsymbol{r}_0 = \boldsymbol{b} - A\boldsymbol{x}_0、p0=r0\boldsymbol{p}_0 = \boldsymbol{r}_0 とし、rk≠0\boldsymbol{r}_k \ne \boldsymbol{0} である限り

αk=rk∗rkpk∗Apk,xk+1=xk+αkpk,rk+1=rk−αkApk,βk=rk+1∗rk+1rk∗rk,pk+1=rk+1+βkpk\begin{aligned} \alpha_k &= \frac{\boldsymbol{r}_k^{*}\boldsymbol{r}_k}{\boldsymbol{p}_k^{*}A\boldsymbol{p}_k}, & \boldsymbol{x}_{k+1} &= \boldsymbol{x}_k + \alpha_k\boldsymbol{p}_k, & \boldsymbol{r}_{k+1} &= \boldsymbol{r}_k - \alpha_kA\boldsymbol{p}_k,\\ \beta_k &= \frac{\boldsymbol{r}_{k+1}^{*}\boldsymbol{r}_{k+1}}{\boldsymbol{r}_k^{*}\boldsymbol{r}_k}, & \boldsymbol{p}_{k+1} &= \boldsymbol{r}_{k+1} + \beta_k\boldsymbol{p}_k && \end{aligned}

を繰り返す。rk=0\boldsymbol{r}_k = \boldsymbol{0} になったら止める。これを共役勾配法(CG 法)という。

1 回の反復は行列ベクトル積 1 回と内積 2 回・ベクトルの更新 3 回で、保持するベクトルは 4 本です。この単純な算法が、次の強い性質をもちます。

定理 5.2(共役勾配法の直交性と最適性)✓

r0,…,rk−1\boldsymbol{r}_0, \ldots, \boldsymbol{r}_{k-1} がすべて 0\boldsymbol{0} でないとする。このとき xk\boldsymbol{x}_k, rk\boldsymbol{r}_k まで定義され(分母は正)、次が成り立つ。

  1. rj=b−Axj\boldsymbol{r}_j = \boldsymbol{b} - A\boldsymbol{x}_j(j≤kj \le k)。
  2. ri∗rj=0\boldsymbol{r}_i^{*}\boldsymbol{r}_j = 0(0≤i<j≤k0 \le i < j \le k)、pi∗Apj=0\boldsymbol{p}_i^{*}A\boldsymbol{p}_j = 0(0≤i<j≤k−10 \le i < j \le k - 1)。
  3. span⁡{r0,…,rk−1}=span⁡{p0,…,pk−1}=Kk(A,r0)\operatorname{span}\{\boldsymbol{r}_0, \ldots, \boldsymbol{r}_{k-1}\} = \operatorname{span}\{\boldsymbol{p}_0, \ldots, \boldsymbol{p}_{k-1}\} = \mathcal{K}_k(A, \boldsymbol{r}_0) で、その次元は kk である。
  4. xk∈x0+Kk(A,r0)\boldsymbol{x}_k \in \boldsymbol{x}_0 + \mathcal{K}_k(A, \boldsymbol{r}_0) であり、xk\boldsymbol{x}_k は x0+Kk(A,r0)\boldsymbol{x}_0 + \mathcal{K}_k(A, \boldsymbol{r}_0) の中で ∥x−x∗∥A\|\boldsymbol{x} - \boldsymbol{x}^{*}\|_A を最小にするただ 1 つの点である。同じことだが、rk⊥Kk(A,r0)\boldsymbol{r}_k \perp \mathcal{K}_k(A, \boldsymbol{r}_0) である。

証明は kk についての帰納法で、残差 rj\boldsymbol{r}_j どうしが直交し、探索方向 pj\boldsymbol{p}_j どうしが AA について直交する、という 2 つの性質を同時に保ちながら進めます。まず算法の分母が正で反復が続くことを確かめ、最後の 4 でこの直交性から xk\boldsymbol{x}_k が最良点であることを導きます。

証明(定理 5.2)

kk についての帰納法で 1〜3 を示します。k=0k = 0 では 1 は定義、2・3 は主張がありません。kk で成り立ち、rk≠0\boldsymbol{r}_k \ne \boldsymbol{0} とします。

分母が正であること. k≥1k \ge 1 では 3 から pk−1∈span⁡{r0,…,rk−1}\boldsymbol{p}_{k-1} \in \operatorname{span}\{\boldsymbol{r}_0, \ldots, \boldsymbol{r}_{k-1}\} なので 2 から rk∗pk−1=0\boldsymbol{r}_k^{*}\boldsymbol{p}_{k-1} = 0 で、pk=rk+βk−1pk−1\boldsymbol{p}_k = \boldsymbol{r}_k + \beta_{k-1}\boldsymbol{p}_{k-1} から

rk∗pk=rk∗rk>0\boldsymbol{r}_k^{*}\boldsymbol{p}_k = \boldsymbol{r}_k^{*}\boldsymbol{r}_k > 0

です(k=0k = 0 でも p0=r0\boldsymbol{p}_0 = \boldsymbol{r}_0 なので同じ)。とくに pk≠0\boldsymbol{p}_k \ne \boldsymbol{0} で、AA は正定値なので pk∗Apk>0\boldsymbol{p}_k^{*}A\boldsymbol{p}_k > 0、αk>0\alpha_k > 0 です。βk\beta_k の分母も rk≠0\boldsymbol{r}_k \ne \boldsymbol{0} から正です。αk\alpha_k, βk\beta_k は正の実数です。

1. rk+1=b−Axk−αkApk=b−Axk+1\boldsymbol{r}_{k+1} = \boldsymbol{b} - A\boldsymbol{x}_k - \alpha_kA\boldsymbol{p}_k = \boldsymbol{b} - A\boldsymbol{x}_{k+1} です。

p\boldsymbol{p} の共役性. i<ki < k について pk∗Api=0\boldsymbol{p}_k^{*}A\boldsymbol{p}_i = 0 を示します(k≥1k \ge 1 の場合)。αi>0\alpha_i > 0 なので Api=(ri−ri+1)/αiA\boldsymbol{p}_i = (\boldsymbol{r}_i - \boldsymbol{r}_{i+1})/\alpha_i です。i<k−1i < k - 1 なら、rk∗Api=0\boldsymbol{r}_k^{*}A\boldsymbol{p}_i = 0(2 で i,i+1<ki, i+1 < k)と帰納法の仮定 pk−1∗Api=0\boldsymbol{p}_{k-1}^{*}A\boldsymbol{p}_i = 0 から pk∗Api=0\boldsymbol{p}_k^{*}A\boldsymbol{p}_i = 0 です。i=k−1i = k - 1 なら

pk∗Apk−1=rk∗Apk−1+βk−1pk−1∗Apk−1=−rk∗rkαk−1+rk∗rkrk−1∗rk−1 pk−1∗Apk−1=0\boldsymbol{p}_k^{*}A\boldsymbol{p}_{k-1} = \boldsymbol{r}_k^{*}A\boldsymbol{p}_{k-1} + \beta_{k-1}\boldsymbol{p}_{k-1}^{*}A\boldsymbol{p}_{k-1} = -\frac{\boldsymbol{r}_k^{*}\boldsymbol{r}_k}{\alpha_{k-1}} + \frac{\boldsymbol{r}_k^{*}\boldsymbol{r}_k}{\boldsymbol{r}_{k-1}^{*}\boldsymbol{r}_{k-1}}\,\boldsymbol{p}_{k-1}^{*}A\boldsymbol{p}_{k-1} = 0

です(第 1 項は rk∗rk−1=0\boldsymbol{r}_k^{*}\boldsymbol{r}_{k-1} = 0 を使い、最後は αk−1\alpha_{k-1} の定義)。

r\boldsymbol{r} の直交性. i<ki < k なら、ri∈span⁡{p0,…,pi}\boldsymbol{r}_i \in \operatorname{span}\{\boldsymbol{p}_0, \ldots, \boldsymbol{p}_i\}(3)と前段落から ri∗Apk=0\boldsymbol{r}_i^{*}A\boldsymbol{p}_k = 0 なので、ri∗rk+1=ri∗rk−αkri∗Apk=0\boldsymbol{r}_i^{*}\boldsymbol{r}_{k+1} = \boldsymbol{r}_i^{*}\boldsymbol{r}_k - \alpha_k\boldsymbol{r}_i^{*}A\boldsymbol{p}_k = 0 です。i=ki = k では、rk=pk−βk−1pk−1\boldsymbol{r}_k = \boldsymbol{p}_k - \beta_{k-1}\boldsymbol{p}_{k-1} と共役性から rk∗Apk=pk∗Apk\boldsymbol{r}_k^{*}A\boldsymbol{p}_k = \boldsymbol{p}_k^{*}A\boldsymbol{p}_k なので(k=0k = 0 では r0=p0\boldsymbol{r}_0 = \boldsymbol{p}_0)、rk∗rk+1=rk∗rk−αkpk∗Apk=0\boldsymbol{r}_k^{*}\boldsymbol{r}_{k+1} = \boldsymbol{r}_k^{*}\boldsymbol{r}_k - \alpha_k\boldsymbol{p}_k^{*}A\boldsymbol{p}_k = 0 です。これで 2 が k+1k + 1 で成り立ちます。

3. 帰納法で、rj,pj∈Kj+1(A,r0)\boldsymbol{r}_j, \boldsymbol{p}_j \in \mathcal{K}_{j+1}(A, \boldsymbol{r}_0) です(rj+1=rj−αjApj\boldsymbol{r}_{j+1} = \boldsymbol{r}_j - \alpha_jA\boldsymbol{p}_j で AKj+1⊂Kj+2A\mathcal{K}_{j+1} \subset \mathcal{K}_{j+2}、pj+1=rj+1+βjpj\boldsymbol{p}_{j+1} = \boldsymbol{r}_{j+1} + \beta_j\boldsymbol{p}_j)。r0,…,rk\boldsymbol{r}_0, \ldots, \boldsymbol{r}_k は零でなく互いに直交するので一次独立で、k+1k + 1 次元の空間を張ります。それは高々 k+1k + 1 次元の Kk+1\mathcal{K}_{k+1} に含まれるので一致します。p\boldsymbol{p} の張る空間は、pj=rj+βj−1pj−1\boldsymbol{p}_j = \boldsymbol{r}_j + \beta_{j-1}\boldsymbol{p}_{j-1} から帰納的に span⁡{r0,…,rj}=span⁡{p0,…,pj}\operatorname{span}\{\boldsymbol{r}_0, \ldots, \boldsymbol{r}_j\} = \operatorname{span}\{\boldsymbol{p}_0, \ldots, \boldsymbol{p}_j\} です。

4. xk=x0+∑j<kαjpj∈x0+Kk\boldsymbol{x}_k = \boldsymbol{x}_0 + \sum_{j<k}\alpha_j\boldsymbol{p}_j \in \boldsymbol{x}_0 + \mathcal{K}_k で、2 と 3 から rk⊥Kk\boldsymbol{r}_k \perp \mathcal{K}_k です。x=xk+z\boldsymbol{x} = \boldsymbol{x}_k + \boldsymbol{z}(z∈Kk\boldsymbol{z} \in \mathcal{K}_k)とすると、ek=xk−x∗\boldsymbol{e}_k = \boldsymbol{x}_k - \boldsymbol{x}^{*}、Aek=−rkA\boldsymbol{e}_k = -\boldsymbol{r}_k から

∥x−x∗∥A2=∥ek∥A2+2Re⁡(z∗Aek)+∥z∥A2=∥ek∥A2−2Re⁡(z∗rk)+∥z∥A2=∥ek∥A2+∥z∥A2\|\boldsymbol{x} - \boldsymbol{x}^{*}\|_A^2 = \|\boldsymbol{e}_k\|_A^2 + 2\operatorname{Re}(\boldsymbol{z}^{*}A\boldsymbol{e}_k) + \|\boldsymbol{z}\|_A^2 = \|\boldsymbol{e}_k\|_A^2 - 2\operatorname{Re}(\boldsymbol{z}^{*}\boldsymbol{r}_k) + \|\boldsymbol{z}\|_A^2 = \|\boldsymbol{e}_k\|_A^2 + \|\boldsymbol{z}\|_A^2

で、最小は z=0\boldsymbol{z} = \boldsymbol{0} でだけとられます。逆に x0+Kk\boldsymbol{x}_0 + \mathcal{K}_k の点 x\boldsymbol{x} の残差が Kk\mathcal{K}_k に直交するなら、同じ計算を x\boldsymbol{x} を基準に行えば x\boldsymbol{x} が最小点で、一意性から x=xk\boldsymbol{x} = \boldsymbol{x}_k です。

名前の「共役」は 2 の後半(探索方向が AA に関して直交すること)、「勾配」は r=−∇(12x∗Ax−Re⁡b∗x)\boldsymbol{r} = -\nabla\bigl(\tfrac12\boldsymbol{x}^{*}A\boldsymbol{x} - \operatorname{Re}\boldsymbol{b}^{*}\boldsymbol{x}\bigr) が汎関数の最急降下の方向であることに由来します。

系 5.3(有限回での停止)✓

厳密な算術では、共役勾配法は r0\boldsymbol{r}_0 の次数 dd 以下の回数で rk=0\boldsymbol{r}_k = \boldsymbol{0}(xk=x∗\boldsymbol{x}_k = \boldsymbol{x}^{*})となって止まる。とくに反復回数は AA の相異なる固有値の個数以下である。

証明(系 5.3)

r0,…,rk−1\boldsymbol{r}_0, \ldots, \boldsymbol{r}_{k-1} がすべて零でなければ、定理 5.2 の 3 から dim⁡Kk(A,r0)=k\dim\mathcal{K}_k(A, \boldsymbol{r}_0) = k なので、命題 2.2 の 2 から k≤dk \le d です。よって r0,…,rd−1\boldsymbol{r}_0, \ldots, \boldsymbol{r}_{d-1} がすべて零でないとしても、rd∈Kd+1=Kd\boldsymbol{r}_d \in \mathcal{K}_{d+1} = \mathcal{K}_d(命題 2.2 の 2)かつ rd⊥Kd\boldsymbol{r}_d \perp \mathcal{K}_d(定理 5.2 の 4)から rd=0\boldsymbol{r}_d = \boldsymbol{0} です。Hermite 行列は対角化可能なので(定理 4.2[スペクトル定理])、命題 2.2 の 3 から dd は相異なる固有値の個数以下です。

5.1. Chebyshev 多項式による収束の評価

Section titled “5.1. Chebyshev 多項式による収束の評価”

共役勾配法は x0+Kk\boldsymbol{x}_0 + \mathcal{K}_k の中の最良点を選ぶので、その誤差は、p(0)=1p(0) = 1 の kk 次多項式 pp を使った p(A)e0p(A)\boldsymbol{e}_0 の最小値になります。こう言い換えると、固有値の上で小さな値をとる多項式を 1 つ見つけるだけで、誤差の上界が得られます。最適性を多項式の言葉に翻訳します。x∈x0+Kk(A,r0)\boldsymbol{x} \in \boldsymbol{x}_0 + \mathcal{K}_k(A, \boldsymbol{r}_0) は x=x0+q(A)r0\boldsymbol{x} = \boldsymbol{x}_0 + q(A)\boldsymbol{r}_0(q∈Pk−1q \in \mathcal{P}_{k-1})と書け、r0=−Ae0\boldsymbol{r}_0 = -A\boldsymbol{e}_0 なので

x−x∗=e0−q(A)Ae0=p(A)e0,p(t)=1−tq(t)\boldsymbol{x} - \boldsymbol{x}^{*} = \boldsymbol{e}_0 - q(A)A\boldsymbol{e}_0 = p(A)\boldsymbol{e}_0,\qquad p(t) = 1 - tq(t)

です。qq が Pk−1\mathcal{P}_{k-1} を動くとき、pp は p(0)=1p(0) = 1 を満たす Pk\mathcal{P}_k の元全体を動きます。

定理 5.4(共役勾配法の収束の評価)✓

AA の最大・最小の固有値を λmax⁡\lambda_{\max}, λmin⁡\lambda_{\min}、κ=λmax⁡/λmin⁡\kappa = \lambda_{\max}/\lambda_{\min} とする。共役勾配法の誤差 ek=xk−x∗\boldsymbol{e}_k = \boldsymbol{x}_k - \boldsymbol{x}^{*} は(停止した後は ek=0\boldsymbol{e}_k = \boldsymbol{0} とみなして)

∥ek∥A=min⁡p∈Pk, p(0)=1∥p(A)e0∥A≤min⁡p∈Pk, p(0)=1 max⁡λ∈σ(A)∣p(λ)∣ ∥e0∥A≤2(κ−1κ+1)k∥e0∥A\|\boldsymbol{e}_k\|_A = \min_{p\in\mathcal{P}_k,\ p(0)=1}\|p(A)\boldsymbol{e}_0\|_A \le \min_{p\in\mathcal{P}_k,\ p(0)=1}\ \max_{\lambda\in\sigma(A)}|p(\lambda)|\ \|\boldsymbol{e}_0\|_A \le 2\left(\frac{\sqrt{\kappa} - 1}{\sqrt{\kappa} + 1}\right)^{k}\|\boldsymbol{e}_0\|_A

を満たす。ここで σ(A)\sigma(A) は AA の固有値の集合である。

証明(定理 5.4)

停止した後は ek=0\boldsymbol{e}_k = \boldsymbol{0} なので、停止していない kk を考えます。等号は 定理 5.2 の 4 と上の翻訳から従います。e0=∑iciui\boldsymbol{e}_0 = \sum_ic_i\boldsymbol{u}_i と正規直交な固有ベクトルで展開すると(定理 4.2[スペクトル定理])

∥p(A)e0∥A2=∑iλi∣p(λi)∣2∣ci∣2≤max⁡i∣p(λi)∣2∑iλi∣ci∣2=max⁡i∣p(λi)∣2 ∥e0∥A2\|p(A)\boldsymbol{e}_0\|_A^2 = \sum_i\lambda_i|p(\lambda_i)|^2|c_i|^2 \le \max_i|p(\lambda_i)|^2\sum_i\lambda_i|c_i|^2 = \max_i|p(\lambda_i)|^2\,\|\boldsymbol{e}_0\|_A^2

で、2 つ目の不等号を得ます。

κ=1\kappa = 1 なら A=λmax⁡IA = \lambda_{\max}I で、p(t)=1−t/λmax⁡p(t) = 1 - t/\lambda_{\max} が σ(A)\sigma(A) 上で 00 になるので主張は明らかです。κ>1\kappa > 1 とし、

p(t)=Tk(ℓ(t))Tk(ℓ(0)),ℓ(t)=λmax⁡+λmin⁡−2tλmax⁡−λmin⁡p(t) = \frac{T_k(\ell(t))}{T_k(\ell(0))},\qquad \ell(t) = \frac{\lambda_{\max} + \lambda_{\min} - 2t}{\lambda_{\max} - \lambda_{\min}}

とおきます。ℓ\ell は [λmin⁡,λmax⁡][\lambda_{\min}, \lambda_{\max}] を [−1,1][-1, 1] に写し、ℓ(0)=(κ+1)/(κ−1)>1\ell(0) = (\kappa + 1)/(\kappa - 1) > 1 です。Tk(ℓ(0))>0T_k(\ell(0)) > 0(補題 6.4[多項式補間])なので pp は定義でき、p∈Pkp \in \mathcal{P}_k、p(0)=1p(0) = 1 です。固有値 λ\lambda では ℓ(λ)=cos⁡ϕ\ell(\lambda) = \cos\phi と書けて ∣Tk(ℓ(λ))∣=∣cos⁡kϕ∣≤1|T_k(\ell(\lambda))| = |\cos k\phi| \le 1(補題 6.1[多項式補間])です。分母は

ℓ(0)+ℓ(0)2−1=κ+1+2κκ−1=(κ+1)2(κ−1)(κ+1)=κ+1κ−1\ell(0) + \sqrt{\ell(0)^2 - 1} = \frac{\kappa + 1 + 2\sqrt{\kappa}}{\kappa - 1} = \frac{(\sqrt{\kappa} + 1)^2}{(\sqrt{\kappa} - 1)(\sqrt{\kappa} + 1)} = \frac{\sqrt{\kappa} + 1}{\sqrt{\kappa} - 1}

と 補題 6.4[多項式補間] から Tk(ℓ(0))≥12((κ+1)/(κ−1))kT_k(\ell(0)) \ge \tfrac12\bigl((\sqrt{\kappa} + 1)/(\sqrt{\kappa} - 1)\bigr)^k です。よって max⁡λ∈σ(A)∣p(λ)∣≤2((κ−1)/(κ+1))k\max_{\lambda\in\sigma(A)}|p(\lambda)| \le 2\bigl((\sqrt{\kappa} - 1)/(\sqrt{\kappa} + 1)\bigr)^k です。

1001 = λ_min5.510 = λ_maxtp(0) = 1
κ = 10、k = 5 のときの評価に使う多項式 p(t) = T₅(ℓ(t))/T₅(ℓ(0))。p(0) = 1 を保ったまま、固有値の区間 [1, 10] の上では ±1/T₅(11/9) ≈ ±0.0756 の間(網かけの帯)を等しい振幅で振動する。この振幅は評価式の 2((√10 − 1)/(√10 + 1))⁵ ≈ 0.0757 とほぼ等しい。

(κ−1)/(κ+1)≈1−2/κ(\sqrt{\kappa} - 1)/(\sqrt{\kappa} + 1) \approx 1 - 2/\sqrt{\kappa} なので、誤差を ε\varepsilon 倍にする反復回数は約 12κln⁡(2/ε)\tfrac12\sqrt{\kappa}\ln(2/\varepsilon) です。2 次元の離散 Laplace 行列では κ≈4/(π2h2)\kappa \approx 4/(\pi^2h^2) なので回数は h−1h^{-1} に比例し、最適 SOR 法と同じ次数を、パラメータの推定なしで実現します。評価は固有値の区間だけを使うので、固有値がいくつかの塊に集まっていれば、実際の収束はずっと速くなります(例 5.6)。

命題 5.5(最急降下法の収束)✓

最急降下法 xk+1=xk+αkrk\boldsymbol{x}_{k+1} = \boldsymbol{x}_k + \alpha_k\boldsymbol{r}_k、αk=rk∗rk/rk∗Ark\alpha_k = \boldsymbol{r}_k^{*}\boldsymbol{r}_k/\boldsymbol{r}_k^{*}A\boldsymbol{r}_k(rk=b−Axk≠0\boldsymbol{r}_k = \boldsymbol{b} - A\boldsymbol{x}_k \ne \boldsymbol{0})の誤差は

∥ek+1∥A≤κ−1κ+1∥ek∥A\|\boldsymbol{e}_{k+1}\|_A \le \frac{\kappa - 1}{\kappa + 1}\|\boldsymbol{e}_k\|_A

を満たす。

証明(命題 5.5)

r=rk\boldsymbol{r} = \boldsymbol{r}_k、e=ek\boldsymbol{e} = \boldsymbol{e}_k と書くと Ae=−rA\boldsymbol{e} = -\boldsymbol{r}、ek+1=e+αkr\boldsymbol{e}_{k+1} = \boldsymbol{e} + \alpha_k\boldsymbol{r} で、

∥ek+1∥A2=e∗Ae+2αkRe⁡(r∗Ae)+αk2r∗Ar=∥e∥A2−2αkr∗r+αk2r∗Ar=∥e∥A2−(r∗r)2r∗Ar\|\boldsymbol{e}_{k+1}\|_A^2 = \boldsymbol{e}^{*}A\boldsymbol{e} + 2\alpha_k\operatorname{Re}(\boldsymbol{r}^{*}A\boldsymbol{e}) + \alpha_k^2\boldsymbol{r}^{*}A\boldsymbol{r} = \|\boldsymbol{e}\|_A^2 - 2\alpha_k\boldsymbol{r}^{*}\boldsymbol{r} + \alpha_k^2\boldsymbol{r}^{*}A\boldsymbol{r} = \|\boldsymbol{e}\|_A^2 - \frac{(\boldsymbol{r}^{*}\boldsymbol{r})^2}{\boldsymbol{r}^{*}A\boldsymbol{r}}

です。∥e∥A2=e∗Ae=r∗A−1r\|\boldsymbol{e}\|_A^2 = \boldsymbol{e}^{*}A\boldsymbol{e} = \boldsymbol{r}^{*}A^{-1}\boldsymbol{r} なので

∥ek+1∥A2∥e∥A2=1−(r∗r)2(r∗Ar)(r∗A−1r)≤1−4λmax⁡λmin⁡(λmax⁡+λmin⁡)2=(λmax⁡−λmin⁡λmax⁡+λmin⁡)2\frac{\|\boldsymbol{e}_{k+1}\|_A^2}{\|\boldsymbol{e}\|_A^2} = 1 - \frac{(\boldsymbol{r}^{*}\boldsymbol{r})^2}{(\boldsymbol{r}^{*}A\boldsymbol{r})(\boldsymbol{r}^{*}A^{-1}\boldsymbol{r})} \le 1 - \frac{4\lambda_{\max}\lambda_{\min}}{(\lambda_{\max} + \lambda_{\min})^2} = \left(\frac{\lambda_{\max} - \lambda_{\min}}{\lambda_{\max} + \lambda_{\min}}\right)^2

です。不等号は Kantorovich の不等式(定理 8.1[行列の固有値評価と不等式])を m=λmin⁡m = \lambda_{\min}, M=λmax⁡M = \lambda_{\max} で使いました。

最急降下法は 1 回ごとに最適な歩幅をとりますが、過去の方向を忘れるので、反復回数は κ\kappa に比例します。共役勾配法は過去の方向すべてと AA 共役な方向をとることで、Kk\mathcal{K}_k 全体での最適化を 1 本の漸化式で実現し、回数を κ\sqrt{\kappa} に下げています。

例 5.6(固有値が塊に集まると速く終わる)

固有値が 11 の近くの ss 個の値と、[100,101][100, 101] の中の値だけからなるとします。定理 5.4 の最後の評価は κ≈101\kappa \approx 101 で、1 回あたり (101−1)/(101+1)≈0.82(\sqrt{101} - 1)/(\sqrt{101} + 1) \approx 0.82 倍しか保証しません。しかし真ん中の評価で p(t)=∏i=1s(1−t/μi)⋅p~(t)p(t) = \prod_{i=1}^{s}(1 - t/\mu_i)\cdot\tilde{p}(t)(μi\mu_i は小さい固有値、p~\tilde{p} は [100,101][100, 101] に合わせた Chebyshev 多項式で p~(0)=1\tilde{p}(0) = 1)を選ぶと、pp は小さい固有値で 00、[100,101][100, 101] の上では ∣p~∣⋅∏i∣1−t/μi∣|\tilde{p}| \cdot\prod_i|1 - t/\mu_i| 以下です。[100,101][100,101] の条件数は 1.011.01 なので p~\tilde{p} は 1 回あたり約 (1.01−1)/(1.01+1)≈0.0025(\sqrt{1.01} - 1)/(\sqrt{1.01} + 1) \approx 0.0025 倍で減り、ss 回の「準備」のあとは非常に速く収束します(μi≈1\mu_i \approx 1 なら [100,101][100, 101] の上で ∏i∣1−t/μi∣\prod_i|1 - t/\mu_i| は約 100s100^s なので、その分を取り返す数回の遅れは生じます)。前処理の目的は、条件数を下げることに加えて、固有値をこのような塊に集めることです。

次のコードは、2 次元の離散 Laplace 方程式(右辺は f=1f = 1、x0=0\boldsymbol{x}_0 = \boldsymbol{0})を scipy.sparse.linalg.cg で相対残差 10−810^{-8} まで解いた反復回数です。κ\sqrt{\kappa} は閉じた形の固有値 8sin⁡2(πh/2)8\sin^2(\pi h/2) と 8cos⁡2(πh/2)8\cos^2(\pi h/2) から計算しました。「予測」は 定理 5.4 から相対残差 10−810^{-8} を保証する回数 ln⁡(2κ⋅108)/ln⁡((κ+1)/(κ−1))\ln(2\sqrt{\kappa}\cdot10^{8})/\ln\bigl((\sqrt{\kappa}+1)/(\sqrt{\kappa}-1)\bigr) です(∥r∥≤λmax⁡∥e∥A\|\boldsymbol{r}\| \le \sqrt{\lambda_{\max}}\|\boldsymbol{e}\|_A、∥e∥A≤∥r∥/λmin⁡\|\boldsymbol{e}\|_A \le \|\boldsymbol{r}\|/\sqrt{\lambda_{\min}} で残差に換算した分 κ\sqrt{\kappa} がかかります)。

# Python 3.12.10 / NumPy 2.5.2 / SciPy 1.18.1(x86-64, OpenBLAS)
import numpy as np
import scipy.sparse as sp
from scipy.sparse.linalg import cg
def laplace2d(m):
T = sp.diags([-1.0, 2.0, -1.0], [-1, 0, 1], shape=(m, m),
dtype=float)
I = sp.identity(m, dtype=float)
return (sp.kron(I, T) + sp.kron(T, I)).tocsr()
print(" 1/h 反復 sqrt(kappa) 反復/sqrt(kappa) 予測")
for m in (31, 63, 127, 255):
h = 1 / (m + 1)
A = laplace2d(m)
b = np.ones(m * m) * h**2
it = [0]
def cb(xk):
it[0] += 1
x, info = cg(A, b, rtol=1e-8, callback=cb)
lmin = 8 * np.sin(np.pi * h / 2) ** 2 # 閉じた形
lmax = 8 * np.cos(np.pi * h / 2) ** 2
sk = np.sqrt(lmax / lmin)
q = (sk - 1) / (sk + 1)
pred = np.log(2e8 * sk) / -np.log(q)
res = np.linalg.norm(b - A @ x) / np.linalg.norm(b)
assert info == 0 and res <= 1e-8
print(f"{m+1:4d} {it[0]:5d} {sk:9.2f} {it[0]/sk:12.3f}"
f" {pred:8.0f}")
1/h 反復 sqrt(kappa) 反復/sqrt(kappa) 予測
32 58 20.36 2.849 225
64 118 40.74 2.897 465
128 237 81.48 2.909 958
256 468 162.97 2.872 1973

検算. (a) κ\sqrt{\kappa} は閉じた形の固有値(ノルムの章 の三重対角 Toeplitz 行列の固有値の和)から計算し、κ≈2/(πh)\sqrt{\kappa} \approx 2/(\pi h)(h=1/256h = 1/256 で 162.97162.97 対 162.97162.97)とも合います。(b) 各行で assert により、返された解の相対残差が実際に 10−810^{-8} 以下であることを確かめています。(c) 格子幅を半分にするごとに反復回数は 2.03,2.01,1.972.03, 2.01, 1.97 倍で、反復回数 /κ/\sqrt{\kappa} はほぼ一定(約 2.92.9)です。定理 5.4 の予言どおり κ∝h−1\sqrt{\kappa} \propto h^{-1} に比例します。実際の回数は評価から保証される回数の 4 分の 1 程度で、評価は上界として成り立っています。定常反復法の章 の最適 SOR 法(h=1/64h = 1/64 で 257 回)と比べても半分以下です。

6. 共役勾配法と Lanczos 法、前処理

Section titled “6. 共役勾配法と Lanczos 法、前処理”

定理 6.1(共役勾配法と Lanczos 法の関係)✓

共役勾配法が kk 回目まで停止しないとし、b\boldsymbol{b} の代わりに r0\boldsymbol{r}_0 から始めた Lanczos 法(系 3.3)の QkQ_k, TkT_k を考える。このとき

  1. 各 j<kj < k について、rj\boldsymbol{r}_j は qj+1\boldsymbol{q}_{j+1} の定数倍で、∥rj∥=∣qj+1∗rj∣\|\boldsymbol{r}_j\| = |\boldsymbol{q}_{j+1}^{*}\boldsymbol{r}_j| である。
  2. TkT_k は正定値で、xk=x0+Qkyk\boldsymbol{x}_k = \boldsymbol{x}_0 + Q_k\boldsymbol{y}_k、Tkyk=∥r0∥e1T_k\boldsymbol{y}_k = \|\boldsymbol{r}_0\|\boldsymbol{e}_1 である(e1\boldsymbol{e}_1 は第 1 単位ベクトル)。
証明(定理 6.1)
  1. 定理 5.2 の 3 から Kk(A,r0)\mathcal{K}_k(A, \boldsymbol{r}_0) の次元は kk なので、r0\boldsymbol{r}_0 の次数は kk 以上で、Lanczos 法は kk 本の qj\boldsymbol{q}_j を作ります(定理 3.2)。rj∈Kj+1\boldsymbol{r}_j \in \mathcal{K}_{j+1} で、rj⊥Kj\boldsymbol{r}_j \perp \mathcal{K}_j(定理 5.2 の 2・3)です。Kj+1\mathcal{K}_{j+1} の中で Kj=span⁡{q1,…,qj}\mathcal{K}_j = \operatorname{span}\{\boldsymbol{q}_1, \ldots, \boldsymbol{q}_j\} に直交するベクトルは qj+1\boldsymbol{q}_{j+1} の定数倍だけなので(q1,…,qj+1\boldsymbol{q}_1, \ldots, \boldsymbol{q}_{j+1} は Kj+1\mathcal{K}_{j+1} の正規直交基底)、rj=c qj+1\boldsymbol{r}_j = c\,\boldsymbol{q}_{j+1} で、∣c∣=∥rj∥|c| = \|\boldsymbol{r}_j\| です。

  2. Tk=Qk∗AQkT_k = Q_k^{*}AQ_k(定理 3.2 の 3)で、y≠0\boldsymbol{y} \ne \boldsymbol{0} なら y∗Tky=(Qky)∗A(Qky)>0\boldsymbol{y}^{*}T_k\boldsymbol{y} = (Q_k\boldsymbol{y})^{*}A(Q_k\boldsymbol{y}) > 0 なので正定値、とくに正則です。xk∈x0+Kk\boldsymbol{x}_k \in \boldsymbol{x}_0 + \mathcal{K}_k なので xk=x0+Qkyk\boldsymbol{x}_k = \boldsymbol{x}_0 + Q_k\boldsymbol{y}_k と書け、rk=r0−AQkyk⊥Kk\boldsymbol{r}_k = \boldsymbol{r}_0 - AQ_k\boldsymbol{y}_k \perp \mathcal{K}_k(定理 5.2 の 4)から Qk∗r0−Tkyk=0Q_k^{*}\boldsymbol{r}_0 - T_k\boldsymbol{y}_k = \boldsymbol{0} です。q1=r0/∥r0∥\boldsymbol{q}_1 = \boldsymbol{r}_0/\|\boldsymbol{r}_0\| と直交性から Qk∗r0=∥r0∥e1Q_k^{*}\boldsymbol{r}_0 = \|\boldsymbol{r}_0\|\boldsymbol{e}_1 です。

したがって、共役勾配法を走らせながら αk\alpha_k, βk\beta_k から TkT_k を組み立てれば、Ritz 値(AA の端の固有値の近似)が副産物として得られます。条件数の推定や停止判定に使われる技法です。逆に、Lanczos 法で作った TkT_k の小さな系 Tky=∥r0∥e1T_k\boldsymbol{y} = \|\boldsymbol{r}_0\|\boldsymbol{e}_1 を解けば共役勾配法の近似解が得られます。

前処理は M−1AM^{-1}A の条件数を小さくするための変形ですが、M−1AM^{-1}A はふつう Hermite にならず、そのままでは共役勾配法を使いにくくなります。そこで MM の平方根 M1/2M^{1/2} で両側から挟んだ M−1/2AM−1/2M^{-1/2}AM^{-1/2} を考えます。これは正定値 Hermite のままで、M−1AM^{-1}A と相似なので固有値も同じです。次の定理は、この変形を実際には行わず M−1M^{-1} を掛けるだけの反復が、変形した行列への共役勾配法と一致することを示します。

定理 6.2(前処理つき共役勾配法)✓

MM を正定値 Hermite 行列とし、M1/2M^{1/2} をその正定値な平方根とする。前処理つき共役勾配法を、r0=b−Ax0\boldsymbol{r}_0 = \boldsymbol{b} - A\boldsymbol{x}_0、z0=M−1r0\boldsymbol{z}_0 = M^{-1}\boldsymbol{r}_0、p0=z0\boldsymbol{p}_0 = \boldsymbol{z}_0 とし、

αk=rk∗zkpk∗Apk,xk+1=xk+αkpk,rk+1=rk−αkApk,zk+1=M−1rk+1,βk=rk+1∗zk+1rk∗zk,pk+1=zk+1+βkpk\begin{aligned} \alpha_k &= \frac{\boldsymbol{r}_k^{*}\boldsymbol{z}_k}{\boldsymbol{p}_k^{*}A\boldsymbol{p}_k}, & \boldsymbol{x}_{k+1} &= \boldsymbol{x}_k + \alpha_k\boldsymbol{p}_k, & \boldsymbol{r}_{k+1} &= \boldsymbol{r}_k - \alpha_kA\boldsymbol{p}_k,\\ \boldsymbol{z}_{k+1} &= M^{-1}\boldsymbol{r}_{k+1}, & \beta_k &= \frac{\boldsymbol{r}_{k+1}^{*}\boldsymbol{z}_{k+1}}{\boldsymbol{r}_k^{*}\boldsymbol{z}_k}, & \boldsymbol{p}_{k+1} &= \boldsymbol{z}_{k+1} + \beta_k\boldsymbol{p}_k \end{aligned}

で定める。A^=M−1/2AM−1/2\hat{A} = M^{-1/2}AM^{-1/2}、b^=M−1/2b\hat{\boldsymbol{b}} = M^{-1/2}\boldsymbol{b} とおくと、x^k=M1/2xk\hat{\boldsymbol{x}}_k = M^{1/2}\boldsymbol{x}_k は A^x^=b^\hat{A}\hat{\boldsymbol{x}} = \hat{\boldsymbol{b}} に x^0=M1/2x0\hat{\boldsymbol{x}}_0 = M^{1/2}\boldsymbol{x}_0 から共役勾配法を使った反復と一致する。とくに、M−1AM^{-1}A の固有値(正の実数)の最大と最小の比を κ^\hat{\kappa} として

∥xk−x∗∥A≤2(κ^−1κ^+1)k∥x0−x∗∥A.\|\boldsymbol{x}_k - \boldsymbol{x}^{*}\|_A \le 2\left(\frac{\sqrt{\hat{\kappa}} - 1}{\sqrt{\hat{\kappa}} + 1}\right)^k\|\boldsymbol{x}_0 - \boldsymbol{x}^{*}\|_A .
証明(定理 6.2)

平方根. スペクトル定理(定理 4.2[スペクトル定理])で M=UΛU∗M = U\Lambda U^{*} と書くと、正定値性から Λ\Lambda の対角成分は正です(定理 6.3[スペクトル定理] の 2)。M1/2=UΛ1/2U∗M^{1/2} = U\Lambda^{1/2}U^{*} は正定値 Hermite で (M1/2)2=M(M^{1/2})^2 = M、逆行列は M−1/2=UΛ−1/2U∗M^{-1/2} = U\Lambda^{-1/2}U^{*} です。A^\hat{A} は Hermite で、y≠0\boldsymbol{y} \ne \boldsymbol{0} なら y∗A^y=(M−1/2y)∗A(M−1/2y)>0\boldsymbol{y}^{*}\hat{A}\boldsymbol{y} = (M^{-1/2}\boldsymbol{y})^{*}A(M^{-1/2}\boldsymbol{y}) > 0 なので正定値です。

反復の対応. r^k=M−1/2rk\hat{\boldsymbol{r}}_k = M^{-1/2}\boldsymbol{r}_k、p^k=M1/2pk\hat{\boldsymbol{p}}_k = M^{1/2}\boldsymbol{p}_k とおき、これらが A^\hat{A} の共役勾配法の量であることを kk についての帰納法で示します。r^0=M−1/2(b−Ax0)=b^−A^x^0\hat{\boldsymbol{r}}_0 = M^{-1/2}(\boldsymbol{b} - A\boldsymbol{x}_0) = \hat{\boldsymbol{b}} - \hat{A}\hat{\boldsymbol{x}}_0、p^0=M1/2M−1r0=r^0\hat{\boldsymbol{p}}_0 = M^{1/2}M^{-1}\boldsymbol{r}_0 = \hat{\boldsymbol{r}}_0 です。各段で

r^k∗r^k=rk∗M−1rk=rk∗zk,p^k∗A^p^k=pk∗Apk\hat{\boldsymbol{r}}_k^{*}\hat{\boldsymbol{r}}_k = \boldsymbol{r}_k^{*}M^{-1}\boldsymbol{r}_k = \boldsymbol{r}_k^{*}\boldsymbol{z}_k,\qquad \hat{\boldsymbol{p}}_k^{*}\hat{A}\hat{\boldsymbol{p}}_k = \boldsymbol{p}_k^{*}A\boldsymbol{p}_k

なので αk\alpha_k, βk\beta_k は両方の算法で等しく、x^k+1=x^k+αkp^k\hat{\boldsymbol{x}}_{k+1} = \hat{\boldsymbol{x}}_k + \alpha_k\hat{\boldsymbol{p}}_k、r^k+1=M−1/2(rk−αkApk)=r^k−αkA^p^k\hat{\boldsymbol{r}}_{k+1} = M^{-1/2}(\boldsymbol{r}_k - \alpha_kA\boldsymbol{p}_k) = \hat{\boldsymbol{r}}_k - \alpha_k\hat{A}\hat{\boldsymbol{p}}_k、p^k+1=M1/2(M−1rk+1+βkpk)=r^k+1+βkp^k\hat{\boldsymbol{p}}_{k+1} = M^{1/2}(M^{-1}\boldsymbol{r}_{k+1} + \beta_k\boldsymbol{p}_k) = \hat{\boldsymbol{r}}_{k+1} + \beta_k\hat{\boldsymbol{p}}_k です。これは A^\hat{A} に対する 定義 5.1 そのものです。

評価. x^∗=M1/2x∗\hat{\boldsymbol{x}}^{*} = M^{1/2}\boldsymbol{x}^{*} は A^x^∗=b^\hat{A}\hat{\boldsymbol{x}}^{*} = \hat{\boldsymbol{b}} の解で、e^=M1/2e\hat{\boldsymbol{e}} = M^{1/2}\boldsymbol{e} について e^∗A^e^=e∗Ae\hat{\boldsymbol{e}}^{*}\hat{A}\hat{\boldsymbol{e}} = \boldsymbol{e}^{*}A\boldsymbol{e} です。M−1A=M−1/2A^M1/2M^{-1}A = M^{-1/2}\hat{A}M^{1/2} は A^\hat{A} と相似なので固有値が等しく、それは A^\hat{A} の固有値(正の実数)です。定理 5.4 を A^\hat{A} に使えば主張を得ます。

実装では M1/2M^{1/2} を作る必要はなく、毎回 Mz=rM\boldsymbol{z} = \boldsymbol{r} を解くだけです。MM は「AA に近く、Mz=rM\boldsymbol{z} = \boldsymbol{r} が安く解ける」ように選びます。定常反復法の章 の SSOR 法の分割行列や、不完全 Cholesky 分解がその代表で、次の Krylov 部分空間法 II の章で扱います。

注意 6.3(有限精度での共役勾配法:収束の遅れと超 1 次収束)

系 5.3 の有限回での停止は厳密な算術での話で、実際の計算では残差の直交性が失われ、nn 回で止まるとは限りません。それでも共役勾配法は実用上よく収束します。Greenbaum は、有限精度の共役勾配法の誤差が、元の行列の各固有値の近くに固有値の小さな塊をもつ大きな行列に対する厳密な共役勾配法の誤差で説明できることを示しました(収束は遅れるが、失敗はしない)。また、Ritz 値が端の固有値に収束すると、その固有値は以後「取り除かれた」ように振る舞い、実効的な条件数が下がって収束が加速します(超 1 次収束。van der Sluis–van der Vorst)。どちらも本章の定理には使いません。Greenbaum『Iterative Methods for Solving Linear Systems』SIAM, 1997 — 第 4 章、Meurant–Strakoš(Acta Numerica 15, 2006)、A. van der Sluis, H. A. van der Vorst, “The rate of convergence of conjugate gradients”, Numerische Mathematik 48 (1986) を参照してください。

7. 疎行列の固有値:シフト反転と ARPACK

Section titled “7. 疎行列の固有値:シフト反転と ARPACK”

研究でよく使う scipy.sparse.linalg.eigsh は、ARPACK の陰的再開 Lanczos 法を呼びます。Lanczos 法は端の固有値ほど速く収束する(定理 4.3)ので、中ほどや最小の固有値が欲しいときはシフト反転、すなわち (A−σI)−1(A - \sigma I)^{-1} に Lanczos 法を使います。σ\sigma に近い固有値 λ\lambda は (A−σI)−1(A - \sigma I)^{-1} では絶対値の大きい固有値 1/(λ−σ)1/(\lambda - \sigma) になり、しかも互いによく分離されます(冪乗法の章 の逆反復と同じ考え方)。(A−σI)−1(A - \sigma I)^{-1} との積は、疎な LU 分解を 1 回作っておいて毎回代入で計算します。

# Python 3.12.10 / NumPy 2.5.2 / SciPy 1.18.1(x86-64, OpenBLAS)/乱数種 20261006
import numpy as np
import scipy.sparse as sp
from scipy.sparse.linalg import eigsh
m = 100 # 100×100 格子、h = 1/101
h = 1 / (m + 1)
T = sp.diags([-1.0, 2.0, -1.0], [-1, 0, 1], shape=(m, m), dtype=float)
I = sp.identity(m, dtype=float)
A = (sp.kron(I, T) + sp.kron(T, I)).tocsc()
rng = np.random.default_rng(20261006)
v0 = rng.standard_normal(m * m) # 開始ベクトルを固定
vals = eigsh(A, k=5, sigma=0, which="LM", v0=v0,
return_eigenvectors=False)
vals = np.sort(vals)
t = 4 * np.sin(np.arange(1, 4) * np.pi * h / 2) ** 2 # T の固有値
exact = np.sort([t[j] + t[k] for j in range(3) for k in range(3)])[:5]
print(" 固有値(eigsh) 閉じた形")
for a, e in zip(vals, exact):
print(f"{a:.10e} {e:.10e}")
err = max(abs(vals - exact) / exact)
print("相対誤差の最大 < 1e-12:", err < 1e-12)
固有値(eigsh) 閉じた形
1.9348708320e-03 1.9348708320e-03
4.8362411488e-03 4.8362411488e-03
4.8362411488e-03 4.8362411488e-03
7.7376114656e-03 7.7376114656e-03
9.6687394780e-03 9.6687394780e-03
相対誤差の最大 < 1e-12: True

検算. (a) 2 次元の離散 Laplace 行列の固有値は τj+τk\tau_j + \tau_k、τj=4sin⁡2(jπh/2)\tau_j = 4\sin^2(j\pi h/2) です(定常反復法の章 のモデル問題の命題の証明と同じ計算。2−2cos⁡2 - 2\cos ではなく 4sin⁡24\sin^2 の形で計算して桁落ちを避けています)。小さい順に (1,1)(1,1)、(1,2)(1,2) と (2,1)(2,1) の 2 重、(2,2)(2,2)、(1,3)(1,3) と (3,1)(3,1) の片方、が並びます。(b) eigsh の結果は 10 桁一致し、相対誤差は 10−1210^{-12} 未満です。2 重の固有値も 2 つとも求まっています。(c) σ=0\sigma = 0 のシフト反転では、最小の固有値 1.9×10−31.9\times10^{-3} と次の固有値 4.8×10−34.8\times10^{-3} が A−1A^{-1} では 517517 と 207207 になります。定理 4.3 の隔たりの比は、AA のまま最小の固有値を狙うと (4.84−1.93)×10−3/(8.00−0.005)≈3.6×10−4(4.84 - 1.93)\times10^{-3}/(8.00 - 0.005) \approx 3.6\times10^{-4} ですが、A−1A^{-1} の最大の固有値では (517−207)/207≈1.5(517 - 207)/207 \approx 1.5 と 4 桁改善します。

注意 7.1(陰的再開と大規模固有値問題の実務)

Lanczos 法をそのまま続けると、基底の保持と再直交化の手間が反復回数とともに増えます。ARPACK は、kk 本の Lanczos ベクトルをためるたびに、不要な Ritz 値をシフトとする陰的シフトつき QR 法を TkT_k に施して基底を縮め、欲しい固有値の成分を残したまま再開します(Sorensen の陰的再開)。この仕組みは QR 法の章の陰的 Q の定理の応用です。D. C. Sorensen, “Implicit application of polynomial filters in a k-step Arnoldi method”, SIAM J. Matrix Anal. Appl. 13 (1992)、R. B. Lehoucq, D. C. Sorensen, C. Yang『ARPACK Users’ Guide』SIAM, 1998 を参照してください。

演習 8.1易

正定値行列で κ=104\kappa = 10^4 とする。誤差の AA ノルムを 10−610^{-6} 倍にするのに十分な反復回数を、共役勾配法(定理 5.4)と最急降下法(命題 5.5)の評価から求めよ。

解答

共役勾配法は 2qk≤10−62q^k \le 10^{-6}、q=(100−1)/(100+1)q = (100 - 1)/(100 + 1) から k≥ln⁡(2×106)/ln⁡(101/99)≈14.509/0.02000≈725.4k \ge \ln(2\times10^{6})/\ln(101/99) \approx 14.509/0.02000 \approx 725.4 で、726726 回で十分です。最急降下法は ((κ−1)/(κ+1))k≤10−6\bigl((\kappa - 1)/(\kappa + 1)\bigr)^k \le 10^{-6} から k≥ln⁡106/ln⁡(10001/9999)≈13.816/(2.000×10−4)≈6.9×104k \ge \ln 10^{6}/\ln(10001/9999) \approx 13.816/(2.000\times10^{-4}) \approx 6.9\times10^{4} 回です。比は約 κ\sqrt{\kappa} 倍(ここでは約 95 倍)です。

演習 8.2標準

A=I+BA = I + B で、BB は階数 rr の半正定値 Hermite 行列とする。共役勾配法は厳密な算術では高々 r+1r + 1 回で止まることを示せ。

解答

BB の 0 でない固有値は高々 rr 個(重複を込めて)なので、AA の固有値は 11 と、高々 rr 個の 1+μi1 + \mu_i(μi>0\mu_i > 0)です。相異なる固有値の個数は高々 r+1r + 1 なので、系 5.3 から共役勾配法は高々 r+1r + 1 回で止まります。多項式で言えば、p(t)=(1−t)∏i(1−t/(1+μi))p(t) = (1 - t)\prod_i(1 - t/(1 + \mu_i)) が p(0)=1p(0) = 1 を満たし AA のすべての固有値で 00 になるので、定理 5.4 の真ん中の評価が 00 になります。

演習 8.3標準

A=diag⁡(3,2,1)A = \operatorname{diag}(3, 2, 1)、b=(1,1,1)T\boldsymbol{b} = (1, 1, 1)^{\mathsf{T}} として Lanczos 法を 2 段行い、T2T_2 と Ritz 値 θ1(2),θ2(2)\theta_1^{(2)}, \theta_2^{(2)} を求めよ。定理 4.2 の 2 の交互性と、定理 4.3 の評価が成り立っていることを確かめよ。

解答

q1=(1,1,1)T/3\boldsymbol{q}_1 = (1,1,1)^{\mathsf{T}}/\sqrt{3}、α1=q1TAq1=2\alpha_1 = \boldsymbol{q}_1^{\mathsf{T}}A\boldsymbol{q}_1 = 2、Aq1−2q1=(1,0,−1)T/3A\boldsymbol{q}_1 - 2\boldsymbol{q}_1 = (1, 0, -1)^{\mathsf{T}}/\sqrt{3} なので β1=2/3\beta_1 = \sqrt{2/3}、q2=(1,0,−1)T/2\boldsymbol{q}_2 = (1, 0, -1)^{\mathsf{T}}/\sqrt{2}、α2=(3+1)/2=2\alpha_2 = (3 + 1)/2 = 2 です。

T2=(22/32/32),θ(2)=2±2/3≈2.8165, 1.1835.T_2 = \begin{pmatrix} 2 & \sqrt{2/3} \\ \sqrt{2/3} & 2 \end{pmatrix},\qquad \theta^{(2)} = 2 \pm \sqrt{2/3} \approx 2.8165,\ 1.1835 .

交互性は 3≥2.8165≥23 \ge 2.8165 \ge 2、2≥1.1835≥12 \ge 1.1835 \ge 1 で成り立ちます。Kaniel–Paige の評価では γ=(3−2)/(2−1)=1\gamma = (3 - 2)/(2 - 1) = 1、T1(3)=3T_1(3) = 3、tan⁡∠(b,e1)=2\tan\angle(\boldsymbol{b}, \boldsymbol{e}_1) = \sqrt{2} なので、右辺は (3−1)(2/3)2=4/9≈0.444(3 - 1)(\sqrt{2}/3)^2 = 4/9 \approx 0.444 で、実際の誤差 3−2.8165≈0.18353 - 2.8165 \approx 0.1835 はその内側にあります。

  • G. H. Golub, C. F. Van Loan『Matrix Computations』4th ed., Johns Hopkins University Press, 2013 — §10.1(Lanczos 法)、§11.3(共役勾配法)。
  • Y. Saad『Iterative Methods for Sparse Linear Systems』2nd ed., SIAM, 2003 — 第 6 章(Krylov 部分空間法)、第 9 章(前処理つき反復法)。
  • A. Greenbaum『Iterative Methods for Solving Linear Systems』SIAM, 1997 — 第 2〜4 章。
  • B. N. Parlett『The Symmetric Eigenvalue Problem』SIAM, 1998 — 第 12・13 章(Krylov 部分空間と Lanczos 法)。
  • L. N. Trefethen, D. Bau III『Numerical Linear Algebra』SIAM, 1997 — Lectures 32–38。
  • G. Meurant, Z. Strakoš, “The Lanczos and conjugate gradient algorithms in finite precision arithmetic”, Acta Numerica 15 (2006), 471–542.

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

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

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

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