1 | LIB "tst.lib"; |
---|
2 | tst_init(); |
---|
3 | |
---|
4 | proc extendedNormalForm(matrix M) |
---|
5 | { |
---|
6 | intvec v=1..nrows(M); |
---|
7 | intvec w=nrows(M)+1..nrows(M)+ncols(M); |
---|
8 | matrix N=concat(freemodule(nrows(M)),M); |
---|
9 | N=transpose(interred(transpose(N))); |
---|
10 | matrix C=submat(N,v,v); |
---|
11 | C=lift(C,freemodule(nrows(C))); //the inverse matrix of C |
---|
12 | matrix D=submat(N,v,w); |
---|
13 | D=transpose(interred(D)); |
---|
14 | list Re=C,D; |
---|
15 | return(Re); |
---|
16 | } |
---|
17 | |
---|
18 | option(redSB); |
---|
19 | ring R=0,(x),(C,dp); |
---|
20 | LIB"matrix.lib"; |
---|
21 | |
---|
22 | matrix M[5][5]=1, 1,0,0,0, |
---|
23 | -2,-1,0,0,0, |
---|
24 | 0, 0,2,1,0, |
---|
25 | 0, 0,0,2,0, |
---|
26 | 0, 0,0,0,2; |
---|
27 | |
---|
28 | matrix N[5][5]=1,2, 2, 2,-1, |
---|
29 | 1,1, 2, 1, 1, |
---|
30 | -1,1, 2,-1, 2, |
---|
31 | -1,1, 1,-1, 2, |
---|
32 | 1,2,-1, 2, 1; |
---|
33 | M=lift(N,freemodule(nrows(N)))*M*N; |
---|
34 | print(M); |
---|
35 | |
---|
36 | matrix A=M-x*freemodule(5); |
---|
37 | |
---|
38 | list L= extendedNormalForm(A); |
---|
39 | |
---|
40 | print(L[1]); |
---|
41 | |
---|
42 | print(L[2]); |
---|
43 | |
---|
44 | matrix V1[5][4]=concat(L[1][1],M*L[1][1],M*M*L[1][1],M*M*M*L[1][1]); |
---|
45 | matrix V2[5][1]=L[1][2]; |
---|
46 | |
---|
47 | list F=factorize(L[2][1,1]); |
---|
48 | F; |
---|
49 | |
---|
50 | proc polyOfEndo(matrix B,poly p) |
---|
51 | { |
---|
52 | int i; |
---|
53 | int d=nrows(B); |
---|
54 | matrix A=coeffs(p,var(1)); |
---|
55 | matrix E[d][d]=freemodule(d); |
---|
56 | matrix C[d][d]=A[1,1]*E; |
---|
57 | for(i=2;i<=nrows(A);i++) |
---|
58 | { |
---|
59 | E=E*B; |
---|
60 | C=C+A[i,1]*E; |
---|
61 | } |
---|
62 | return(C); |
---|
63 | } |
---|
64 | |
---|
65 | matrix S=polyOfEndo(M,F[1][2]^2); |
---|
66 | matrix V11=std(S*V1); |
---|
67 | print(V11); |
---|
68 | |
---|
69 | S=polyOfEndo(M,F[1][3]); |
---|
70 | matrix V12=std(S*V1); |
---|
71 | print(V12); |
---|
72 | |
---|
73 | matrix B=concat(V11,V12,V2); |
---|
74 | det(B); |
---|
75 | |
---|
76 | reduce(M*V11,std(V11)); |
---|
77 | reduce(M*V12,std(V12)); |
---|
78 | reduce(M*V2,std(V2)); |
---|
79 | |
---|
80 | matrix C=lift(B,M*B); |
---|
81 | print(C); |
---|
82 | |
---|
83 | matrix v[5][1]=V12[1]; |
---|
84 | B=concat(V11,M*v-2*v,v,V2); |
---|
85 | C=lift(B,M*B); |
---|
86 | print(C); |
---|
87 | |
---|
88 | tst_status(1);$ |
---|