掃き出し法
線形代数でおなじみ掃き出し法をやってみた。
def hakidashi(matrix, dim): for i in range(dim): num = matrix[i][i] for j in range(dim + 1): matrix[i][j] = matrix[i][j] / num for j in range(dim): if i == j: pass else: a = matrix[j][i] for k in range(i, dim + 1): matrix[j][k] = matrix[j][k]- a * matrix[i][k] print matrix def main(): dim = 3 #次元 matrix = [] num = [] for line in open('data.dat'): item = line.split(' ') for i in item: num.append(int(i)) matrix.append(num) num = [] hakidashi(matrix, dim) print matrix if __name__ == '__main__': main()
例として使ったdata.datの中身はこんな感じ。
1 -4 3 -1 1 -5 2 2 1 -1 1 0
実行結果。
>>> [[1, -4, 3, -1], [0, -1, -1, 3], [0, 3, -2, 1]] [[1, 0, 7, -13], [0, 1, 1, -3], [0, 0, -5, 10]] [[1, 0, 0, 1], [0, 1, 0, -1], [0, 0, 1, -2]] [[1, 0, 0, 1], [0, 1, 0, -1], [0, 0, 1, -2]]
見づらいけどうまくいっていることがわかる。
ちなみにピボットとかは考慮していない。