第7回 連立方程式の解法(その2)

7.1 ピボット選択

ピボットとなる数値が 0 に近い小さな値の場合、係数をピボットで割る演算の際に、誤差が大きくなる。 そこで、誤差が少なくなるように、ピボットの選択を行う。以下のアルゴリズムは行ピボットと呼ばれる方法である。

アルゴリズム

  1. a11〜an1の中で絶対値が最大となる係数がある行を探す。ここでは s行目の as1 の絶対値が最大であるものとする。
  2. 1行目とs行目を交換する。
  3. as1をピボットにして掃き出す。
  4. 次の行に移る。以降繰り返し。

7.2 例題

先週の課題2のプログラムを修正し、ガウスジョルダン法のプログラムにピボット選択の手順を追加せよ。

7.3 ガウス消去法

ガウス消去法は、前進消去と後退代入という2つの操作からなる。

7.3.1 前進消去

(2)-(1)×a21/a11、 (3)-(1)×a31/a11を行い、(2)と(3)のx1項を消去する。
(3)'-(2)'×a'32/a'22 を行い、(3)'のx2 項を消去する。
ここまでの操作を前進消去という。

7.3.2 後退代入

前進消去により、(3)''よりx3が求められるので、この値を(2)''に代入してx2を求め、さらに(1)''に代入してx1を求める。
この操作を後退代入という。

7.4 ガウス消去法のコーディング

7.4.1 前進消去のアルゴリズム

  1. ピボットを1行1列からn-1行n-1列に移しながら以下の操作を繰り返す。このとき、7.1 のピボット選択を行いながら操作を進める。
  2. akk をピボットにし、i 行について aik/akk を求め、
    i行 - k行×aik / akk を行う。

7.4.2 後退代入のアルゴリズム

  1. b'n から b'1 に向かって以下の操作を繰り返す。
  2. b'i を初期値として、b'i+1 から b'n まで a'ij×b'j の値を引く。
  3. 2.で求めた値を a'ii で割る。

課題 (提出〆切:金曜22時)

  1. 行列 A とベクトル bのデータが A4_mat.csv, b4_vec.csv に記述されている。 ガウス・ジョルダン法およびガウス消去法を用いて Ax = bx について解き、方程式の解を求めるプログラムを作成せよ。 以下の指示に従うこと。
  2. ガウス・ジョルダン法とガウス消去法のプログラムの実行時間を計測するプログラムを作成し、実行時間を比較せよ。 以下の指示に従うこと。

課題サンプルプログラム