Subsections
実用的なプログラムでは,非常に大きな連立方程式を計算しなくてはならない.数百万元
に及ぶことも珍しくない.これを,ガウス・ジョルダン法で
計算するの時間的にほとんど不可能である.そこで,これよりは格段に計算の速い方法が
用いられる.ここでは,その一つとして反復法を簡単に説明する.
当然ここでも,連立方程式
を満たす
を数値計算により,求めることになる.ここで,真の解
とする.
ここで,ある計算によりn回目で求められたものを
とする.そして,計算回数を増やして,
|
(2) |
になったとする.この様に計算回数を増やして,真の解に近づける方法を反復法という.
この様な方法は,行列
を
と分解するだけで,容易に作ることが
できる.たとえば,
とすればよい.ここで,
が
に収束するとする.すると,式
(
3)と式(
1)を比べれば,
と
は等しいことがわかる.すなわち,式(
3)で元の方程式
(
1)を表した場合,
が収束すれば,必ず真の解
に収束するのである.別の解に収束することはなく,真の解に収束するか,発散
するかのいずれかである.
係数行列
の対角行列を反復計算の行列
としたものがヤコビ(Jacobi)法で
ある.係数行列を
|
(4) |
と分解し,右辺第1項が行列
で第2項が
となる.
の解の
計算に必要な
の逆行列は,それが対角行列なので,
|
(5) |
と簡単に求めることができる.
番目の近似解は
となるなので,容易に
求めることができる.実際,
番目の解を
とすると,k+1番目の解は
|
(6) |
と計算できる.これを繰り返して連立方程式の解を求める方法が,ヤコビ法である.
ヤコビ法の特徴では,
の近似値は,すべてその前の値
を
使うことにある.大きな行列を扱う場合,全ての
と
を記
憶する必要があり,大きなメモリーが必要となり問題が生じる.今では,個人で大きなメ
モリーを使い計算することは許されるが,ちょっと前まではできるだけメモリーを節約し
たプログラムを書かなくてはならなかった.
そこで,
の各成分の計算が終わると,それを直ちに使うことが考えば,
メモリーは半分で済む.即ち,
を計算するときに,
とするのである.実際の計算では,
番目の解は
と計算できる.これを繰り返して連立方程式の解を求める方法が,ガウス・ザイデル法である.
ガウス・ザイデル法をもっと改善する方法がある.ガウス・ザイデル法の解の修正は,
であったが,これをもっと大きなステップにしようというのである.通常
の場合,ガウス・ザイデル法では近似解はいつも同じ側にあり,単調に収束する.そのた
め,修正を適当にすれば,もっと早く解に近づく.修正幅を,加速緩和乗数
を用
いて,
とする事が考えられた.これが,逐次加速緩和法(SOR法:
Successive Over-Relaxation)である.
具体的な計算手順は,次のようにする.ここでは,ガウス・ザイデル法の式
(8)を用いて,得られた近似解を
としている.
これを繰り返して連立方程式の解を求める方法が,SOR法である.
ここで,問題なのが加速緩和係数
の値の選び方である.明らかに,それが1の場
合,ガウス・ザイデル法となりメリットは無い.また,1以下だと,ガウス・ザイデル法
よりも収束が遅い.ただし,ガウス・ザイデル法で収束しないような問題には使える.
従って,1以上の値にしたいわけであるが,余り大きくすると,発散するのは目に見えて
いる.これについては,2を越えると発散することが分かっている.最適値となると,だ
いたい1.9くらいが選ばれることが多い.
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
2006-02-08