連立多元一次方程式の数値解法


Gauss-Jordan 法

行列 A とベクトル b が与えられたとき、 Gauss-Jordan 法を用いて N 元一次連立方程式

[ A ] { x } = { b }

の解 x と、 A の逆行列とを同時に求めるプログラムである。 この時 N は 16 以下としている。

入力データ形式は下図左半分に示す内容を持ったものとする。 すなわち、 先頭の行には連立する方程式の元数を示す整数がひとつあり、 以降の行には行列 A の各列の要素とベクトル b の各要素とが 含まれているものとする。
(下図右半分は左半分のデータの読み込まれるべき変数もしくは配列要素である。)

3                                      N
1.1111  1.1111  1.1111  5.5555         A[0][0]  A[0][1]  A[0][2]  b[0]
1.1111  2.2222  2.2222  6.6666         A[1][0]  A[1][1]  A[1][2]  b[1]
1.1111  2.2222  3.3333  7.7777         A[2][0]  A[2][1]  A[2][2]  b[2]

プログラム例 , 実行結果例 , 実行ファイル例: /class/mce/NumAnalysis/xmp07a

Gauss-Jordan 法では、 行列の対角要素のみを 1 にし、 残りの要素を全て 0 にすることによって、 解を求める。

連立方程式を解くのと同時に、係数行列の逆行列を求めることができるのが特徴である。
また、計算量は必ずしも最少ではないが、 計算のアルゴリズムが非常にシンプルな計算方法である。


提出課題 5

上記の Gauss-Jordan 法を用いて N 元一次連立方程式を解くプログラムを、 以下に示すように修正せよ。

  1. 出力には、入力データを見易く整理して表示したものと 計算結果の x と A の逆行列とを判りやすく示したものとを含めること。
  2. ピボットの入れ替えが必要な行列や、 特異行列もしくはたちの悪い行列が与えられた場合は、 その旨を検出して表示するようにせよ。
    検出することさえできれば、 それ以上の処理は特に行なわなくとも良いが、 テストデータ Simal05.dat などを確実に検出できること。

課題提出用データファイルとしては、 /class/mce/NumAnalysis/Simal08.dat と各自が用意したものとの二つ以上を用い、 これを標準入力から リダイレクトによって 読み込んで 計算した結果をレポートに示すこと。

また、 計算結果を表示する場合は、 表示桁数を 5 桁程度とること。

実行結果例 (この通りの出力にならなくても可) , 実行ファイル例: /class/mce/NumAnalysis/xmp07b2, 入力データ例: /class/mce/NumAnalysis/Simal0?.dat

提出期限: 2023 年 7 月 24 日 18 時


Copyright (c) 2011, takata@cc.uec.ac.jp