ヤコビ法

ヤコビ法（ヤコビほう）とは n {\displaystyle n} 元の連立一次方程式 A x → = b → {\displaystyle A{\vec {x}}={\vec {b}}} を反復法で解く手法の1つである。ドイツの数学者カール・グスタフ・ヤコブ・ヤコビの名前にちなむ。 n {\displaystyle n} 次正方行列 A {\displaystyle A} は、上三角行列 U {\displaystyle U} 、下三角行列 L {\displaystyle L} 、対角行列を D {\displaystyle D} とすると、 A = L + D + U {\displaystyle A=L+D+U} と書ける。このようにすると、まず以下のような変形ができる。 ( L + D + U ) x → = b → D x → = b → − ( L + U ) x → {\displaystyle {\begin{array}{ccc}(L+D+U){\vec {x}}&=&{\vec {b}}\\D{\vec {x}}&=&{\vec {b}}-(L+U){\vec {x}}\\\end{array}}} この式を満たす   x {\displaystyle \ x} を求める。初期値 x → ( 0 ) {\displaystyle {\vec {x}}^{(0)}} に対して、   k {\displaystyle \ k} 回目の反復で得られた x 1 {\displaystyle x_{1}} の値を x 1 ( k ) {\displaystyle x_{1}^{(k)}} と書くと、 以下のような反復法の漸化式ができる。 D x → ( k + 1 ) = b → − ( L + U ) x → ( k ) {\displaystyle D{\vec {x}}^{(k+1)}={\vec {b}}-(L+U){\vec {x}}^{(k)}} この式は以下のように変形できる。 x → ( k + 1 ) = D − 1 { b → − ( L + U ) x → ( k ) } {\displaystyle {\vec {x}}^{(k+1)}=D^{-1}\{{\vec {b}}-(L+U){\vec {x}}^{(k)}\}} もし、解が収束した場合、その場合は x 1 ( k + 1 ) {\displaystyle x_{1}^{(k+1)}} と x 1 ( k ) {\displaystyle x_{1}^{(k)}} は共通の値 x 1 ( ∗ ) {\displaystyle x_{1}^{(*)}} を持つことになる。このとき、 x → ( ∗ ) = D − 1 { b → − ( L + U ) x → ( ∗ ) } {\displaystyle {\vec {x}}^{(*)}=D^{-1}\{{\vec {b}}-(L+U){\vec {x}}^{(*)}\}} となり、変形していくと元の連立方程式の形に戻る。 したがって、ヤコビ法で解が収束した場合、その解は連立方程式の解となる。 また、その収束の十分条件は、係数行列の対角要素の絶対値が非対角要素の絶対値よりも相対的に大きい場合、すなわち対角優位な行列である場合に収束する。これはガウス＝ザイデル法も同様である。 ヤコビ法の式はベクトル x → {\displaystyle {\vec {x}}} の各成分ごとに次のような式で書くことができ、数値解析ではこの式が用いられる。 x i ( k + 1 ) = 1 a i i ( b i − ∑ j = 1 i − 1 a i j x j ( k ) − ∑ j = i + 1 n a i j x j ( k ) ) = 1 a i i ( b i − ∑ j ≠ i n a i j x j ( k ) ) {\displaystyle x_{i}^{(k+1)}={\frac {1}{a_{ii}}}\left(b_{i}-\sum _{j=1}^{i-1}a_{ij}x_{j}^{(k)}-\sum _{j=i+1}^{n}a_{ij}x_{j}^{(k)}\right)={\frac {1}{a_{ii}}}\left(b_{i}-\sum _{j\neq i}^{n}a_{ij}x_{j}^{(k)}\right)} ガウス＝ザイデル法とヤコビ法を加速する方法としてはSOR法が知られている。 3元の連立一次方程式、すなわち、 ( a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ) ( x 1 x 2 x 3 ) = ( b 1 b 2 b 3 ) {\displaystyle \left({\begin{array}{ccc}a_{11}&a_{12}&a_{13}\\a_{21}&a_{22}&a_{23}\\a_{31}&a_{32}&a_{33}\end{array}}\right)\left({\begin{array}{c}x_{1}\\x_{2}\\x_{3}\end{array}}\right)=\left({\begin{array}{c}b_{1}\\b_{2}\\b_{3}\end{array}}\right)} を解くことを考える。 k {\displaystyle k} 回目の反復で得られた x 1 {\displaystyle x_{1}} の値を x 1 ( k ) {\displaystyle x_{1}^{(k)}} と書く。 初期値 x → ( 0 ) {\displaystyle {\vec {x}}^{(0)}} は、適当な値、例えばゼロベクトルでもかまわない。 x 1 ( k + 1 ) = ( b 1 − a 12 x 2 ( k ) − a 13 x 3 ( k ) ) / a 11 {\displaystyle x_{1}^{(k+1)}=(b_{1}-a_{12}x_{2}^{(k)}-a_{13}x_{3}^{(k)})/a_{11}} x 2 ( k + 1 ) = ( b 2 − a 21 x 1 ( k ) − a 23 x 3 ( k ) ) / a 22 {\displaystyle x_{2}^{(k+1)}=(b_{2}-a_{21}x_{1}^{(k)}-a_{23}x_{3}^{(k)})/a_{22}} x 3 ( k + 1 ) = ( b 3 − a 31 x 1 ( k ) − a 32 x 2 ( k ) ) / a 33 {\displaystyle x_{3}^{(k+1)}=(b_{3}-a_{31}x_{1}^{(k)}-a_{32}x_{2}^{(k)})/a_{33}} という反復を繰り返していく。 ヤコビ法は、直列計算ではガウス＝ザイデル法よりも遅いが、ガウス＝ザイデル法と異なり各式が他の式に依存せず並列性があるため並列計算でも用いられる。 実対称行列の固有値および固有ベクトルを求める繰り返し計算手法においてもヤコビ法と呼ばれる解法がある（紛らわしさを避けるためにはヤコビ対角化法という）。   n {\displaystyle \ n} 次の実対称行列   A {\displaystyle \ A} について次のように   G ( p , q , θ ) {\displaystyle \ G(p,q,\theta )} による相似変換、すなわちギブンス回転を実行することにより、非対角要素   a i j ( i ≠ j ) {\displaystyle \ a_{ij}(i\neq j)} の最大値   a p q {\displaystyle \ a_{pq}} が0となるようにする。   B = G T A G {\displaystyle \ B=G^{T}AG} これによって行列   B {\displaystyle \ B} の各要素は次のようになる。但し、   i , j ≠ p , q {\displaystyle \ i,j\neq p,q} である。 { b p p = a p p cos 2 ⁡ θ + a q q sin 2 ⁡ θ − 2 a p q sin ⁡ θ cos ⁡ θ , b q q = a p p sin 2 ⁡ θ + a q q cos 2 ⁡ θ + 2 a p q sin ⁡ θ cos ⁡ θ , b p q = b q p = 1 2 ( a p p − a q q ) sin ⁡ 2 θ + a p q cos ⁡ 2 θ , b i j = a i j , b p j = a p j cos ⁡ θ − a q j sin ⁡ θ , b q j = a p j sin ⁡ θ + a q j cos ⁡ θ , b i p = a i p cos ⁡ θ − a i q sin ⁡ θ , b i q = a i p sin ⁡ θ + a i q cos ⁡ θ {\displaystyle {\begin{cases}b_{pp}=a_{pp}\cos ^{2}\theta +a_{qq}\sin ^{2}\theta -2a_{pq}\sin \theta \cos \theta ,\\b_{qq}=a_{pp}\sin ^{2}\theta +a_{qq}\cos ^{2}\theta +2a_{pq}\sin \theta \cos \theta ,\\b_{pq}=b_{qp}={\frac {1}{2}}(a_{pp}-a_{qq})\sin 2\theta +a_{pq}\cos 2\theta ,\\b_{ij}=a_{ij},\\b_{pj}=a_{pj}\cos \theta -a_{qj}\sin \theta ,\\b_{qj}=a_{pj}\sin \theta +a_{qj}\cos \theta ,\\b_{ip}=a_{ip}\cos \theta -a_{iq}\sin \theta ,\\b_{iq}=a_{ip}\sin \theta +a_{iq}\cos \theta \end{cases}}} ここで、   a p q ≠ 0 {\displaystyle \ a_{pq}\neq 0} のとき   b p q = 0 {\displaystyle \ b_{pq}=0} となる   θ {\displaystyle \ \theta } は上式より tan ⁡ 2 θ = − 2 a p q ( a p p − a q q ) {\displaystyle \tan 2\theta ={\frac {-2a_{pq}}{(a_{pp}-a_{qq})}}} から求められることがわかる。 ギブンス回転をすべての非対角要素がほぼ0になるまで繰り返せば、実対称行列 A {\displaystyle A\quad } が対角化された形となるから、その対角要素が A {\displaystyle A\quad } の固有値となる。また、 A {\displaystyle A\quad } がk回変換された行列を A k {\displaystyle A_{k}\quad } 、k回目のギブンス回転を表す直交行列を G k {\displaystyle G_{k}\quad } と表せば、 A k = G k T A k − 1 G k = U k T A U k {\displaystyle A_{k}=G_{k}^{T}A_{k-1}G_{k}=U_{k}^{T}AU_{k}} ここに、 U k = G 1 G 2 G 3 ⋯ G k − 1 G k {\displaystyle U_{k}=G_{1}G_{2}G_{3}\cdots G_{k-1}G_{k}} となる。 A k {\displaystyle A_{k}\quad } のすべての非対角要素がほぼ0となったとき、 U k {\displaystyle U_{k}\quad } は固有ベクトルを並べた行列となっている。 なお、ギブンス回転の繰り返し過程において、一度は0になった要素がその後の変換により0でなくなることもあるが、変換の繰り返しによって非対角項は0に近づいてゆく。 なお上記のように、ヤコビの対角化法は実対称（あるいは複素エルミート）の場合が最も良く知られておりその場合だけしか適用できないものと考えられるかもしれない。しかし非対称な行列に対するヤコビ法もあって研究もされプログラムも公開されていたがQR法が登場した後では行列が非対称な場合にはほとんどQR法だけが使われているため今日では非対称な場合についてはほとんど認知されていないようである（複素エルミートの場合についてもその具体的な実装に言及している文献は稀であり，もっぱら実対称行列の場合だけがよく知られている）。 数値解析 ガウス＝ザイデル法