行列式の計算(6)

行列はリストのリストで表現し、行列式の関数を作った。


def swap(Mat, i):
n = len(Mat);
for k in range(i + 1, n):
if Mat[k][i] != 0:
tmp = Mat[i]
Mat[i] = Mat[k]
Mat[k] = tmp
return 1

return 0

def det(Mat):
result = 1
div = 1
n = len(Mat)
for i in range(0, n - 1):
if Mat[i][i] == 0:
if not swap(Mat, i):
return 0
a = Mat[i][i]
for j in range(i + 1, n):
for k in range(i + 1, n):
Mat[j][k] = Mat[j][k] * a - Mat[i][k] * Mat[j][i]
div *= a
result *= a

return result * Mat[2][2] / div

これを次のように使うと固有方程式が求まる。


A = [
[ 5, 1, 2 ],
[ 3, 4, 5 ],
[ 2, 1, 3 ]
];

x = Poly([0, 1])
for i in range(0, len(A)):
A[i][i] -= x

print det(A)

26-35x+12x^2-x^3