質問: 共役勾配法 (conjugate gradient)の失敗? 共役勾配法で線形方程式を解く時に、誤差を10の-8乗 として計算をしています。 たいていの計算はこの誤差で解けるのですが、ある計算 では、誤差が10の-3乗くらいまで減った後に、誤差が増加 していってしまいます。 共役勾配法を使っていると、こういうことが起きるのでしょうか? 数値計算プログラムの作成ミスだろうかと考えてチェックしていますが、 今の所おかしな部分は見つかっておりません。
回答: 共役勾配法は、桁落ちや丸め誤差の影響を受けやすいので、「前処理付き」で行えというのが標準だったと思いますが、「前処理」が面倒で、私はじつはやった事がありません。なので、最初に考えられる事は、 (1)前処理をなさっているか? です。次に考えられる事は、 (2)係数行列が特異でないか? です。前処理していない経験で言うと、係数行列が特異に近くなっても、共役勾配法はかなりもつ、という印象を受けました。しかし本当の特異行列を扱うなら、何らかの安全装置は必要かもしれません。 行列が特異なら、コンピュータの内部精度ぎりぎりの小さな数での除算が、どこかに入るはずなので、そこで制御し、計算を打ち切るとか・・・。