おまけ

Gauss の消去法はプログラム (heat1$ x$ -i-glsc.c) の中では、次の trilu(), trisol() という関数を使って実現している。
/* 三重対角行列の LU 分解 (pivoting なし) */
void trilu(int n, double *al, double *ad, double *au)
{
  int i, nm1 = n - 1;
  /* 前進消去 (forward elimination) */
  for (i = 0; i < nm1; i++) {
    al[i + 1] /= ad[i];
    ad[i + 1] -= au[i] * al[i + 1];
  }
}

/* LU 分解済みの三重対角行列を係数に持つ三項方程式を解く */
void trisol(int n, double *al, double *ad, double *au, double *b)
{
  int i, nm1 = n - 1;
  /* 前進消去 (forward elimination) */
  for (i = 0; i < nm1; i++) b[i + 1] -= b[i] * al[i + 1];
  /* 後退代入 (backward substitution) */
  b[nm1] /= ad[nm1];
  for (i = n - 2; i >= 0; i--) b[i] = (b[i] - au[i] * b[i + 1]) / ad[i];
}
LU分解については、
「『発展系の数値解析』に加えること」
http://nalab.mind.meiji.ac.jp/~mk/labo/text/heat-fdm-0-add.pdf
に説明してある。連立1次方程式については、他に
「連立1次方程式I -- 計算量と直接法」(5章、特に§5.7)
http://nalab.mind.meiji.ac.jp/~mk/labo/text/linear-eq-1.pdf
が参考になる。

桂田 祐史
2017-10-27