未知数が何万もある連立一次方程式 A x = b A\boldsymbol{x} = \boldsymbol{b} A x = b や、大きな行列の固有値を、行列とベクトルの掛け算だけで効率よく求める方法の話です。ベクトルに行列を繰り返し掛けると新しいベクトルが次々にできますが、基本の発想は、それらを捨てずに全部使って最もよい近似を選ぶことです。読み終えると、共役勾配法がなぜ少ない回数で解けるのか、反復回数が行列の「性質の悪さ」を表す数の平方根に比例するとはどういうことかが分かります。
b , A b , … , A k − 1 b \boldsymbol{b}, A\boldsymbol{b}, \ldots, A^{k-1}\boldsymbol{b} b , A b , … , A k − 1 b の張る Krylov 部分空間 K k ( A , b ) \mathcal{K}_k(A, \boldsymbol{b}) K k ( A , b ) は「deg p < k \deg p < k deg p < k の多項式 p p p による p ( A ) b p(A)\boldsymbol{b} p ( A ) b の全体」です。冪乗法 は最後のベクトル A k − 1 b A^{k-1}\boldsymbol{b} A k − 1 b しか使いませんが、Krylov 部分空間法はこの空間全体から最良のものを選びます。
正規直交基底 を作る Arnoldi の過程(K k \mathcal{K}_k K k の基底を 1 本ずつ直交化しながら作る手順)は A Q k = Q k + 1 H ~ k AQ_k = Q_{k+1}\tilde{H}_k A Q k = Q k + 1 H ~ k を満たし、A A A が Hermite 行列なら H k H_k H k は三重対角になって、3 項の漸化式(Lanczos 法 )で済みます。
H k H_k H k の固有値(Ritz 値 。K k \mathcal{K}_k K k の中で見つかる固有値の近似値)の最大は K k \mathcal{K}_k K k 上の Rayleigh 商の最大で、k k k とともに単調に増えて λ 1 \lambda_1 λ 1 に近づきます。誤差は ( λ 1 − λ n ) tan 2 ∠ ( b , u 1 ) / T k − 1 ( 1 + 2 γ ) 2 (\lambda_1 - \lambda_n)\tan^2\angle(\boldsymbol{b}, \boldsymbol{u}_1)/T_{k-1}(1 + 2\gamma)^2 ( λ 1 − λ n ) tan 2 ∠ ( b , u 1 ) / T k − 1 ( 1 + 2 γ ) 2 以下です(Kaniel–Paige の評価 )。
正定値行列の共役勾配法 は、x 0 + K k \boldsymbol{x}_0 + \mathcal{K}_k x 0 + K k の上で誤差の A A A ノルム(誤差 e \boldsymbol{e} e の大きさを ( e ∗ A e ) 1 / 2 (\boldsymbol{e}^{*}A\boldsymbol{e})^{1/2} ( e ∗ A e ) 1/2 で測ったもの)を最小にします。そのため ∥ e k ∥ A ≤ 2 ( ( κ − 1 ) / ( κ + 1 ) ) k ∥ e 0 ∥ A \|\boldsymbol{e}_k\|_A \le 2\bigl((\sqrt{\kappa} - 1)/(\sqrt{\kappa} + 1)\bigr)^k\|\boldsymbol{e}_0\|_A ∥ e k ∥ A ≤ 2 ( ( κ − 1 ) / ( κ + 1 ) ) k ∥ e 0 ∥ A が成り立ち、反復回数は κ \sqrt{\kappa} κ に比例します。最急降下法の ( κ − 1 ) / ( κ + 1 ) (\kappa - 1)/(\kappa + 1) ( κ − 1 ) / ( κ + 1 ) より桁違いに速く、厳密な算術では相異なる固有値の個数以下の回数で終わります。
共役勾配法の残差は Lanczos ベクトルの定数倍で、共役勾配法は Lanczos 法で作った三重対角の系を解くことと同じです。前処理つき共役勾配法(前処理は、方程式を解きやすい形に変える下ごしらえ)は M − 1 / 2 A M − 1 / 2 M^{-1/2}AM^{-1/2} M − 1/2 A M − 1/2 への共役勾配法と同じ反復で、収束は κ ( M − 1 A ) \kappa(M^{-1}A) κ ( M − 1 A ) で決まります。
この記事で使う事前知識
正定値 : 零でないどんなベクトル x \boldsymbol{x} x についても x ∗ A x > 0 \boldsymbol{x}^{*}A\boldsymbol{x} > 0 x ∗ A x > 0 となる Hermite 行列の性質。→ 正定値
条件数 : 解が入力の誤差にどれだけ敏感かを表す数。この記事では正定値行列の最大固有値と最小固有値の比 κ \kappa κ として使います。→ 条件数
冪乗法 : ベクトルに A A A を繰り返し掛けて、絶対値最大の固有値の固有ベクトルに近づける方法。→ 冪乗法
Rayleigh 商 : R A ( x ) = x ∗ A x / x ∗ x R_A(\boldsymbol{x}) = \boldsymbol{x}^{*}A\boldsymbol{x}/\boldsymbol{x}^{*}\boldsymbol{x} R A ( x ) = x ∗ A x / x ∗ x 。固有ベクトルでは固有値に一致する量。→ 固有値の計算 I
正規直交基底 : 長さが 1 で互いに直交するベクトルからなる基底。→ 正規直交基底
定常反復法 : 同じ行列 G G G を誤差に繰り返し掛けて解に近づける反復(Jacobi 法など)。→ 定常反復法
定常反復法の章 では、2 次元の離散 Laplace 方程式で Jacobi 法の反復回数が h − 2 h^{-2} h − 2 に比例し、最適な ω \omega ω を知っていても SOR 法は h − 1 h^{-1} h − 1 が限界であることを見ました。しかも ω \omega ω の最適値は Jacobi 法のスペクトル半径という、ふつうは分からない量に依存していました。
定常反復の k k k 回目の誤差は G k e 0 G^k\boldsymbol{e}_0 G k e 0 です。G = I − M − 1 A G = I - M^{-1}A G = I − M − 1 A なので、これは「p ( 0 ) = 1 p(0) = 1 p ( 0 ) = 1 を満たす特定の k k k 次多項式 p ( t ) = ( 1 − t ) k p(t) = (1 - t)^k p ( t ) = ( 1 − t ) k に M − 1 A M^{-1}A M − 1 A を代入して e 0 \boldsymbol{e}_0 e 0 に掛けたもの」です。それなら、p ( 0 ) = 1 p(0) = 1 p ( 0 ) = 1 の k k k 次多項式の中から最良の ものを選べばもっと速くなるはずです。この発想を、パラメータを一切知らずに実行するのが共役勾配法です。
固有値の計算でも事情は同じです。冪乗法 は A k − 1 b A^{k-1}\boldsymbol{b} A k − 1 b だけを使い、それまでに作った b , A b , … \boldsymbol{b}, A\boldsymbol{b}, \ldots b , A b , … を捨てていました。これらが張る空間の中で Rayleigh 商を最大にすれば、同じ行列ベクトル積の回数ではるかによい近似が得られます。これが Lanczos 法です。
2 つの算法は同じ Krylov 部分空間の上で動き、収束の評価はどちらも「区間の外で急に大きくなる多項式」、すなわち Chebyshev 多項式で与えられます。
この章でも C n \mathbb{C}^n C n の標準内積 y ∗ x \boldsymbol{y}^{*}\boldsymbol{x} y ∗ x 、ノルム ∥ ⋅ ∥ \|\cdot\| ∥ ⋅ ∥ と、冪乗法の章 の角(定義 2.1[固有値の計算 I] )と Rayleigh 商 R A ( x ) R_A(\boldsymbol{x}) R A ( x ) を使います。P k \mathcal{P}_k P k は次数 k k k 以下の多項式全体です。
定義 2.1 (Krylov 部分空間 ) ↗
A ∈ C n × n A \in \mathbb{C}^{n\times n} A ∈ C n × n 、b ∈ C n \boldsymbol{b} \in \mathbb{C}^n b ∈ C n 、b ≠ 0 \boldsymbol{b} \ne \boldsymbol{0} b = 0 とする。k ≥ 1 k \ge 1 k ≥ 1 について
K k ( A , b ) = span { b , A b , … , A k − 1 b } \mathcal{K}_k(A, \boldsymbol{b}) = \operatorname{span}\{\boldsymbol{b}, A\boldsymbol{b}, \ldots, A^{k-1}\boldsymbol{b}\} K k ( A , b ) = span { b , A b , … , A k − 1 b } を k k k 次の Krylov 部分空間 という。A d b ∈ K d ( A , b ) A^{d}\boldsymbol{b} \in \mathcal{K}_d(A, \boldsymbol{b}) A d b ∈ K d ( A , b ) となる最小の d ≥ 1 d \ge 1 d ≥ 1 を b \boldsymbol{b} b の次数 (grade)という。
命題 2.2 (Krylov 部分空間の基本性質 ) ✓
定義 2.1 の記号で次が成り立つ。
K k ( A , b ) = { p ( A ) b : p ∈ P k − 1 } \mathcal{K}_k(A, \boldsymbol{b}) = \{p(A)\boldsymbol{b} : p \in \mathcal{P}_{k-1}\} K k ( A , b ) = { p ( A ) b : p ∈ P k − 1 } 。
dim K k ( A , b ) = min ( k , d ) \dim\mathcal{K}_k(A, \boldsymbol{b}) = \min(k, d) dim K k ( A , b ) = min ( k , d ) であり、k ≥ d k \ge d k ≥ d なら K k = K d \mathcal{K}_k = \mathcal{K}_d K k = K d で、K d \mathcal{K}_d K d は A A A で不変である。
A A A が対角化可能で相異なる固有値が s s s 個なら d ≤ s d \le s d ≤ s である。
証明(命題 2.2)
p ( t ) = ∑ j < k c j t j p(t) = \sum_{j<k}c_jt^j p ( t ) = ∑ j < k c j t j なら p ( A ) b = ∑ j c j A j b p(A)\boldsymbol{b} = \sum_jc_jA^j\boldsymbol{b} p ( A ) b = ∑ j c j A j b なので、定義の言い換えです。
k < d k < d k < d では d d d の最小性から A k b ∉ K k A^{k}\boldsymbol{b} \notin \mathcal{K}_k A k b ∈ / K k なので、帰納法で b , … , A k b \boldsymbol{b}, \ldots, A^{k}\boldsymbol{b} b , … , A k b は一次独立、つまり dim K k + 1 = k + 1 \dim\mathcal{K}_{k+1} = k + 1 dim K k + 1 = k + 1 です(k + 1 ≤ d k + 1 \le d k + 1 ≤ d )。A d b ∈ K d A^d\boldsymbol{b} \in \mathcal{K}_d A d b ∈ K d なら A K d = span { A b , … , A d b } ⊂ K d A\mathcal{K}_d = \operatorname{span}\{A\boldsymbol{b}, \ldots, A^d\boldsymbol{b}\} \subset \mathcal{K}_d A K d = span { A b , … , A d b } ⊂ K d で、K d \mathcal{K}_d K d は A A A で不変です。よって A j b ∈ K d A^j\boldsymbol{b} \in \mathcal{K}_d A j b ∈ K d (j ≥ d j \ge d j ≥ d )で、k ≥ d k \ge d k ≥ d なら K k = K d \mathcal{K}_k = \mathcal{K}_d K k = K d です。
対角化可能なので固有ベクトルの基底があり(定理 3.2[対角化とジョルダン標準形] )、相異なる固有値を μ 1 , … , μ s \mu_1, \ldots, \mu_s μ 1 , … , μ s として q ( t ) = ∏ i = 1 s ( t − μ i ) q(t) = \prod_{i=1}^{s}(t - \mu_i) q ( t ) = ∏ i = 1 s ( t − μ i ) とおくと、q ( A ) q(A) q ( A ) はすべての固有ベクトルを 0 0 0 に写すので q ( A ) = O q(A) = O q ( A ) = O です。q q q はモニックな s s s 次式なので A s b = A s b − q ( A ) b ∈ K s A^s\boldsymbol{b} = A^s\boldsymbol{b} - q(A)\boldsymbol{b} \in \mathcal{K}_s A s b = A s b − q ( A ) b ∈ K s で、d ≤ s d \le s d ≤ s です。
∎
b , A b , A 2 b , … \boldsymbol{b}, A\boldsymbol{b}, A^2\boldsymbol{b}, \ldots b , A b , A 2 b , … をそのまま基底に使うと、冪乗法と同じ理由で後のベクトルほど v 1 \boldsymbol{v}_1 v 1 の方向にそろい、数値的に一次従属に近づきます。そこで 1 本ずつ A A A を掛けては直交化します。
定義 3.1 (Arnoldi の過程 ) ↗
q 1 = b / ∥ b ∥ \boldsymbol{q}_1 = \boldsymbol{b}/\|\boldsymbol{b}\| q 1 = b /∥ b ∥ とし、j = 1 , 2 , … j = 1, 2, \ldots j = 1 , 2 , … について
h i j = q i ∗ A q j ( i ≤ j ) , w j = A q j − ∑ i = 1 j h i j q i , h j + 1 , j = ∥ w j ∥ 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\| h ij = q i ∗ A q j ( i ≤ j ) , w j = A q j − i = 1 ∑ j h ij q i , h j + 1 , j = ∥ w j ∥ を計算し、h j + 1 , j ≠ 0 h_{j+1,j} \ne 0 h j + 1 , j = 0 なら q j + 1 = w j / h j + 1 , j \boldsymbol{q}_{j+1} = \boldsymbol{w}_j/h_{j+1,j} q j + 1 = w j / h j + 1 , j とする。h j + 1 , j = 0 h_{j+1,j} = 0 h j + 1 , j = 0 なら停止する。Q k = ( q 1 ⋯ q k ) Q_k = (\boldsymbol{q}_1\ \cdots\ \boldsymbol{q}_k) Q k = ( q 1 ⋯ q k ) 、H k = ( h i j ) 1 ≤ i , j ≤ k H_k = (h_{ij})_{1\le i,j\le k} H k = ( h ij ) 1 ≤ i , j ≤ k (i > j + 1 i > j + 1 i > j + 1 では h i j = 0 h_{ij} = 0 h ij = 0 )、H ~ k \tilde{H}_k H ~ k を H k H_k H k の下に行 ( 0 , … , 0 , h k + 1 , k ) (0, \ldots, 0, h_{k+1,k}) ( 0 , … , 0 , h k + 1 , k ) を足した ( k + 1 ) × k (k+1)\times k ( k + 1 ) × k 行列とする。
定理 3.2 (Arnoldi の関係式 ) ✓
d d d を b \boldsymbol{b} b の次数とする。Arnoldi の過程は j = 1 , … , d − 1 j = 1, \ldots, d - 1 j = 1 , … , d − 1 では停止せず(h j + 1 , j > 0 h_{j+1,j} > 0 h j + 1 , j > 0 )、j = d j = d j = d で停止する(h d + 1 , d = 0 h_{d+1,d} = 0 h d + 1 , d = 0 )。1 ≤ k ≤ d 1 \le k \le d 1 ≤ k ≤ d について次が成り立つ。
q 1 , … , q k \boldsymbol{q}_1, \ldots, \boldsymbol{q}_k q 1 , … , q k は正規直交で K k ( A , b ) \mathcal{K}_k(A, \boldsymbol{b}) K k ( A , b ) を張る。
k < d k < d k < d なら A Q k = Q k + 1 H ~ k AQ_k = Q_{k+1}\tilde{H}_k A Q k = Q k + 1 H ~ k 、k = d k = d k = d なら A Q d = Q d H d AQ_d = Q_dH_d A Q d = Q d H d 。
H k = Q k ∗ A Q k H_k = Q_k^{*}AQ_k H k = Q k ∗ A Q k 。
証明は j j j についての帰納法です。各段で「A q j A\boldsymbol{q}_j A q j はまだ K j \mathcal{K}_j K j に入っていないので、K j \mathcal{K}_j K j への成分を引くと零でない新しい方向が残り、それを正規化したものが q j + 1 \boldsymbol{q}_{j+1} q j + 1 になる」ことを確かめ、最後に j = d j = d j = d で新しい方向が残らなくなることを見ます。
証明(定理 3.2) j j j についての帰納法で、j < d j < d j < d のとき「q 1 , … , q j \boldsymbol{q}_1, \ldots, \boldsymbol{q}_j q 1 , … , q j は正規直交で K j \mathcal{K}_j K j を張り、h j + 1 , j > 0 h_{j+1,j} > 0 h j + 1 , j > 0 で、q 1 , … , q j + 1 \boldsymbol{q}_1, \ldots, \boldsymbol{q}_{j+1} q 1 , … , q j + 1 は正規直交で K j + 1 \mathcal{K}_{j+1} K j + 1 を張る」ことを示します。K 1 = span { q 1 } \mathcal{K}_1 = \operatorname{span}\{\boldsymbol{q}_1\} K 1 = span { q 1 } は明らかです。
q 1 , … , q j \boldsymbol{q}_1, \ldots, \boldsymbol{q}_j q 1 , … , q j が正規直交で K j \mathcal{K}_j K j を張るとします。q j ∈ K j \boldsymbol{q}_j \in \mathcal{K}_j q j ∈ K j ですが、j ≥ 2 j \ge 2 j ≥ 2 では q j ⊥ K j − 1 \boldsymbol{q}_j \perp \mathcal{K}_{j-1} q j ⊥ K j − 1 なので q j ∉ K j − 1 \boldsymbol{q}_j \notin \mathcal{K}_{j-1} q j ∈ / K j − 1 です。よって q j = p ( A ) b \boldsymbol{q}_j = p(A)\boldsymbol{b} q j = p ( A ) b の p p p はちょうど j − 1 j - 1 j − 1 次で(命題 2.2 の 1)、A q j = A p ( A ) b A\boldsymbol{q}_j = Ap(A)\boldsymbol{b} A q j = A p ( A ) b を b , A b , … \boldsymbol{b}, A\boldsymbol{b}, \ldots b , A b , … で展開したときの A j b A^j\boldsymbol{b} A j b の係数は 0 0 0 でありません。j < d j < d j < d では b , … , A j b \boldsymbol{b}, \ldots, A^j\boldsymbol{b} b , … , A j b は一次独立(命題 2.2 の 2)なので A q j ∉ K j A\boldsymbol{q}_j \notin \mathcal{K}_j A q j ∈ / K j です。w j \boldsymbol{w}_j w j は A q j A\boldsymbol{q}_j A q j から K j \mathcal{K}_j K j への直交射影を引いたもの(定理 7.1[内積空間とグラム・シュミット直交化] )なので w j ≠ 0 \boldsymbol{w}_j \ne \boldsymbol{0} w j = 0 、w j ⊥ K j \boldsymbol{w}_j \perp \mathcal{K}_j w j ⊥ K j で、q j + 1 \boldsymbol{q}_{j+1} q j + 1 は q 1 , … , q j \boldsymbol{q}_1, \ldots, \boldsymbol{q}_j q 1 , … , q j と直交する単位ベクトルです。q j + 1 ∈ span { A q j , K j } ⊂ K j + 1 \boldsymbol{q}_{j+1} \in \operatorname{span}\{A\boldsymbol{q}_j, \mathcal{K}_j\} \subset \mathcal{K}_{j+1} q j + 1 ∈ span { A q j , K j } ⊂ K j + 1 で、次元を比べて span { q 1 , … , q j + 1 } = K j + 1 \operatorname{span}\{\boldsymbol{q}_1, \ldots, \boldsymbol{q}_{j+1}\} = \mathcal{K}_{j+1} span { q 1 , … , q j + 1 } = K j + 1 です。
j = d j = d j = d では K d \mathcal{K}_d K d が A A A で不変(命題 2.2 の 2)なので A q d ∈ K d A\boldsymbol{q}_d \in \mathcal{K}_d A q d ∈ K d で、w d = 0 \boldsymbol{w}_d = \boldsymbol{0} w d = 0 、つまり h d + 1 , d = 0 h_{d+1,d} = 0 h d + 1 , d = 0 です。
定義を書き直すと A q j = ∑ i = 1 j + 1 h i j q i A\boldsymbol{q}_j = \sum_{i=1}^{j+1}h_{ij}\boldsymbol{q}_i A q j = ∑ i = 1 j + 1 h ij q i (j = d j = d j = d では和は i ≤ d i \le d i ≤ d まで)で、これを列に並べたものが 2 です。2 の左から Q k ∗ Q_k^{*} Q k ∗ を掛けると、Q k ∗ Q k + 1 = ( I k 0 ) Q_k^{*}Q_{k+1} = (I_k\ \ \boldsymbol{0}) Q k ∗ Q k + 1 = ( I k 0 ) から Q k ∗ A Q k = H k Q_k^{*}AQ_k = H_k Q k ∗ A Q k = H k です。
∎
系 3.3 (Lanczos の三項漸化式 ) ✓
A A A が Hermite 行列なら、H k H_k H k は実の三重対角行列
H k = T k = ( α 1 β 1 β 1 α 2 ⋱ ⋱ ⋱ β k − 1 β k − 1 α k ) , α j = q j ∗ A q j ∈ R , β j = h j + 1 , j > 0 H_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 H k = T k = α 1 β 1 β 1 α 2 ⋱ ⋱ ⋱ β k − 1 β k − 1 α k , α j = q j ∗ A q j ∈ R , β j = h j + 1 , j > 0 であり、Arnoldi の過程は
β j q j + 1 = A q j − α j q j − β j − 1 q j − 1 ( β 0 q 0 = 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}) β j q j + 1 = A q j − α j q j − β j − 1 q j − 1 ( β 0 q 0 = 0 ) に簡約される(Lanczos 法 )。
証明の中心は、上 Hessenberg 行列(対角線のすぐ下より下がすべて 0 0 0 の行列)が Hermite でもあれば三重対角になる、という点です。
証明(系 3.3) 定理 3.2 の 3 から H k ∗ = Q k ∗ A ∗ Q k = H k H_k^{*} = Q_k^{*}A^{*}Q_k = H_k H k ∗ = Q k ∗ A ∗ Q k = H k で、H k H_k H k は Hermite 行列です。H k H_k H k は上 Hessenberg(i > j + 1 i > j + 1 i > j + 1 で 0 0 0 )なので、Hermite 性から j > i + 1 j > i + 1 j > i + 1 でも 0 0 0 、すなわち三重対角です。対角成分は Hermite 行列の対角なので実数、副対角は h i j = h j i ‾ h_{ij} = \overline{h_{ji}} h ij = h j i と h j + 1 , j = ∥ w j ∥ > 0 h_{j+1,j} = \|\boldsymbol{w}_j\| > 0 h j + 1 , j = ∥ w j ∥ > 0 から h j , j + 1 = h j + 1 , j h_{j,j+1} = h_{j+1,j} h j , j + 1 = h j + 1 , j で実数です。漸化式は Arnoldi の w j \boldsymbol{w}_j w j の和の中で h i j = 0 h_{ij} = 0 h ij = 0 (i < j − 1 i < j - 1 i < j − 1 )の項を落としたものです。
∎
1 回の Lanczos の反復は、行列ベクトル積 1 回とベクトル演算 O ( n ) O(n) O ( n ) だけで済み、保持するベクトルも 3 本です。Arnoldi の過程は j j j 本すべてとの内積が要るので、反復が進むほど重くなります。この差が、Hermite 行列の Krylov 部分空間法(Lanczos 法・共役勾配法)が一般の行列の方法(Arnoldi 法・GMRES)より軽い理由です。
以下この節では A A A を n n n 次 Hermite 行列とし、固有値を λ 1 ≥ λ 2 ≥ ⋯ ≥ λ n \lambda_1 \ge \lambda_2 \ge \cdots \ge \lambda_n λ 1 ≥ λ 2 ≥ ⋯ ≥ λ n 、対応する正規直交な固有ベクトルを u 1 , … , u n \boldsymbol{u}_1, \ldots, \boldsymbol{u}_n u 1 , … , u n とします(定理 4.2[スペクトル定理] )。
定義 4.1 (Ritz 値 ) ↗
1 ≤ k ≤ d 1 \le k \le d 1 ≤ k ≤ d について、三重対角行列 T k = Q k ∗ A Q k T_k = Q_k^{*}AQ_k T k = Q k ∗ A Q k の固有値 θ 1 ( k ) ≥ ⋯ ≥ θ k ( k ) \theta_1^{(k)} \ge \cdots \ge \theta_k^{(k)} θ 1 ( k ) ≥ ⋯ ≥ θ k ( k ) を K k ( A , b ) \mathcal{K}_k(A, \boldsymbol{b}) K k ( A , b ) に関する Ritz 値 という。T k s = θ s T_k\boldsymbol{s} = \theta\boldsymbol{s} T k s = θ s のとき Q k s Q_k\boldsymbol{s} Q k s を Ritz ベクトル という。
定理 4.2 (Ritz 値の最適性と交互性 ) ✓
1 ≤ k ≤ d 1 \le k \le d 1 ≤ k ≤ d とする。
θ 1 ( k ) = max { R A ( x ) : x ∈ K k , x ≠ 0 } \theta_1^{(k)} = \max\{R_A(\boldsymbol{x}) : \boldsymbol{x} \in \mathcal{K}_k,\ \boldsymbol{x} \ne \boldsymbol{0}\} θ 1 ( k ) = max { R A ( x ) : x ∈ K k , x = 0 } 、θ k ( k ) = min { R A ( x ) : x ∈ K k , x ≠ 0 } \theta_k^{(k)} = \min\{R_A(\boldsymbol{x}) : \boldsymbol{x} \in \mathcal{K}_k,\ \boldsymbol{x} \ne \boldsymbol{0}\} θ k ( k ) = min { R A ( x ) : x ∈ K k , x = 0 } 。
λ i ≥ θ i ( k ) ≥ λ i + n − k \lambda_i \ge \theta_i^{(k)} \ge \lambda_{i+n-k} λ i ≥ θ i ( k ) ≥ λ i + n − k (1 ≤ i ≤ k 1 \le i \le k 1 ≤ i ≤ k )。
k + 1 ≤ d k + 1 \le d k + 1 ≤ d なら θ i ( k + 1 ) ≥ θ i ( k ) ≥ θ i + 1 ( k + 1 ) \theta_i^{(k+1)} \ge \theta_i^{(k)} \ge \theta_{i+1}^{(k+1)} θ i ( k + 1 ) ≥ θ i ( k ) ≥ θ i + 1 ( k + 1 ) (1 ≤ i ≤ k 1 \le i \le k 1 ≤ i ≤ k )。とくに θ 1 ( k ) \theta_1^{(k)} θ 1 ( k ) は k k k について単調に増加して λ 1 \lambda_1 λ 1 を超えず、θ k ( k ) \theta_k^{(k)} θ k ( k ) は単調に減少して λ n \lambda_n λ n を下回らない。
k = d k = d k = d なら Ritz 値はすべて A A A の固有値である。
証明(定理 4.2)
x ∈ K k \boldsymbol{x} \in \mathcal{K}_k x ∈ K k は x = Q k y \boldsymbol{x} = Q_k\boldsymbol{y} x = Q k y と一意に書け、Q k Q_k Q k の列は正規直交なので ∥ x ∥ = ∥ y ∥ \|\boldsymbol{x}\| = \|\boldsymbol{y}\| ∥ x ∥ = ∥ y ∥ 、x ∗ A x = y ∗ T k y \boldsymbol{x}^{*}A\boldsymbol{x} = \boldsymbol{y}^{*}T_k\boldsymbol{y} x ∗ A x = y ∗ T k y です。よって R A ( x ) = R T k ( y ) R_A(\boldsymbol{x}) = R_{T_k}(\boldsymbol{y}) R A ( x ) = R T k ( y ) で、y \boldsymbol{y} y は C k ∖ { 0 } \mathbb{C}^k \setminus \{\boldsymbol{0}\} C k ∖ { 0 } 全体を動きます。Hermite 行列 T k T_k T k の Rayleigh 商の最大・最小は最大・最小の固有値です(定理 7.1[スペクトル定理] の 1)。
Cauchy の交互定理(定理 3.3[行列の固有値評価と不等式] )を P = Q k P = Q_k P = Q k (Q k ∗ Q k = I k Q_k^{*}Q_k = I_k Q k ∗ Q k = I k )に使えばよい。
T k T_k T k は T k + 1 T_{k+1} T k + 1 の左上の k k k 次主部分行列なので、交互定理を T k + 1 T_{k+1} T k + 1 と P = ( I k 0 ) T P = (I_k\ \ \boldsymbol{0})^{\mathsf{T}} P = ( I k 0 ) T に使うと θ i ( k + 1 ) ≥ θ i ( k ) ≥ θ i + 1 ( k + 1 ) \theta_i^{(k+1)} \ge \theta_i^{(k)} \ge \theta_{i+1}^{(k+1)} θ i ( k + 1 ) ≥ θ i ( k ) ≥ θ i + 1 ( k + 1 ) です。後半はこれと 2 から従います。
A Q d = Q d T d AQ_d = Q_dT_d A Q d = Q d T d (定理 3.2 の 2)なので、T d s = θ s T_d\boldsymbol{s} = \theta\boldsymbol{s} T d s = θ s 、s ≠ 0 \boldsymbol{s} \ne \boldsymbol{0} s = 0 なら A ( Q d s ) = Q d T d s = θ Q d s A(Q_d\boldsymbol{s}) = Q_dT_d\boldsymbol{s} = \theta Q_d\boldsymbol{s} A ( Q d s ) = Q d T d s = θ Q d s で、Q d s ≠ 0 Q_d\boldsymbol{s} \ne \boldsymbol{0} Q d s = 0 です。
∎
冪乗法の Rayleigh 商 R A ( A k − 1 b ) R_A(A^{k-1}\boldsymbol{b}) R A ( A k − 1 b ) は K k \mathcal{K}_k K k の 1 点での値なので、1 から θ 1 ( k ) ≥ R A ( A k − 1 b ) \theta_1^{(k)} \ge R_A(A^{k-1}\boldsymbol{b}) θ 1 ( k ) ≥ R A ( A k − 1 b ) です。同じ k − 1 k - 1 k − 1 回の行列ベクトル積で、Lanczos 法はつねに冪乗法以上の近似を与えます。どれだけ上回るかを定量化したのが次の定理で、ここで Chebyshev 多項式 T j T_j T j (定義 2.1[誤差保証つきの求積と関数近似] )が登場します。使う性質は 2 つ、[ − 1 , 1 ] [-1, 1] [ − 1 , 1 ] で ∣ T j ( x ) ∣ ≤ 1 |T_j(x)| \le 1 ∣ T j ( x ) ∣ ≤ 1 であること(T j ( cos ϕ ) = cos j ϕ T_j(\cos\phi) = \cos j\phi T j ( cos ϕ ) = cos j ϕ 。補題 6.1[多項式補間] )と、x ≥ 1 x \ge 1 x ≥ 1 で T j ( x ) ≥ 1 2 ( x + x 2 − 1 ) j T_j(x) \ge \tfrac{1}{2}(x + \sqrt{x^2 - 1})^j T j ( x ) ≥ 2 1 ( x + x 2 − 1 ) j と急に大きくなること(補題 6.4[多項式補間] )です。
次の定理の γ \gamma γ は、最大固有値 λ 1 \lambda_1 λ 1 が残りの固有値の区間 [ λ n , λ 2 ] [\lambda_n, \lambda_2] [ λ n , λ 2 ] からどれだけ離れているかを、区間の幅との比で測った量で、離れているほど Lanczos 法は速く収束します。Chebyshev 多項式を使うのは、区間 [ λ n , λ 2 ] [\lambda_n, \lambda_2] [ λ n , λ 2 ] の上では絶対値が 1 以下におさまり、その外の λ 1 \lambda_1 λ 1 では急に大きくなる多項式だからです。証明では、K k \mathcal{K}_k K k の元 p ( A ) b p(A)\boldsymbol{b} p ( A ) b の中で u 1 \boldsymbol{u}_1 u 1 の成分だけが大きく他の成分が小さいものとして、この多項式を選びます。
定理 4.3 (最大の Ritz 値の収束(Kaniel–Paige の評価) ) ✓
λ 1 > λ 2 > λ n \lambda_1 > \lambda_2 > \lambda_n λ 1 > λ 2 > λ n とし、u 1 ∗ b ≠ 0 \boldsymbol{u}_1^{*}\boldsymbol{b} \ne 0 u 1 ∗ b = 0 、1 ≤ k ≤ d 1 \le k \le d 1 ≤ k ≤ d とする。
γ = λ 1 − λ 2 λ 2 − λ n \gamma = \frac{\lambda_1 - \lambda_2}{\lambda_2 - \lambda_n} γ = λ 2 − λ n λ 1 − λ 2 とおくと
0 ≤ λ 1 − θ 1 ( k ) ≤ ( λ 1 − λ n ) ( tan ∠ ( b , u 1 ) T k − 1 ( 1 + 2 γ ) ) 2 0 \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 0 ≤ λ 1 − θ 1 ( k ) ≤ ( λ 1 − λ n ) ( T k − 1 ( 1 + 2 γ ) tan ∠ ( b , u 1 ) ) 2 が成り立つ。
証明(定理 4.3) 左の不等号は 定理 4.2 の 2 です。p ∈ P k − 1 p \in \mathcal{P}_{k-1} p ∈ P k − 1 で p ( λ 1 ) ≠ 0 p(\lambda_1) \ne 0 p ( λ 1 ) = 0 なものを 1 つとり、x = p ( A ) b ∈ K k \boldsymbol{x} = p(A)\boldsymbol{b} \in \mathcal{K}_k x = p ( A ) b ∈ K k とします(命題 2.2 の 1)。c i = u i ∗ b c_i = \boldsymbol{u}_i^{*}\boldsymbol{b} c i = u i ∗ b とおくと x = ∑ i c i p ( λ i ) u i ≠ 0 \boldsymbol{x} = \sum_ic_ip(\lambda_i)\boldsymbol{u}_i \ne \boldsymbol{0} x = ∑ i c i p ( λ i ) u i = 0 で、
λ 1 − R A ( x ) = ∑ i ≥ 2 ∣ c i ∣ 2 ∣ p ( λ i ) ∣ 2 ( λ 1 − λ i ) ∑ i ∣ c i ∣ 2 ∣ p ( λ i ) ∣ 2 ≤ ( λ 1 − λ n ) max i ≥ 2 ∣ p ( λ i ) ∣ 2 ∣ p ( λ 1 ) ∣ 2 ⋅ ∑ i ≥ 2 ∣ c i ∣ 2 ∣ c 1 ∣ 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} λ 1 − R A ( x ) = ∑ i ∣ c i ∣ 2 ∣ p ( λ i ) ∣ 2 ∑ i ≥ 2 ∣ c i ∣ 2 ∣ p ( λ i ) ∣ 2 ( λ 1 − λ i ) ≤ ( λ 1 − λ n ) i ≥ 2 max ∣ p ( λ 1 ) ∣ 2 ∣ p ( λ i ) ∣ 2 ⋅ ∣ c 1 ∣ 2 ∑ i ≥ 2 ∣ c i ∣ 2 です(分母を ∣ c 1 ∣ 2 ∣ p ( λ 1 ) ∣ 2 |c_1|^2|p(\lambda_1)|^2 ∣ c 1 ∣ 2 ∣ p ( λ 1 ) ∣ 2 に減らした)。最後の比は tan 2 ∠ ( b , u 1 ) \tan^2\angle(\boldsymbol{b}, \boldsymbol{u}_1) tan 2 ∠ ( b , u 1 ) です(補題 2.2[固有値の計算 I] の 4)。定理 4.2 の 1 から θ 1 ( k ) ≥ R A ( x ) \theta_1^{(k)} \ge R_A(\boldsymbol{x}) θ 1 ( k ) ≥ R A ( x ) なので、λ 1 − θ 1 ( k ) \lambda_1 - \theta_1^{(k)} λ 1 − θ 1 ( k ) も同じ式で抑えられます。
ここで ℓ ( t ) = ( 2 t − λ 2 − λ n ) / ( λ 2 − λ n ) \ell(t) = (2t - \lambda_2 - \lambda_n)/(\lambda_2 - \lambda_n) ℓ ( t ) = ( 2 t − λ 2 − λ n ) / ( λ 2 − λ n ) とおき、p ( t ) = T k − 1 ( ℓ ( t ) ) p(t) = T_{k-1}(\ell(t)) p ( t ) = T k − 1 ( ℓ ( t )) とします(ℓ \ell ℓ は 1 次式なので p ∈ P k − 1 p \in \mathcal{P}_{k-1} p ∈ P k − 1 )。ℓ \ell ℓ は [ λ n , λ 2 ] [\lambda_n, \lambda_2] [ λ n , λ 2 ] を [ − 1 , 1 ] [-1, 1] [ − 1 , 1 ] に写し、ℓ ( λ 1 ) = 1 + 2 γ > 1 \ell(\lambda_1) = 1 + 2\gamma > 1 ℓ ( λ 1 ) = 1 + 2 γ > 1 です。i ≥ 2 i \ge 2 i ≥ 2 では ℓ ( λ i ) ∈ [ − 1 , 1 ] \ell(\lambda_i) \in [-1, 1] ℓ ( λ i ) ∈ [ − 1 , 1 ] なので、ℓ ( λ i ) = cos ϕ \ell(\lambda_i) = \cos\phi ℓ ( λ i ) = cos ϕ と書いて ∣ p ( λ i ) ∣ = ∣ cos ( ( k − 1 ) ϕ ) ∣ ≤ 1 |p(\lambda_i)| = |\cos((k-1)\phi)| \le 1 ∣ p ( λ i ) ∣ = ∣ cos (( k − 1 ) ϕ ) ∣ ≤ 1 (補題 6.1[多項式補間] )です。一方 p ( λ 1 ) = T k − 1 ( 1 + 2 γ ) ≥ 1 2 ( 1 + 2 γ + ( 1 + 2 γ ) 2 − 1 ) k − 1 > 0 p(\lambda_1) = T_{k-1}(1 + 2\gamma) \ge \tfrac12(1 + 2\gamma + \sqrt{(1 + 2\gamma)^2 - 1})^{k-1} > 0 p ( λ 1 ) = T k − 1 ( 1 + 2 γ ) ≥ 2 1 ( 1 + 2 γ + ( 1 + 2 γ ) 2 − 1 ) k − 1 > 0 (補題 6.4[多項式補間] )です。これを代入すれば主張を得ます。
∎
冪乗法(系 3.5[固有値の計算 I] 。A A A が正定値なら ∣ λ 2 / λ 1 ∣ |\lambda_2/\lambda_1| ∣ λ 2 / λ 1 ∣ が比)と比べます。γ \gamma γ が小さいとき T k − 1 ( 1 + 2 γ ) ≈ 1 2 e 2 ( k − 1 ) γ T_{k-1}(1 + 2\gamma) \approx \tfrac12 e^{2(k-1)\sqrt{\gamma}} T k − 1 ( 1 + 2 γ ) ≈ 2 1 e 2 ( k − 1 ) γ なので、Lanczos 法の誤差は 1 回あたり約 e − 4 γ e^{-4\sqrt{\gamma}} e − 4 γ 倍、冪乗法は ( λ 2 / λ 1 ) 2 ≈ e − 2 ( λ 1 − λ 2 ) / λ 1 (\lambda_2/\lambda_1)^2 \approx e^{-2(\lambda_1 - \lambda_2)/\lambda_1} ( λ 2 / λ 1 ) 2 ≈ e − 2 ( λ 1 − λ 2 ) / λ 1 倍です。たとえば固有値が [ 0 , 1 ] [0, 1] [ 0 , 1 ] に広がり λ 1 − λ 2 = 10 − 2 \lambda_1 - \lambda_2 = 10^{-2} λ 1 − λ 2 = 1 0 − 2 なら、γ ≈ 10 − 2 \gamma \approx 10^{-2} γ ≈ 1 0 − 2 で Lanczos 法は 1 回あたり e − 0.4 e^{-0.4} e − 0.4 、冪乗法は e − 0.02 e^{-0.02} e − 0.02 で、Lanczos 法は約 20 倍少ない反復で済みます。差は隔たり γ \gamma γ の平方根から生じます。
再直交化とは、新しいベクトルを直前の 2 本だけでなく、それまでに作った全部のベクトルと直交させ直す手間のことです。これを省くと丸め誤差で直交性が崩れ、同じ固有値が Ritz 値として何度も現れます(ゴースト)。
次のコードは、固有値が上の端で疎になるように並べた対角行列(Strakoš が有限精度の解析で使った分布)で、Lanczos 法を再直交化なしと完全再直交化で行い、最大固有値 λ max \lambda_{\max} λ m a x に 10 − 8 10^{-8} 1 0 − 8 以内まで近い Ritz 値の個数を数えたものです。
# Python 3.12.10 / NumPy 2.5.2(x86-64, OpenBLAS)
n = 100 # 固有値の分布(Strakoš の例、rho = 0.9)
lam = 0.1 + i / (n - 1 ) * 99.9 * 0.9 ** (n - 1 - i) # A = diag(lam)
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 ]
for _ in range ( 2 * reorth ): # 完全再直交化(2 回)
w -= Q[:, :j + 1 ] @ (Q[:, :j + 1 ].T @ w)
be[j] = np.linalg. norm ( w )
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 ) ] :
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 λ m a x = 100 は単純なので、厳密な算術では 定理 4.2 の 3 と 2 から λ max \lambda_{\max} λ m a x の近くの Ritz 値は高々 1 個です。(b) 完全再直交化した計算ではつねに 1 個で、Q Q Q の直交性も単位丸めの程度に保たれます。再直交化なしでは、k = 20 k = 20 k = 20 ですでに直交性が 10 − 8 10^{-8} 1 0 − 8 の程度まで崩れ始め、k = 40 k = 40 k = 40 以降は約 20 回ごとに λ max \lambda_{\max} λ m a x の複製が 1 個ずつ増えます。(c) ゴーストが現れる周期は、Ritz 値が収束して直交性が失われる周期に対応しています(注意 4.4 の Paige の理論)。
以下 A A A は正定値 Hermite 行列、x ∗ = A − 1 b \boldsymbol{x}^{*} = A^{-1}\boldsymbol{b} x ∗ = A − 1 b とし、誤差を A A A ノルム(エネルギーノルム)∥ e ∥ A = ( e ∗ A e ) 1 / 2 \|\boldsymbol{e}\|_A = (\boldsymbol{e}^{*}A\boldsymbol{e})^{1/2} ∥ e ∥ A = ( e ∗ A e ) 1/2 で測ります。x \boldsymbol{x} x の誤差 x − x ∗ \boldsymbol{x} - \boldsymbol{x}^{*} x − x ∗ と残差 r = b − A x \boldsymbol{r} = \boldsymbol{b} - A\boldsymbol{x} r = b − A x の間には r = − A ( x − x ∗ ) \boldsymbol{r} = -A(\boldsymbol{x} - \boldsymbol{x}^{*}) r = − A ( x − x ∗ ) の関係があります。
定義 5.1 (共役勾配法 ) ↗
x 0 ∈ C n \boldsymbol{x}_0 \in \mathbb{C}^n x 0 ∈ C n から r 0 = b − A x 0 \boldsymbol{r}_0 = \boldsymbol{b} - A\boldsymbol{x}_0 r 0 = b − A x 0 、p 0 = r 0 \boldsymbol{p}_0 = \boldsymbol{r}_0 p 0 = r 0 とし、r k ≠ 0 \boldsymbol{r}_k \ne \boldsymbol{0} r k = 0 である限り
α k = r k ∗ r k p k ∗ A p k , x k + 1 = x k + α k p k , r k + 1 = r k − α k A p k , β k = r k + 1 ∗ r k + 1 r k ∗ r k , p k + 1 = r k + 1 + β k p k \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} α k β k = p k ∗ A p k r k ∗ r k , = r k ∗ r k r k + 1 ∗ r k + 1 , x k + 1 p k + 1 = x k + α k p k , = r k + 1 + β k p k r k + 1 = r k − α k A p k , を繰り返す。r k = 0 \boldsymbol{r}_k = \boldsymbol{0} r k = 0 になったら止める。これを共役勾配法 (CG 法)という。
1 回の反復は行列ベクトル積 1 回と内積 2 回・ベクトルの更新 3 回で、保持するベクトルは 4 本です。この単純な算法が、次の強い性質をもちます。
定理 5.2 (共役勾配法の直交性と最適性 ) ✓
r 0 , … , r k − 1 \boldsymbol{r}_0, \ldots, \boldsymbol{r}_{k-1} r 0 , … , r k − 1 がすべて 0 \boldsymbol{0} 0 でないとする。このとき x k \boldsymbol{x}_k x k , r k \boldsymbol{r}_k r k まで定義され(分母は正)、次が成り立つ。
r j = b − A x j \boldsymbol{r}_j = \boldsymbol{b} - A\boldsymbol{x}_j r j = b − A x j (j ≤ k j \le k j ≤ k )。
r i ∗ r j = 0 \boldsymbol{r}_i^{*}\boldsymbol{r}_j = 0 r i ∗ r j = 0 (0 ≤ i < j ≤ k 0 \le i < j \le k 0 ≤ i < j ≤ k )、p i ∗ A p j = 0 \boldsymbol{p}_i^{*}A\boldsymbol{p}_j = 0 p i ∗ A p j = 0 (0 ≤ i < j ≤ k − 1 0 \le i < j \le k - 1 0 ≤ i < j ≤ k − 1 )。
span { r 0 , … , r k − 1 } = span { p 0 , … , p k − 1 } = K k ( A , r 0 ) \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) span { r 0 , … , r k − 1 } = span { p 0 , … , p k − 1 } = K k ( A , r 0 ) で、その次元は k k k である。
x k ∈ x 0 + K k ( A , r 0 ) \boldsymbol{x}_k \in \boldsymbol{x}_0 + \mathcal{K}_k(A, \boldsymbol{r}_0) x k ∈ x 0 + K k ( A , r 0 ) であり、x k \boldsymbol{x}_k x k は x 0 + K k ( A , r 0 ) \boldsymbol{x}_0 + \mathcal{K}_k(A, \boldsymbol{r}_0) x 0 + K k ( A , r 0 ) の中で ∥ x − x ∗ ∥ A \|\boldsymbol{x} - \boldsymbol{x}^{*}\|_A ∥ x − x ∗ ∥ A を最小にするただ 1 つの点である。同じことだが、r k ⊥ K k ( A , r 0 ) \boldsymbol{r}_k \perp \mathcal{K}_k(A, \boldsymbol{r}_0) r k ⊥ K k ( A , r 0 ) である。
証明は k k k についての帰納法で、残差 r j \boldsymbol{r}_j r j どうしが直交し、探索方向 p j \boldsymbol{p}_j p j どうしが A A A について直交する、という 2 つの性質を同時に保ちながら進めます。まず算法の分母が正で反復が続くことを確かめ、最後の 4 でこの直交性から x k \boldsymbol{x}_k x k が最良点であることを導きます。
証明(定理 5.2) k k k についての帰納法で 1〜3 を示します。k = 0 k = 0 k = 0 では 1 は定義、2・3 は主張がありません。k k k で成り立ち、r k ≠ 0 \boldsymbol{r}_k \ne \boldsymbol{0} r k = 0 とします。
分母が正であること. k ≥ 1 k \ge 1 k ≥ 1 では 3 から p k − 1 ∈ span { r 0 , … , r k − 1 } \boldsymbol{p}_{k-1} \in \operatorname{span}\{\boldsymbol{r}_0, \ldots, \boldsymbol{r}_{k-1}\} p k − 1 ∈ span { r 0 , … , r k − 1 } なので 2 から r k ∗ p k − 1 = 0 \boldsymbol{r}_k^{*}\boldsymbol{p}_{k-1} = 0 r k ∗ p k − 1 = 0 で、p k = r k + β k − 1 p k − 1 \boldsymbol{p}_k = \boldsymbol{r}_k + \beta_{k-1}\boldsymbol{p}_{k-1} p k = r k + β k − 1 p k − 1 から
r k ∗ p k = r k ∗ r k > 0 \boldsymbol{r}_k^{*}\boldsymbol{p}_k = \boldsymbol{r}_k^{*}\boldsymbol{r}_k > 0 r k ∗ p k = r k ∗ r k > 0 です(k = 0 k = 0 k = 0 でも p 0 = r 0 \boldsymbol{p}_0 = \boldsymbol{r}_0 p 0 = r 0 なので同じ)。とくに p k ≠ 0 \boldsymbol{p}_k \ne \boldsymbol{0} p k = 0 で、A A A は正定値なので p k ∗ A p k > 0 \boldsymbol{p}_k^{*}A\boldsymbol{p}_k > 0 p k ∗ A p k > 0 、α k > 0 \alpha_k > 0 α k > 0 です。β k \beta_k β k の分母も r k ≠ 0 \boldsymbol{r}_k \ne \boldsymbol{0} r k = 0 から正です。α k \alpha_k α k , β k \beta_k β k は正の実数です。
1. r k + 1 = b − A x k − α k A p k = b − A x k + 1 \boldsymbol{r}_{k+1} = \boldsymbol{b} - A\boldsymbol{x}_k - \alpha_kA\boldsymbol{p}_k = \boldsymbol{b} - A\boldsymbol{x}_{k+1} r k + 1 = b − A x k − α k A p k = b − A x k + 1 です。
p \boldsymbol{p} p の共役性. i < k i < k i < k について p k ∗ A p i = 0 \boldsymbol{p}_k^{*}A\boldsymbol{p}_i = 0 p k ∗ A p i = 0 を示します(k ≥ 1 k \ge 1 k ≥ 1 の場合)。α i > 0 \alpha_i > 0 α i > 0 なので A p i = ( r i − r i + 1 ) / α i A\boldsymbol{p}_i = (\boldsymbol{r}_i - \boldsymbol{r}_{i+1})/\alpha_i A p i = ( r i − r i + 1 ) / α i です。i < k − 1 i < k - 1 i < k − 1 なら、r k ∗ A p i = 0 \boldsymbol{r}_k^{*}A\boldsymbol{p}_i = 0 r k ∗ A p i = 0 (2 で i , i + 1 < k i, i+1 < k i , i + 1 < k )と帰納法の仮定 p k − 1 ∗ A p i = 0 \boldsymbol{p}_{k-1}^{*}A\boldsymbol{p}_i = 0 p k − 1 ∗ A p i = 0 から p k ∗ A p i = 0 \boldsymbol{p}_k^{*}A\boldsymbol{p}_i = 0 p k ∗ A p i = 0 です。i = k − 1 i = k - 1 i = k − 1 なら
p k ∗ A p k − 1 = r k ∗ A p k − 1 + β k − 1 p k − 1 ∗ A p k − 1 = − r k ∗ r k α k − 1 + r k ∗ r k r k − 1 ∗ r k − 1 p k − 1 ∗ A p k − 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 p k ∗ A p k − 1 = r k ∗ A p k − 1 + β k − 1 p k − 1 ∗ A p k − 1 = − α k − 1 r k ∗ r k + r k − 1 ∗ r k − 1 r k ∗ r k p k − 1 ∗ A p k − 1 = 0 です(第 1 項は r k ∗ r k − 1 = 0 \boldsymbol{r}_k^{*}\boldsymbol{r}_{k-1} = 0 r k ∗ r k − 1 = 0 を使い、最後は α k − 1 \alpha_{k-1} α k − 1 の定義)。
r \boldsymbol{r} r の直交性. i < k i < k i < k なら、r i ∈ span { p 0 , … , p i } \boldsymbol{r}_i \in \operatorname{span}\{\boldsymbol{p}_0, \ldots, \boldsymbol{p}_i\} r i ∈ span { p 0 , … , p i } (3)と前段落から r i ∗ A p k = 0 \boldsymbol{r}_i^{*}A\boldsymbol{p}_k = 0 r i ∗ A p k = 0 なので、r i ∗ r k + 1 = r i ∗ r k − α k r i ∗ A p k = 0 \boldsymbol{r}_i^{*}\boldsymbol{r}_{k+1} = \boldsymbol{r}_i^{*}\boldsymbol{r}_k - \alpha_k\boldsymbol{r}_i^{*}A\boldsymbol{p}_k = 0 r i ∗ r k + 1 = r i ∗ r k − α k r i ∗ A p k = 0 です。i = k i = k i = k では、r k = p k − β k − 1 p k − 1 \boldsymbol{r}_k = \boldsymbol{p}_k - \beta_{k-1}\boldsymbol{p}_{k-1} r k = p k − β k − 1 p k − 1 と共役性から r k ∗ A p k = p k ∗ A p k \boldsymbol{r}_k^{*}A\boldsymbol{p}_k = \boldsymbol{p}_k^{*}A\boldsymbol{p}_k r k ∗ A p k = p k ∗ A p k なので(k = 0 k = 0 k = 0 では r 0 = p 0 \boldsymbol{r}_0 = \boldsymbol{p}_0 r 0 = p 0 )、r k ∗ r k + 1 = r k ∗ r k − α k p k ∗ A p k = 0 \boldsymbol{r}_k^{*}\boldsymbol{r}_{k+1} = \boldsymbol{r}_k^{*}\boldsymbol{r}_k - \alpha_k\boldsymbol{p}_k^{*}A\boldsymbol{p}_k = 0 r k ∗ r k + 1 = r k ∗ r k − α k p k ∗ A p k = 0 です。これで 2 が k + 1 k + 1 k + 1 で成り立ちます。
3. 帰納法で、r j , p j ∈ K j + 1 ( A , r 0 ) \boldsymbol{r}_j, \boldsymbol{p}_j \in \mathcal{K}_{j+1}(A, \boldsymbol{r}_0) r j , p j ∈ K j + 1 ( A , r 0 ) です(r j + 1 = r j − α j A p j \boldsymbol{r}_{j+1} = \boldsymbol{r}_j - \alpha_jA\boldsymbol{p}_j r j + 1 = r j − α j A p j で A K j + 1 ⊂ K j + 2 A\mathcal{K}_{j+1} \subset \mathcal{K}_{j+2} A K j + 1 ⊂ K j + 2 、p j + 1 = r j + 1 + β j p j \boldsymbol{p}_{j+1} = \boldsymbol{r}_{j+1} + \beta_j\boldsymbol{p}_j p j + 1 = r j + 1 + β j p j )。r 0 , … , r k \boldsymbol{r}_0, \ldots, \boldsymbol{r}_k r 0 , … , r k は零でなく互いに直交するので一次独立で、k + 1 k + 1 k + 1 次元の空間を張ります。それは高々 k + 1 k + 1 k + 1 次元の K k + 1 \mathcal{K}_{k+1} K k + 1 に含まれるので一致します。p \boldsymbol{p} p の張る空間は、p j = r j + β j − 1 p j − 1 \boldsymbol{p}_j = \boldsymbol{r}_j + \beta_{j-1}\boldsymbol{p}_{j-1} p j = r j + β j − 1 p j − 1 から帰納的に span { r 0 , … , r j } = span { p 0 , … , p j } \operatorname{span}\{\boldsymbol{r}_0, \ldots, \boldsymbol{r}_j\} = \operatorname{span}\{\boldsymbol{p}_0, \ldots, \boldsymbol{p}_j\} span { r 0 , … , r j } = span { p 0 , … , p j } です。
4. x k = x 0 + ∑ j < k α j p j ∈ x 0 + K k \boldsymbol{x}_k = \boldsymbol{x}_0 + \sum_{j<k}\alpha_j\boldsymbol{p}_j \in \boldsymbol{x}_0 + \mathcal{K}_k x k = x 0 + ∑ j < k α j p j ∈ x 0 + K k で、2 と 3 から r k ⊥ K k \boldsymbol{r}_k \perp \mathcal{K}_k r k ⊥ K k です。x = x k + z \boldsymbol{x} = \boldsymbol{x}_k + \boldsymbol{z} x = x k + z (z ∈ K k \boldsymbol{z} \in \mathcal{K}_k z ∈ K k )とすると、e k = x k − x ∗ \boldsymbol{e}_k = \boldsymbol{x}_k - \boldsymbol{x}^{*} e k = x k − x ∗ 、A e k = − r k A\boldsymbol{e}_k = -\boldsymbol{r}_k A e k = − r k から
∥ x − x ∗ ∥ A 2 = ∥ e k ∥ A 2 + 2 Re ( z ∗ A e k ) + ∥ z ∥ A 2 = ∥ e k ∥ A 2 − 2 Re ( z ∗ r k ) + ∥ z ∥ A 2 = ∥ e k ∥ A 2 + ∥ z ∥ A 2 \|\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 ∥ x − x ∗ ∥ A 2 = ∥ e k ∥ A 2 + 2 Re ( z ∗ A e k ) + ∥ z ∥ A 2 = ∥ e k ∥ A 2 − 2 Re ( z ∗ r k ) + ∥ z ∥ A 2 = ∥ e k ∥ A 2 + ∥ z ∥ A 2 で、最小は z = 0 \boldsymbol{z} = \boldsymbol{0} z = 0 でだけとられます。逆に x 0 + K k \boldsymbol{x}_0 + \mathcal{K}_k x 0 + K k の点 x \boldsymbol{x} x の残差が K k \mathcal{K}_k K k に直交するなら、同じ計算を x \boldsymbol{x} x を基準に行えば x \boldsymbol{x} x が最小点で、一意性から x = x k \boldsymbol{x} = \boldsymbol{x}_k x = x k です。
∎
名前の「共役」は 2 の後半(探索方向が A A A に関して直交すること)、「勾配」は r = − ∇ ( 1 2 x ∗ A x − Re b ∗ x ) \boldsymbol{r} = -\nabla\bigl(\tfrac12\boldsymbol{x}^{*}A\boldsymbol{x} - \operatorname{Re}\boldsymbol{b}^{*}\boldsymbol{x}\bigr) r = − ∇ ( 2 1 x ∗ A x − Re b ∗ x ) が汎関数の最急降下の方向であることに由来します。
系 5.3 (有限回での停止 ) ✓
厳密な算術では、共役勾配法は r 0 \boldsymbol{r}_0 r 0 の次数 d d d 以下の回数で r k = 0 \boldsymbol{r}_k = \boldsymbol{0} r k = 0 (x k = x ∗ \boldsymbol{x}_k = \boldsymbol{x}^{*} x k = x ∗ )となって止まる。とくに反復回数は A A A の相異なる固有値の個数以下である。
証明(系 5.3) r 0 , … , r k − 1 \boldsymbol{r}_0, \ldots, \boldsymbol{r}_{k-1} r 0 , … , r k − 1 がすべて零でなければ、定理 5.2 の 3 から dim K k ( A , r 0 ) = k \dim\mathcal{K}_k(A, \boldsymbol{r}_0) = k dim K k ( A , r 0 ) = k なので、命題 2.2 の 2 から k ≤ d k \le d k ≤ d です。よって r 0 , … , r d − 1 \boldsymbol{r}_0, \ldots, \boldsymbol{r}_{d-1} r 0 , … , r d − 1 がすべて零でないとしても、r d ∈ K d + 1 = K d \boldsymbol{r}_d \in \mathcal{K}_{d+1} = \mathcal{K}_d r d ∈ K d + 1 = K d (命題 2.2 の 2)かつ r d ⊥ K d \boldsymbol{r}_d \perp \mathcal{K}_d r d ⊥ K d (定理 5.2 の 4)から r d = 0 \boldsymbol{r}_d = \boldsymbol{0} r d = 0 です。Hermite 行列は対角化可能なので(定理 4.2[スペクトル定理] )、命題 2.2 の 3 から d d d は相異なる固有値の個数以下です。
∎
共役勾配法は x 0 + K k \boldsymbol{x}_0 + \mathcal{K}_k x 0 + K k の中の最良点を選ぶので、その誤差は、p ( 0 ) = 1 p(0) = 1 p ( 0 ) = 1 の k k k 次多項式 p p p を使った p ( A ) e 0 p(A)\boldsymbol{e}_0 p ( A ) e 0 の最小値になります。こう言い換えると、固有値の上で小さな値をとる多項式を 1 つ見つけるだけで、誤差の上界が得られます。最適性を多項式の言葉に翻訳します。x ∈ x 0 + K k ( A , r 0 ) \boldsymbol{x} \in \boldsymbol{x}_0 + \mathcal{K}_k(A, \boldsymbol{r}_0) x ∈ x 0 + K k ( A , r 0 ) は x = x 0 + q ( A ) r 0 \boldsymbol{x} = \boldsymbol{x}_0 + q(A)\boldsymbol{r}_0 x = x 0 + q ( A ) r 0 (q ∈ P k − 1 q \in \mathcal{P}_{k-1} q ∈ P k − 1 )と書け、r 0 = − A e 0 \boldsymbol{r}_0 = -A\boldsymbol{e}_0 r 0 = − A e 0 なので
x − x ∗ = e 0 − q ( A ) A e 0 = p ( A ) e 0 , p ( t ) = 1 − t q ( 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) x − x ∗ = e 0 − q ( A ) A e 0 = p ( A ) e 0 , p ( t ) = 1 − tq ( t )
です。q q q が P k − 1 \mathcal{P}_{k-1} P k − 1 を動くとき、p p p は p ( 0 ) = 1 p(0) = 1 p ( 0 ) = 1 を満たす P k \mathcal{P}_k P k の元全体を動きます。
定理 5.4 (共役勾配法の収束の評価 ) ✓
A A A の最大・最小の固有値を λ max \lambda_{\max} λ m a x , λ min \lambda_{\min} λ m i n 、κ = λ max / λ min \kappa = \lambda_{\max}/\lambda_{\min} κ = λ m a x / λ m i n とする。共役勾配法の誤差 e k = x k − x ∗ \boldsymbol{e}_k = \boldsymbol{x}_k - \boldsymbol{x}^{*} e k = x k − x ∗ は(停止した後は e k = 0 \boldsymbol{e}_k = \boldsymbol{0} e k = 0 とみなして)
∥ e k ∥ A = min p ∈ P k , p ( 0 ) = 1 ∥ p ( A ) e 0 ∥ A ≤ min p ∈ P k , p ( 0 ) = 1 max λ ∈ σ ( A ) ∣ p ( λ ) ∣ ∥ e 0 ∥ A ≤ 2 ( κ − 1 κ + 1 ) k ∥ e 0 ∥ 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 ∥ e k ∥ A = p ∈ P k , p ( 0 ) = 1 min ∥ p ( A ) e 0 ∥ A ≤ p ∈ P k , p ( 0 ) = 1 min λ ∈ σ ( A ) max ∣ p ( λ ) ∣ ∥ e 0 ∥ A ≤ 2 ( κ + 1 κ − 1 ) k ∥ e 0 ∥ A を満たす。ここで σ ( A ) \sigma(A) σ ( A ) は A A A の固有値の集合である。
証明(定理 5.4) 停止した後は e k = 0 \boldsymbol{e}_k = \boldsymbol{0} e k = 0 なので、停止していない k k k を考えます。等号は 定理 5.2 の 4 と上の翻訳から従います。e 0 = ∑ i c i u i \boldsymbol{e}_0 = \sum_ic_i\boldsymbol{u}_i e 0 = ∑ i c i u i と正規直交な固有ベクトルで展開すると(定理 4.2[スペクトル定理] )
∥ p ( A ) e 0 ∥ A 2 = ∑ i λ i ∣ p ( λ i ) ∣ 2 ∣ c i ∣ 2 ≤ max i ∣ p ( λ i ) ∣ 2 ∑ i λ i ∣ c i ∣ 2 = max i ∣ p ( λ i ) ∣ 2 ∥ e 0 ∥ A 2 \|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 ∥ p ( A ) e 0 ∥ A 2 = i ∑ λ i ∣ p ( λ i ) ∣ 2 ∣ c i ∣ 2 ≤ i max ∣ p ( λ i ) ∣ 2 i ∑ λ i ∣ c i ∣ 2 = i max ∣ p ( λ i ) ∣ 2 ∥ e 0 ∥ A 2 で、2 つ目の不等号を得ます。
κ = 1 \kappa = 1 κ = 1 なら A = λ max I A = \lambda_{\max}I A = λ m a x I で、p ( t ) = 1 − t / λ max p(t) = 1 - t/\lambda_{\max} p ( t ) = 1 − t / λ m a x が σ ( A ) \sigma(A) σ ( A ) 上で 0 0 0 になるので主張は明らかです。κ > 1 \kappa > 1 κ > 1 とし、
p ( t ) = T k ( ℓ ( t ) ) T k ( ℓ ( 0 ) ) , ℓ ( t ) = λ max + λ min − 2 t λ 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}} p ( t ) = T k ( ℓ ( 0 )) T k ( ℓ ( t )) , ℓ ( t ) = λ m a x − λ m i n λ m a x + λ m i n − 2 t とおきます。ℓ \ell ℓ は [ λ min , λ max ] [\lambda_{\min}, \lambda_{\max}] [ λ m i n , λ m a x ] を [ − 1 , 1 ] [-1, 1] [ − 1 , 1 ] に写し、ℓ ( 0 ) = ( κ + 1 ) / ( κ − 1 ) > 1 \ell(0) = (\kappa + 1)/(\kappa - 1) > 1 ℓ ( 0 ) = ( κ + 1 ) / ( κ − 1 ) > 1 です。T k ( ℓ ( 0 ) ) > 0 T_k(\ell(0)) > 0 T k ( ℓ ( 0 )) > 0 (補題 6.4[多項式補間] )なので p p p は定義でき、p ∈ P k p \in \mathcal{P}_k p ∈ P k 、p ( 0 ) = 1 p(0) = 1 p ( 0 ) = 1 です。固有値 λ \lambda λ では ℓ ( λ ) = cos ϕ \ell(\lambda) = \cos\phi ℓ ( λ ) = cos ϕ と書けて ∣ T k ( ℓ ( λ ) ) ∣ = ∣ cos k ϕ ∣ ≤ 1 |T_k(\ell(\lambda))| = |\cos k\phi| \le 1 ∣ T k ( ℓ ( λ )) ∣ = ∣ cos k ϕ ∣ ≤ 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} ℓ ( 0 ) + ℓ ( 0 ) 2 − 1 = κ − 1 κ + 1 + 2 κ = ( κ − 1 ) ( κ + 1 ) ( κ + 1 ) 2 = κ − 1 κ + 1 と 補題 6.4[多項式補間] から T k ( ℓ ( 0 ) ) ≥ 1 2 ( ( κ + 1 ) / ( κ − 1 ) ) k T_k(\ell(0)) \ge \tfrac12\bigl((\sqrt{\kappa} + 1)/(\sqrt{\kappa} - 1)\bigr)^k T k ( ℓ ( 0 )) ≥ 2 1 ( ( κ + 1 ) / ( κ − 1 ) ) 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 max λ ∈ σ ( A ) ∣ p ( λ ) ∣ ≤ 2 ( ( κ − 1 ) / ( κ + 1 ) ) k です。
∎
1 0 0 1 = λ_min 5.5 10 = λ_max t p(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} ( κ − 1 ) / ( κ + 1 ) ≈ 1 − 2/ κ なので、誤差を ε \varepsilon ε 倍にする反復回数は約 1 2 κ ln ( 2 / ε ) \tfrac12\sqrt{\kappa}\ln(2/\varepsilon) 2 1 κ ln ( 2/ ε ) です。2 次元の離散 Laplace 行列では κ ≈ 4 / ( π 2 h 2 ) \kappa \approx 4/(\pi^2h^2) κ ≈ 4/ ( π 2 h 2 ) なので回数は h − 1 h^{-1} h − 1 に比例し、最適 SOR 法と同じ次数を、パラメータの推定なしで実現します。評価は固有値の区間 だけを使うので、固有値がいくつかの塊に集まっていれば、実際の収束はずっと速くなります(例 5.6 )。
命題 5.5 (最急降下法の収束 ) ✓
最急降下法 x k + 1 = x k + α k r k \boldsymbol{x}_{k+1} = \boldsymbol{x}_k + \alpha_k\boldsymbol{r}_k x k + 1 = x k + α k r k 、α k = r k ∗ r k / r k ∗ A r k \alpha_k = \boldsymbol{r}_k^{*}\boldsymbol{r}_k/\boldsymbol{r}_k^{*}A\boldsymbol{r}_k α k = r k ∗ r k / r k ∗ A r k (r k = b − A x k ≠ 0 \boldsymbol{r}_k = \boldsymbol{b} - A\boldsymbol{x}_k \ne \boldsymbol{0} r k = b − A x k = 0 )の誤差は
∥ e k + 1 ∥ A ≤ κ − 1 κ + 1 ∥ e k ∥ A \|\boldsymbol{e}_{k+1}\|_A \le \frac{\kappa - 1}{\kappa + 1}\|\boldsymbol{e}_k\|_A ∥ e k + 1 ∥ A ≤ κ + 1 κ − 1 ∥ e k ∥ A を満たす。
証明(命題 5.5) r = r k \boldsymbol{r} = \boldsymbol{r}_k r = r k 、e = e k \boldsymbol{e} = \boldsymbol{e}_k e = e k と書くと A e = − r A\boldsymbol{e} = -\boldsymbol{r} A e = − r 、e k + 1 = e + α k r \boldsymbol{e}_{k+1} = \boldsymbol{e} + \alpha_k\boldsymbol{r} e k + 1 = e + α k r で、
∥ e k + 1 ∥ A 2 = e ∗ A e + 2 α k Re ( r ∗ A e ) + α k 2 r ∗ A r = ∥ e ∥ A 2 − 2 α k r ∗ r + α k 2 r ∗ A r = ∥ e ∥ A 2 − ( r ∗ r ) 2 r ∗ A r \|\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 k + 1 ∥ A 2 = e ∗ A e + 2 α k Re ( r ∗ A e ) + α k 2 r ∗ A r = ∥ e ∥ A 2 − 2 α k r ∗ r + α k 2 r ∗ A r = ∥ e ∥ A 2 − r ∗ A r ( r ∗ r ) 2 です。∥ e ∥ A 2 = e ∗ A e = r ∗ A − 1 r \|\boldsymbol{e}\|_A^2 = \boldsymbol{e}^{*}A\boldsymbol{e} = \boldsymbol{r}^{*}A^{-1}\boldsymbol{r} ∥ e ∥ A 2 = e ∗ A e = r ∗ A − 1 r なので
∥ e k + 1 ∥ A 2 ∥ e ∥ A 2 = 1 − ( r ∗ r ) 2 ( r ∗ A r ) ( r ∗ A − 1 r ) ≤ 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 ∥ e ∥ A 2 ∥ e k + 1 ∥ A 2 = 1 − ( r ∗ A r ) ( r ∗ A − 1 r ) ( r ∗ r ) 2 ≤ 1 − ( λ m a x + λ m i n ) 2 4 λ m a x λ m i n = ( λ m a x + λ m i n λ m a x − λ m i n ) 2 です。不等号は Kantorovich の不等式(定理 8.1[行列の固有値評価と不等式] )を m = λ min m = \lambda_{\min} m = λ m i n , M = λ max M = \lambda_{\max} M = λ m a x で使いました。
∎
最急降下法は 1 回ごとに最適な歩幅をとりますが、過去の方向を忘れるので、反復回数は κ \kappa κ に比例します。共役勾配法は過去の方向すべてと A A A 共役な方向をとることで、K k \mathcal{K}_k K k 全体での最適化を 1 本の漸化式で実現し、回数を κ \sqrt{\kappa} κ に下げています。
例 5.6 (固有値が塊に集まると速く終わる )
固有値が 1 1 1 の近くの s s s 個の値と、[ 100 , 101 ] [100, 101] [ 100 , 101 ] の中の値だけからなるとします。定理 5.4 の最後の評価は κ ≈ 101 \kappa \approx 101 κ ≈ 101 で、1 回あたり ( 101 − 1 ) / ( 101 + 1 ) ≈ 0.82 (\sqrt{101} - 1)/(\sqrt{101} + 1) \approx 0.82 ( 101 − 1 ) / ( 101 + 1 ) ≈ 0.82 倍しか保証しません。しかし真ん中の評価で p ( t ) = ∏ i = 1 s ( 1 − t / μ i ) ⋅ p ~ ( t ) p(t) = \prod_{i=1}^{s}(1 - t/\mu_i)\cdot\tilde{p}(t) p ( t ) = ∏ i = 1 s ( 1 − t / μ i ) ⋅ p ~ ( t ) (μ i \mu_i μ i は小さい固有値、p ~ \tilde{p} p ~ は [ 100 , 101 ] [100, 101] [ 100 , 101 ] に合わせた Chebyshev 多項式で p ~ ( 0 ) = 1 \tilde{p}(0) = 1 p ~ ( 0 ) = 1 )を選ぶと、p p p は小さい固有値で 0 0 0 、[ 100 , 101 ] [100, 101] [ 100 , 101 ] の上では ∣ p ~ ∣ ⋅ ∏ i ∣ 1 − t / μ i ∣ |\tilde{p}| \cdot\prod_i|1 - t/\mu_i| ∣ p ~ ∣ ⋅ ∏ i ∣1 − t / μ i ∣ 以下です。[ 100 , 101 ] [100,101] [ 100 , 101 ] の条件数は 1.01 1.01 1.01 なので p ~ \tilde{p} p ~ は 1 回あたり約 ( 1.01 − 1 ) / ( 1.01 + 1 ) ≈ 0.0025 (\sqrt{1.01} - 1)/(\sqrt{1.01} + 1) \approx 0.0025 ( 1.01 − 1 ) / ( 1.01 + 1 ) ≈ 0.0025 倍で減り、s s s 回の「準備」のあとは非常に速く収束します(μ i ≈ 1 \mu_i \approx 1 μ i ≈ 1 なら [ 100 , 101 ] [100, 101] [ 100 , 101 ] の上で ∏ i ∣ 1 − t / μ i ∣ \prod_i|1 - t/\mu_i| ∏ i ∣1 − t / μ i ∣ は約 100 s 100^s 10 0 s なので、その分を取り返す数回の遅れは生じます)。前処理の目的は、条件数を下げることに加えて、固有値をこのような塊に集めることです。
次のコードは、2 次元の離散 Laplace 方程式(右辺は f = 1 f = 1 f = 1 、x 0 = 0 \boldsymbol{x}_0 = \boldsymbol{0} x 0 = 0 )を scipy.sparse.linalg.cg で相対残差 10 − 8 10^{-8} 1 0 − 8 まで解いた反復回数です。κ \sqrt{\kappa} κ は閉じた形の固有値 8 sin 2 ( π h / 2 ) 8\sin^2(\pi h/2) 8 sin 2 ( π h /2 ) と 8 cos 2 ( π h / 2 ) 8\cos^2(\pi h/2) 8 cos 2 ( π h /2 ) から計算しました。「予測」は 定理 5.4 から相対残差 10 − 8 10^{-8} 1 0 − 8 を保証する回数 ln ( 2 κ ⋅ 10 8 ) / ln ( ( κ + 1 ) / ( κ − 1 ) ) \ln(2\sqrt{\kappa}\cdot10^{8})/\ln\bigl((\sqrt{\kappa}+1)/(\sqrt{\kappa}-1)\bigr) ln ( 2 κ ⋅ 1 0 8 ) / ln ( ( κ + 1 ) / ( κ − 1 ) ) です(∥ r ∥ ≤ λ max ∥ e ∥ A \|\boldsymbol{r}\| \le \sqrt{\lambda_{\max}}\|\boldsymbol{e}\|_A ∥ r ∥ ≤ λ m a x ∥ e ∥ A 、∥ e ∥ A ≤ ∥ r ∥ / λ min \|\boldsymbol{e}\|_A \le \|\boldsymbol{r}\|/\sqrt{\lambda_{\min}} ∥ e ∥ A ≤ ∥ r ∥/ λ m i n で残差に換算した分 κ \sqrt{\kappa} κ がかかります)。
# Python 3.12.10 / NumPy 2.5.2 / SciPy 1.18.1(x86-64, OpenBLAS)
import scipy.sparse as sp
from scipy.sparse.linalg import cg
T = sp. diags ( [ - 1.0 , 2.0 , - 1.0 ], [ - 1 , 0 , 1 ], shape = (m, m) ,
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 ):
b = np. ones ( m * m ) * h ** 2
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 )
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 } "
1/h 反復 sqrt(kappa) 反復/sqrt(kappa) 予測
256 468 162.97 2.872 1973
検算. (a) κ \sqrt{\kappa} κ は閉じた形の固有値(ノルムの章 の三重対角 Toeplitz 行列の固有値の和)から計算し、κ ≈ 2 / ( π h ) \sqrt{\kappa} \approx 2/(\pi h) κ ≈ 2/ ( π h ) (h = 1 / 256 h = 1/256 h = 1/256 で 162.97 162.97 162.97 対 162.97 162.97 162.97 )とも合います。(b) 各行で assert により、返された解の相対残差が実際に 10 − 8 10^{-8} 1 0 − 8 以下であることを確かめています。(c) 格子幅を半分にするごとに反復回数は 2.03 , 2.01 , 1.97 2.03, 2.01, 1.97 2.03 , 2.01 , 1.97 倍で、反復回数 / κ /\sqrt{\kappa} / κ はほぼ一定(約 2.9 2.9 2.9 )です。定理 5.4 の予言どおり κ ∝ h − 1 \sqrt{\kappa} \propto h^{-1} κ ∝ h − 1 に比例します。実際の回数は評価から保証される回数の 4 分の 1 程度で、評価は上界として成り立っています。定常反復法の章 の最適 SOR 法(h = 1 / 64 h = 1/64 h = 1/64 で 257 回)と比べても半分以下です。
定理 6.1 (共役勾配法と Lanczos 法の関係 ) ✓
共役勾配法が k k k 回目まで停止しないとし、b \boldsymbol{b} b の代わりに r 0 \boldsymbol{r}_0 r 0 から始めた Lanczos 法(系 3.3 )の Q k Q_k Q k , T k T_k T k を考える。このとき
各 j < k j < k j < k について、r j \boldsymbol{r}_j r j は q j + 1 \boldsymbol{q}_{j+1} q j + 1 の定数倍で、∥ r j ∥ = ∣ q j + 1 ∗ r j ∣ \|\boldsymbol{r}_j\| = |\boldsymbol{q}_{j+1}^{*}\boldsymbol{r}_j| ∥ r j ∥ = ∣ q j + 1 ∗ r j ∣ である。
T k T_k T k は正定値で、x k = x 0 + Q k y k \boldsymbol{x}_k = \boldsymbol{x}_0 + Q_k\boldsymbol{y}_k x k = x 0 + Q k y k 、T k y k = ∥ r 0 ∥ e 1 T_k\boldsymbol{y}_k = \|\boldsymbol{r}_0\|\boldsymbol{e}_1 T k y k = ∥ r 0 ∥ e 1 である(e 1 \boldsymbol{e}_1 e 1 は第 1 単位ベクトル)。
証明(定理 6.1)
定理 5.2 の 3 から K k ( A , r 0 ) \mathcal{K}_k(A, \boldsymbol{r}_0) K k ( A , r 0 ) の次元は k k k なので、r 0 \boldsymbol{r}_0 r 0 の次数は k k k 以上で、Lanczos 法は k k k 本の q j \boldsymbol{q}_j q j を作ります(定理 3.2 )。r j ∈ K j + 1 \boldsymbol{r}_j \in \mathcal{K}_{j+1} r j ∈ K j + 1 で、r j ⊥ K j \boldsymbol{r}_j \perp \mathcal{K}_j r j ⊥ K j (定理 5.2 の 2・3)です。K j + 1 \mathcal{K}_{j+1} K j + 1 の中で K j = span { q 1 , … , q j } \mathcal{K}_j = \operatorname{span}\{\boldsymbol{q}_1, \ldots, \boldsymbol{q}_j\} K j = span { q 1 , … , q j } に直交するベクトルは q j + 1 \boldsymbol{q}_{j+1} q j + 1 の定数倍だけなので(q 1 , … , q j + 1 \boldsymbol{q}_1, \ldots, \boldsymbol{q}_{j+1} q 1 , … , q j + 1 は K j + 1 \mathcal{K}_{j+1} K j + 1 の正規直交基底)、r j = c q j + 1 \boldsymbol{r}_j = c\,\boldsymbol{q}_{j+1} r j = c q j + 1 で、∣ c ∣ = ∥ r j ∥ |c| = \|\boldsymbol{r}_j\| ∣ c ∣ = ∥ r j ∥ です。
T k = Q k ∗ A Q k T_k = Q_k^{*}AQ_k T k = Q k ∗ A Q k (定理 3.2 の 3)で、y ≠ 0 \boldsymbol{y} \ne \boldsymbol{0} y = 0 なら y ∗ T k y = ( Q k y ) ∗ A ( Q k y ) > 0 \boldsymbol{y}^{*}T_k\boldsymbol{y} = (Q_k\boldsymbol{y})^{*}A(Q_k\boldsymbol{y}) > 0 y ∗ T k y = ( Q k y ) ∗ A ( Q k y ) > 0 なので正定値、とくに正則です。x k ∈ x 0 + K k \boldsymbol{x}_k \in \boldsymbol{x}_0 + \mathcal{K}_k x k ∈ x 0 + K k なので x k = x 0 + Q k y k \boldsymbol{x}_k = \boldsymbol{x}_0 + Q_k\boldsymbol{y}_k x k = x 0 + Q k y k と書け、r k = r 0 − A Q k y k ⊥ K k \boldsymbol{r}_k = \boldsymbol{r}_0 - AQ_k\boldsymbol{y}_k \perp \mathcal{K}_k r k = r 0 − A Q k y k ⊥ K k (定理 5.2 の 4)から Q k ∗ r 0 − T k y k = 0 Q_k^{*}\boldsymbol{r}_0 - T_k\boldsymbol{y}_k = \boldsymbol{0} Q k ∗ r 0 − T k y k = 0 です。q 1 = r 0 / ∥ r 0 ∥ \boldsymbol{q}_1 = \boldsymbol{r}_0/\|\boldsymbol{r}_0\| q 1 = r 0 /∥ r 0 ∥ と直交性から Q k ∗ r 0 = ∥ r 0 ∥ e 1 Q_k^{*}\boldsymbol{r}_0 = \|\boldsymbol{r}_0\|\boldsymbol{e}_1 Q k ∗ r 0 = ∥ r 0 ∥ e 1 です。
∎
したがって、共役勾配法を走らせながら α k \alpha_k α k , β k \beta_k β k から T k T_k T k を組み立てれば、Ritz 値(A A A の端の固有値の近似)が副産物として得られます。条件数の推定や停止判定に使われる技法です。逆に、Lanczos 法で作った T k T_k T k の小さな系 T k y = ∥ r 0 ∥ e 1 T_k\boldsymbol{y} = \|\boldsymbol{r}_0\|\boldsymbol{e}_1 T k y = ∥ r 0 ∥ e 1 を解けば共役勾配法の近似解が得られます。
前処理は M − 1 A M^{-1}A M − 1 A の条件数を小さくするための変形ですが、M − 1 A M^{-1}A M − 1 A はふつう Hermite にならず、そのままでは共役勾配法を使いにくくなります。そこで M M M の平方根 M 1 / 2 M^{1/2} M 1/2 で両側から挟んだ M − 1 / 2 A M − 1 / 2 M^{-1/2}AM^{-1/2} M − 1/2 A M − 1/2 を考えます。これは正定値 Hermite のままで、M − 1 A M^{-1}A M − 1 A と相似なので固有値も同じです。次の定理は、この変形を実際には行わず M − 1 M^{-1} M − 1 を掛けるだけの反復が、変形した行列への共役勾配法と一致することを示します。
定理 6.2 (前処理つき共役勾配法 ) ✓
M M M を正定値 Hermite 行列とし、M 1 / 2 M^{1/2} M 1/2 をその正定値な平方根とする。前処理つき共役勾配法 を、r 0 = b − A x 0 \boldsymbol{r}_0 = \boldsymbol{b} - A\boldsymbol{x}_0 r 0 = b − A x 0 、z 0 = M − 1 r 0 \boldsymbol{z}_0 = M^{-1}\boldsymbol{r}_0 z 0 = M − 1 r 0 、p 0 = z 0 \boldsymbol{p}_0 = \boldsymbol{z}_0 p 0 = z 0 とし、
α k = r k ∗ z k p k ∗ A p k , x k + 1 = x k + α k p k , r k + 1 = r k − α k A p k , z k + 1 = M − 1 r k + 1 , β k = r k + 1 ∗ z k + 1 r k ∗ z k , p k + 1 = z k + 1 + β k p k \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} α k z k + 1 = p k ∗ A p k r k ∗ z k , = M − 1 r k + 1 , x k + 1 β k = x k + α k p k , = r k ∗ z k r k + 1 ∗ z k + 1 , r k + 1 p k + 1 = r k − α k A p k , = z k + 1 + β k p k で定める。A ^ = M − 1 / 2 A M − 1 / 2 \hat{A} = M^{-1/2}AM^{-1/2} A ^ = M − 1/2 A M − 1/2 、b ^ = M − 1 / 2 b \hat{\boldsymbol{b}} = M^{-1/2}\boldsymbol{b} b ^ = M − 1/2 b とおくと、x ^ k = M 1 / 2 x k \hat{\boldsymbol{x}}_k = M^{1/2}\boldsymbol{x}_k x ^ k = M 1/2 x k は A ^ x ^ = b ^ \hat{A}\hat{\boldsymbol{x}} = \hat{\boldsymbol{b}} A ^ x ^ = b ^ に x ^ 0 = M 1 / 2 x 0 \hat{\boldsymbol{x}}_0 = M^{1/2}\boldsymbol{x}_0 x ^ 0 = M 1/2 x 0 から共役勾配法を使った反復と一致する。とくに、M − 1 A M^{-1}A M − 1 A の固有値(正の実数)の最大と最小の比を κ ^ \hat{\kappa} κ ^ として
∥ x k − x ∗ ∥ A ≤ 2 ( κ ^ − 1 κ ^ + 1 ) k ∥ x 0 − 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 . ∥ x k − x ∗ ∥ A ≤ 2 ( κ ^ + 1 κ ^ − 1 ) k ∥ x 0 − x ∗ ∥ A .
証明(定理 6.2) 平方根. スペクトル定理(定理 4.2[スペクトル定理] )で M = U Λ U ∗ M = U\Lambda U^{*} M = U Λ U ∗ と書くと、正定値性から Λ \Lambda Λ の対角成分は正です(定理 6.3[スペクトル定理] の 2)。M 1 / 2 = U Λ 1 / 2 U ∗ M^{1/2} = U\Lambda^{1/2}U^{*} M 1/2 = U Λ 1/2 U ∗ は正定値 Hermite で ( M 1 / 2 ) 2 = M (M^{1/2})^2 = M ( M 1/2 ) 2 = M 、逆行列は M − 1 / 2 = U Λ − 1 / 2 U ∗ M^{-1/2} = U\Lambda^{-1/2}U^{*} M − 1/2 = U Λ − 1/2 U ∗ です。A ^ \hat{A} A ^ は Hermite で、y ≠ 0 \boldsymbol{y} \ne \boldsymbol{0} y = 0 なら y ∗ A ^ y = ( M − 1 / 2 y ) ∗ A ( M − 1 / 2 y ) > 0 \boldsymbol{y}^{*}\hat{A}\boldsymbol{y} = (M^{-1/2}\boldsymbol{y})^{*}A(M^{-1/2}\boldsymbol{y}) > 0 y ∗ A ^ y = ( M − 1/2 y ) ∗ A ( M − 1/2 y ) > 0 なので正定値です。
反復の対応. r ^ k = M − 1 / 2 r k \hat{\boldsymbol{r}}_k = M^{-1/2}\boldsymbol{r}_k r ^ k = M − 1/2 r k 、p ^ k = M 1 / 2 p k \hat{\boldsymbol{p}}_k = M^{1/2}\boldsymbol{p}_k p ^ k = M 1/2 p k とおき、これらが A ^ \hat{A} A ^ の共役勾配法の量であることを k k k についての帰納法で示します。r ^ 0 = M − 1 / 2 ( b − A x 0 ) = 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 r ^ 0 = M − 1/2 ( b − A x 0 ) = b ^ − A ^ x ^ 0 、p ^ 0 = M 1 / 2 M − 1 r 0 = r ^ 0 \hat{\boldsymbol{p}}_0 = M^{1/2}M^{-1}\boldsymbol{r}_0 = \hat{\boldsymbol{r}}_0 p ^ 0 = M 1/2 M − 1 r 0 = r ^ 0 です。各段で
r ^ k ∗ r ^ k = r k ∗ M − 1 r k = r k ∗ z k , p ^ k ∗ A ^ p ^ k = p k ∗ A p k \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 r ^ k ∗ r ^ k = r k ∗ M − 1 r k = r k ∗ z k , p ^ k ∗ A ^ p ^ k = p k ∗ A p k なので α k \alpha_k α k , β k \beta_k β k は両方の算法で等しく、x ^ k + 1 = x ^ k + α k p ^ k \hat{\boldsymbol{x}}_{k+1} = \hat{\boldsymbol{x}}_k + \alpha_k\hat{\boldsymbol{p}}_k x ^ k + 1 = x ^ k + α k p ^ k 、r ^ k + 1 = M − 1 / 2 ( r k − α k A p k ) = r ^ k − α k A ^ 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 r ^ k + 1 = M − 1/2 ( r k − α k A p k ) = r ^ k − α k A ^ p ^ k 、p ^ k + 1 = M 1 / 2 ( M − 1 r k + 1 + β k p k ) = r ^ k + 1 + β k p ^ 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 p ^ k + 1 = M 1/2 ( M − 1 r k + 1 + β k p k ) = r ^ k + 1 + β k p ^ k です。これは A ^ \hat{A} A ^ に対する 定義 5.1 そのものです。
評価. x ^ ∗ = M 1 / 2 x ∗ \hat{\boldsymbol{x}}^{*} = M^{1/2}\boldsymbol{x}^{*} x ^ ∗ = M 1/2 x ∗ は A ^ x ^ ∗ = b ^ \hat{A}\hat{\boldsymbol{x}}^{*} = \hat{\boldsymbol{b}} A ^ x ^ ∗ = b ^ の解で、e ^ = M 1 / 2 e \hat{\boldsymbol{e}} = M^{1/2}\boldsymbol{e} e ^ = M 1/2 e について e ^ ∗ A ^ e ^ = e ∗ A e \hat{\boldsymbol{e}}^{*}\hat{A}\hat{\boldsymbol{e}} = \boldsymbol{e}^{*}A\boldsymbol{e} e ^ ∗ A ^ e ^ = e ∗ A e です。M − 1 A = M − 1 / 2 A ^ M 1 / 2 M^{-1}A = M^{-1/2}\hat{A}M^{1/2} M − 1 A = M − 1/2 A ^ M 1/2 は A ^ \hat{A} A ^ と相似なので固有値が等しく、それは A ^ \hat{A} A ^ の固有値(正の実数)です。定理 5.4 を A ^ \hat{A} A ^ に使えば主張を得ます。
∎
実装では M 1 / 2 M^{1/2} M 1/2 を作る必要はなく、毎回 M z = r M\boldsymbol{z} = \boldsymbol{r} M z = r を解くだけです。M M M は「A A A に近く、M z = r M\boldsymbol{z} = \boldsymbol{r} M z = r が安く解ける」ように選びます。定常反復法の章 の SSOR 法の分割行列や、不完全 Cholesky 分解がその代表で、次の Krylov 部分空間法 II の章で扱います。
研究でよく使う scipy.sparse.linalg.eigsh は、ARPACK の陰的再開 Lanczos 法 を呼びます。Lanczos 法は端の固有値ほど速く収束する(定理 4.3 )ので、中ほどや最小の固有値が欲しいときはシフト反転 、すなわち ( A − σ I ) − 1 (A - \sigma I)^{-1} ( A − σ I ) − 1 に Lanczos 法を使います。σ \sigma σ に近い固有値 λ \lambda λ は ( A − σ I ) − 1 (A - \sigma I)^{-1} ( A − σ I ) − 1 では絶対値の大きい固有値 1 / ( λ − σ ) 1/(\lambda - \sigma) 1/ ( λ − σ ) になり、しかも互いによく分離されます(冪乗法の章 の逆反復と同じ考え方)。( A − σ I ) − 1 (A - \sigma I)^{-1} ( A − σ I ) − 1 との積は、疎な LU 分解を 1 回作っておいて毎回代入で計算します。
# Python 3.12.10 / NumPy 2.5.2 / SciPy 1.18.1(x86-64, OpenBLAS)/乱数種 20261006
import scipy.sparse as sp
from scipy.sparse.linalg import eigsh
m = 100 # 100×100 格子、h = 1/101
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 )
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 )
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
検算. (a) 2 次元の離散 Laplace 行列の固有値は τ j + τ k \tau_j + \tau_k τ j + τ k 、τ j = 4 sin 2 ( j π h / 2 ) \tau_j = 4\sin^2(j\pi h/2) τ j = 4 sin 2 ( j π h /2 ) です(定常反復法の章 のモデル問題の命題の証明と同じ計算。2 − 2 cos 2 - 2\cos 2 − 2 cos ではなく 4 sin 2 4\sin^2 4 sin 2 の形で計算して桁落ちを避けています)。小さい順に ( 1 , 1 ) (1,1) ( 1 , 1 ) 、( 1 , 2 ) (1,2) ( 1 , 2 ) と ( 2 , 1 ) (2,1) ( 2 , 1 ) の 2 重、( 2 , 2 ) (2,2) ( 2 , 2 ) 、( 1 , 3 ) (1,3) ( 1 , 3 ) と ( 3 , 1 ) (3,1) ( 3 , 1 ) の片方、が並びます。(b) eigsh の結果は 10 桁一致し、相対誤差は 10 − 12 10^{-12} 1 0 − 12 未満です。2 重の固有値も 2 つとも求まっています。(c) σ = 0 \sigma = 0 σ = 0 のシフト反転では、最小の固有値 1.9 × 10 − 3 1.9\times10^{-3} 1.9 × 1 0 − 3 と次の固有値 4.8 × 10 − 3 4.8\times10^{-3} 4.8 × 1 0 − 3 が A − 1 A^{-1} A − 1 では 517 517 517 と 207 207 207 になります。定理 4.3 の隔たりの比は、A A A のまま最小の固有値を狙うと ( 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} ( 4.84 − 1.93 ) × 1 0 − 3 / ( 8.00 − 0.005 ) ≈ 3.6 × 1 0 − 4 ですが、A − 1 A^{-1} A − 1 の最大の固有値では ( 517 − 207 ) / 207 ≈ 1.5 (517 - 207)/207 \approx 1.5 ( 517 − 207 ) /207 ≈ 1.5 と 4 桁改善します。
演習 8.1 易
正定値行列で κ = 10 4 \kappa = 10^4 κ = 1 0 4 とする。誤差の A A A ノルムを 10 − 6 10^{-6} 1 0 − 6 倍にするのに十分な反復回数を、共役勾配法(定理 5.4 )と最急降下法(命題 5.5 )の評価から求めよ。
解答 共役勾配法は 2 q k ≤ 10 − 6 2q^k \le 10^{-6} 2 q k ≤ 1 0 − 6 、q = ( 100 − 1 ) / ( 100 + 1 ) q = (100 - 1)/(100 + 1) q = ( 100 − 1 ) / ( 100 + 1 ) から k ≥ ln ( 2 × 10 6 ) / ln ( 101 / 99 ) ≈ 14.509 / 0.02000 ≈ 725.4 k \ge \ln(2\times10^{6})/\ln(101/99) \approx 14.509/0.02000 \approx 725.4 k ≥ ln ( 2 × 1 0 6 ) / ln ( 101/99 ) ≈ 14.509/0.02000 ≈ 725.4 で、726 726 726 回で十分です。最急降下法は ( ( κ − 1 ) / ( κ + 1 ) ) k ≤ 10 − 6 \bigl((\kappa - 1)/(\kappa + 1)\bigr)^k \le 10^{-6} ( ( κ − 1 ) / ( κ + 1 ) ) k ≤ 1 0 − 6 から k ≥ ln 10 6 / ln ( 10001 / 9999 ) ≈ 13.816 / ( 2.000 × 10 − 4 ) ≈ 6.9 × 10 4 k \ge \ln 10^{6}/\ln(10001/9999) \approx 13.816/(2.000\times10^{-4}) \approx 6.9\times10^{4} k ≥ ln 1 0 6 / ln ( 10001/9999 ) ≈ 13.816/ ( 2.000 × 1 0 − 4 ) ≈ 6.9 × 1 0 4 回です。比は約 κ \sqrt{\kappa} κ 倍(ここでは約 95 倍)です。
演習 8.2 標準
A = I + B A = I + B A = I + B で、B B B は階数 r r r の半正定値 Hermite 行列とする。共役勾配法は厳密な算術では高々 r + 1 r + 1 r + 1 回で止まることを示せ。
解答 B B B の 0 でない固有値は高々 r r r 個(重複を込めて)なので、A A A の固有値は 1 1 1 と、高々 r r r 個の 1 + μ i 1 + \mu_i 1 + μ i (μ i > 0 \mu_i > 0 μ i > 0 )です。相異なる固有値の個数は高々 r + 1 r + 1 r + 1 なので、系 5.3 から共役勾配法は高々 r + 1 r + 1 r + 1 回で止まります。多項式で言えば、p ( t ) = ( 1 − t ) ∏ i ( 1 − t / ( 1 + μ i ) ) p(t) = (1 - t)\prod_i(1 - t/(1 + \mu_i)) p ( t ) = ( 1 − t ) ∏ i ( 1 − t / ( 1 + μ i )) が p ( 0 ) = 1 p(0) = 1 p ( 0 ) = 1 を満たし A A A のすべての固有値で 0 0 0 になるので、定理 5.4 の真ん中の評価が 0 0 0 になります。
演習 8.3 標準
A = diag ( 3 , 2 , 1 ) A = \operatorname{diag}(3, 2, 1) A = diag ( 3 , 2 , 1 ) 、b = ( 1 , 1 , 1 ) T \boldsymbol{b} = (1, 1, 1)^{\mathsf{T}} b = ( 1 , 1 , 1 ) T として Lanczos 法を 2 段行い、T 2 T_2 T 2 と Ritz 値 θ 1 ( 2 ) , θ 2 ( 2 ) \theta_1^{(2)}, \theta_2^{(2)} θ 1 ( 2 ) , θ 2 ( 2 ) を求めよ。定理 4.2 の 2 の交互性と、定理 4.3 の評価が成り立っていることを確かめよ。
解答 q 1 = ( 1 , 1 , 1 ) T / 3 \boldsymbol{q}_1 = (1,1,1)^{\mathsf{T}}/\sqrt{3} q 1 = ( 1 , 1 , 1 ) T / 3 、α 1 = q 1 T A q 1 = 2 \alpha_1 = \boldsymbol{q}_1^{\mathsf{T}}A\boldsymbol{q}_1 = 2 α 1 = q 1 T A q 1 = 2 、A q 1 − 2 q 1 = ( 1 , 0 , − 1 ) T / 3 A\boldsymbol{q}_1 - 2\boldsymbol{q}_1 = (1, 0, -1)^{\mathsf{T}}/\sqrt{3} A q 1 − 2 q 1 = ( 1 , 0 , − 1 ) T / 3 なので β 1 = 2 / 3 \beta_1 = \sqrt{2/3} β 1 = 2/3 、q 2 = ( 1 , 0 , − 1 ) T / 2 \boldsymbol{q}_2 = (1, 0, -1)^{\mathsf{T}}/\sqrt{2} q 2 = ( 1 , 0 , − 1 ) T / 2 、α 2 = ( 3 + 1 ) / 2 = 2 \alpha_2 = (3 + 1)/2 = 2 α 2 = ( 3 + 1 ) /2 = 2 です。
T 2 = ( 2 2 / 3 2 / 3 2 ) , θ ( 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 . T 2 = ( 2 2/3 2/3 2 ) , θ ( 2 ) = 2 ± 2/3 ≈ 2.8165 , 1.1835. 交互性は 3 ≥ 2.8165 ≥ 2 3 \ge 2.8165 \ge 2 3 ≥ 2.8165 ≥ 2 、2 ≥ 1.1835 ≥ 1 2 \ge 1.1835 \ge 1 2 ≥ 1.1835 ≥ 1 で成り立ちます。Kaniel–Paige の評価では γ = ( 3 − 2 ) / ( 2 − 1 ) = 1 \gamma = (3 - 2)/(2 - 1) = 1 γ = ( 3 − 2 ) / ( 2 − 1 ) = 1 、T 1 ( 3 ) = 3 T_1(3) = 3 T 1 ( 3 ) = 3 、tan ∠ ( b , e 1 ) = 2 \tan\angle(\boldsymbol{b}, \boldsymbol{e}_1) = \sqrt{2} tan ∠ ( b , e 1 ) = 2 なので、右辺は ( 3 − 1 ) ( 2 / 3 ) 2 = 4 / 9 ≈ 0.444 (3 - 1)(\sqrt{2}/3)^2 = 4/9 \approx 0.444 ( 3 − 1 ) ( 2 /3 ) 2 = 4/9 ≈ 0.444 で、実際の誤差 3 − 2.8165 ≈ 0.1835 3 - 2.8165 \approx 0.1835 3 − 2.8165 ≈ 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.
執筆: Claude Code(Opus 5.5)、Claude Code(Sonnet 5.5)・監査 2 回(Claude Code)・最終 2026-10-12