このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1269438098/163
#  [1] 授業単元: 
#  プログラミング演習 
#  [2] 問題文(含コード&リンク): 
#  http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10568.txt 
#  
# 問題1: Gauss-Jordan 法 
# 1-1. Gauss-Jordan 法によるプログラムの例を参考にして,以下の仕様を満たす連立一次方程式求 
# 解プログラムlinearEq1 を作成せよ. 
# (a) 計算過程を理解するために,計算途中の係数行列を表示すること. 
# 表示例: (Input) 
# 1.00 2.00 3.00: 4.00 
# 5.00 6.00 7.00: 8.00 
# 1.00 3.00 4.00: 5.00 
# (i = 0) 
# 1.00 2.00 3.00: 4.00 
# 0.00 -4.00 -8.00: -12.00 
# 0.00 1.00 1.00: 1.00 
# ... 
# (b) プログラム中で行われる実数型のデータ同士の乗算・除算の回数をそれぞれ計測して,それ 
# らの回数と合計回数の3 つを表示すること. 
# 表示例: * : 26, / : 12, total: 38 
# 乗算回数および除算回数の数値はプログラムの組み方に依存する.そのため,各自で作成 
# したプログラムの実行結果において,上記の表示例と同じ数値が得られるとは限らないので 
# 注意すること. 
# 
# 問題1で作成したプログラムlinearEq1 を改造し,絶対値が最大の係数a[pivot][i] を 
# ピボットa[i][i] として選択して計算するプログラムlinearEq2 を作成せよ.ただし,問題1-1 
# の(a),(b) の仕様に加えて,次の仕様(c) を満たすようにすること. 
# (c) ピボット交換が行われたとき,交換された行と交換後の係数行列を表示すること. 
# 表示例: (Input) 
# 1.00 2.00 3.00: 4.00 
# 5.00 6.00 7.00: 8.00 
# 1.00 3.00 4.00: 5.00 
# Exchange row 1 with row 0 
# 5.00 6.00 7.00: 8.00 
# 1.00 2.00 3.00: 4.00 
# 1.00 3.00 4.00: 5.00 


連立一次方程式の解(_拡大係数行列,_解) :- 
      行列の表示('拡大係数行列\n',_拡大係数行列), 
      ガウス行列に変形(_拡大係数行列,_ガウス行列), 
      行列の表示('ガウス行列に変形\n',_ガウス行列), 
      連立一次方程式の解の判定(_ガウス行列,_解). 

連立一次方程式の解の判定(_ガウス行列,解が無数にある) :- 
      行列の階数(_ガウス行列,_ガウス行列の階数), 
      length(_ガウス行列,_ガウス行列の行数), 
      _ガウス行列の階数 < _ガウス行列の行数,!. 
連立一次方程式の解の判定(_ガウス行列,解なし) :- 
      member(L,_ガウス行列), 
      append(L0,[A],L), 
      \+(A=0),\+(A=0.0), 
      'すべての要素が0か0.0である'(L0),!. 
連立一次方程式の解の判定(_ガウス行列,_解ならび) :- 
      既約ガウス行列に変形(_ガウス行列,_既約ガウス行列), 
      行列の表示('既約ガウス行列に変形\n',_既約ガウス行列), 
      findall(_解,(member(L,_既約ガウス行列),list(L,_解)),_解ならび). 

'すべての要素が0か0.0である'([]) :- !. 
'すべての要素が0か0.0である'([0|R]) :- 'すべての要素が0か0.0である'(R),!. 
'すべての要素が0か0.0である'([0.0|R]) :- 'すべての要素が0か0.0である'(R),!. 

行列の表示(_口上,_行列) :- write(_口上),write('\n['), 行列の表示(_行列). 

行列の表示([]) :- write(']\n'),!. 
行列の表示([L]) :- write_formatted(' %t]\n',[L]),!. 
行列の表示([L|R]) :- write_formatted(' %t\n',[L]),行列の表示(R),!