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