ker[A_]:=Module[{X=NullSpace[A]},Print["ker ",MatrixForm[X]];X]
niezalezne[A_]:=(Length[NullSpace[Transpose[A]]]==0)

(*A={{1,0,0,0,2,0,2,2,0,0},{0,1,0,0,0,0,0,0,0,0},{0,1,2,0,0,0,0,0,1,0},{1,0,1,1,1,0,0,2,0,1},{0,0,0,0,1,0,1,0,0,0},{0,1,1,0,0,1,0,0,1,0},{0,0,0,0,0,0,1,0,0,0},{0,1,0,0,0,0,0,2,1,1},{0,1,0,0,0,0,1,0,1,0},{0,0,0,0,0,0,1,0,0,1}};*)
A={{3,-8,0,0,2,0,-6,-2,-4,-4},{0,3,0,0,0,0,0,0,0,0},{0,-3,2,0,0,0,-2,0,-1,0},{1,-20,-1,3,1,0,-18,-6,-10,-7},{0,0,0,0,3,0,1,0,0,0},{0,-3,-1,0,0,3,-2,0,-1,0},{0,0,0,0,0,0,3,0,0,0},{0,-3,0,0,0,0,-4,2,-1,-1},{0,1,0,0,0,0,1,0,3,0},{0,0,0,0,0,0,1,0,0,3}};
MatrixForm[A]

(* wielomian charakterystyczny *)
chi[t]=Det[A-t IdentityMatrix[10]]

Factor[chi[t]]

(* wartosc wlasna 2 *)
B2=A-2 IdentityMatrix[10];MatrixForm[B2]
K=ker[B2];

(* dwie jednowymiarowe klatki Jordana *)
u1=K[[1]]
u2=K[[2]]

(* wartosc wlasna 3 *)
B1=A-3 IdentityMatrix[10];MatrixForm[B1]
K1=ker[B1];

MatrixForm[B1.B1]
K2=ker[B1.B1];

MatrixForm[B1.B1.B1]
K3=ker[B1.B1.B1];

MatrixForm[B1.B1.B1.B1]
K4=ker[B1.B1.B1.B1];

(* z K4 trzeba wybrac poczatek najdluzszego lancuszka *)
K4=ker[B1.B1.B1.B1];

v4=K4[[1]]
v3=B1.v4
v2=B1.v3
v1=B1.v2
B1.v1

(* z K2 trzeba wybrac poczatek drugiego lancuszka *)
K2=ker[B1.B1];

w2=K2[[3]] (* 3 *)
niezalezne[{v1,v2,v3,v4,w2}]

w1=B1.w2
niezalezne[{v1,v2,v3,v4,w1,w2}]

(* z K1 wybieramy pozostale 2 wektory bazy *)
K1=ker[B1];

x=K1[[2]] (* 2 *)
niezalezne[{x,v1,w1}]

y=K1[[3]]
niezalezne[{x,y,v1,w1}]

(* tego nie trzeba sprawdzac *)
niezalezne[{u1,u2,v1,v2,v3,v4,w1,w2,x,y}]

(* macierz przejscia z bazy Jordana do standardowej *)
J=Transpose[{u1,u2,v1,v2,v3,v4,w1,w2,x,y}];
MatrixForm[J]
Det[J]

(* postac Jordana *)
MatrixForm[Inverse[J].A.J]