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

6.1 ピボット選択法

前章では、ガウス・ジョルダン法による連立一次方程式の解法アルゴリズムを述べた。しかし、ピボットとなる数値が0に近い小さな値の場合、ピボットで各係数を割るため誤差が大きくなる。 そこで誤差を少なくするためピボットの選択を行う。ピボットのある列の中で、絶対値が最大のものをピボットとする。

アルゴリズム

a11〜an1の中で絶対値が最大となる係数がある行を探す。ここでは s行目の as1 の絶対値が最大であるものとする。
1行目とs行目を交換する。
as1をピボットにして掃き出す。
同様の処理を、ピボットを移しながら行う。

注意

今週はサンプルプログラムを用意していない。先週の課題を基に、自力で作成してください。

6.2 ガウスの消去法

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

(1) 前進消去

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

(2) 後退代入

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

6.3 プログラム・コーディング

これをプログラムするには以下のようにすれば良い。

(1) 前進消去のアルゴリズム

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

(2) 後退代入のアルゴリズム

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

注意

以上のアルゴリズムからもわかるとおり、ガウスの消去法においてもピボットによる除算があるため、ピボット選択が必要である。

6.4 課題 (〆切:日曜24時)

  1. ガウスジョルダン法およびガウス消去法にピボット選択の手順を加えたうえで、
    を解くプログラムを作成せよ。以下の指示に従うこと。
  2. ガウス消去法を用いて Ax = bx について解くことを考える。 行列 A のデータは A1_mat.csv, A2_mat.csv に、ベクトル b のデータは b_vec.csv に記述されている。 これらのファイルを読み込み方程式の解を求めるプログラムを作成せよ。 以下の指示に従うこと。

6.5 課題サンプルプログラム