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][3]^2); |
---|

66 | matrix V11=std(S*V1); |
---|

67 | print(V11); |
---|

68 | |
---|

69 | S=polyOfEndo(M,F[1][2]); |
---|

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);$ |
---|