ガウスの消去法の高精度化

連立1次方程式(simultaneous linear equation)の解を ガウスの消去法(Gaussian elimination)によって 数値的に精度よく求めよう.


実験

ガウスの消去法の基本プログラム gauss.c に対して, 以下の作業に取り組め.

作業:

  1. まずは,gauss.c のコードおよびコメントを熟読せよ.
  2. ソースファイルに記述されている動作テスト用問題(1) および (2) を実行し, 解析結果が正しいことを確認せよ.
  3. 動作テスト用問題(3) および (4) を実行し, 単精度実数(float型)では解析に失敗し(計算が不可能または結果が不正確となり), 倍精度実数(double型)では解析に成功する(結果が正確となる)ことを確認せよ.

ガウスの消去法は,代数的には厳密解を常に算出できるハズである. しかし,数値的には充分な精度の近似解を得られない場合もある. 要するに,この実験では,数値計算における誤差の伝搬の影響を実感せよ.

基本プログラム(DL):

参考資料: ガウスの消去法


課題

基本プログラム gauss.c を元にして, ピボット選択関数 pivot(), スケーリング関数 scaleRow() , 等を適切に実装し, 解析精度を改良せよ.

「動作テスト用問題(3) および (4)」が これらの処理によって単精度でも成功となる ことを確認すること. なお,それぞれの問題に対して, 次の計算方法の組み合わせについて実験し, 「成功/不正確/不可能」を評価すること:

  1. 単精度,ピボット選択なし(基本プログラム)の場合
  2. 単精度,ピボット選択あり,スケーリングなしの場合
  3. 単精度,ピボット選択あり,スケーリングありの場合

さらに,基本プログラムの解析失敗と改良版の解析成功について,原因を考察せよ.

また,余裕のある人は,計算量(乗除算の回数)を計測したり,計算量の削減について試してみては?

レポート提出

(c) 2018, yanagawa@kushiro-ct.ac.jp