from libsolve2 import * from fractions import Fraction def f_eye(dim): return Matrix([ [0 if i != j else 1 for i in range(dim)] for j in range(dim) ]) m = Matrix([ [ 4, -3, -2, 0, 0, 0], [ 0, 2, -1, 0, 0, 0], [ 0, 2, 5, 0, 0, 0], [ 1, 1, 1, 2, -1, 0], [-2, -3, -3, 4, 6, 0], [ 1, 8, 7, -5, -3, 3] ]) print('char polynomial is ', (m - f_eye(6) * x).det()) print('(x - 3)^2(x - 4)^4 =', (x - 3)*(x - 3)*(x - 4)*(x - 4)*(x - 4)*(x - 4)) root1 = m - f_eye(6) * 3 print(f'rank of m - 3E = {root1.rank()} => one cell of size 2') root2 = m - f_eye(6) * 4 print(f'rank of m - 4E = {root2.rank()} => two cells') print(f'rank of (m - 4E)^2 = {(root2@root2).rank()} => two cells of size 2')