> | with(linalg): |
> | #I show a trade secret of how to produce complicated looking matrices having a nice Jordan form |
> | A:=matrix([[3, 1, 0, 0, 0, 0, 0], [0, 3, 1, 0, 0, 0,0], [0, 0, 3, 0, 0, 0, 0], [0, 0, 0, 3,1, 0, 0], [0, 0, 0, 0, 3, 0, 0], [0, 0, 0, 0, 0, 2, 1], [0, 0, 0, 0, 0, 0, 2]]); |
> | M:=matrix([[1, 0, 3, 0, 3, 0, 3], [0,1, 1, 1, 1, 1, 1], [0, 0, 1, 0, 3, 0, 3], [0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, 1, 1, 1], [0, 0, 0, 0, 0, 1, 3], [0, 0, 0, 0, 0, 0, 1]]); |
> | #The fact that M has determinant 1 guarantees it's invertible over Z and so that the overall scrambling we are doing is not too bad numerically |
> | S:=matrix([[0, 1, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 1], [1, 0, 0, 0, 0, 0, 0]]); |
> | #S is just a permuation matrix designed to kill the upper diagonal form of the rest of the matrices. And here comes the matrix we'll deal with: |
> | B:=multiply(M, inverse(S), A, S, inverse(M)); |
> | factor(charpoly(B, t));factor(minpoly(B, t)); |
> | #From this we know we deal with two spaces. Note that we know that there is one Jordan block corresponding to the eigenvalue 2 and it has size 2, however we don't know yet the basis in which we get that block. The situation for 3 is worse. We only know there's one Jordan block of size 3 and the total size is 5. We could have a priori either a (3, 2) situation or a (3, 1, 1) situation. We first deal with the space associated with the factor (t-3)^5. |
> | L1:=kernel(B-3);nops(L1); |
> | L2:=kernel((B-3)^2);nops(L2); |
> | L3:=kernel((B-3)^3);nops(L3); |
> | #We have calculated the dimensions of the kernels and bases. In our notation from class we should have C^3 one dimensional (=5-4), C^2 is two dimensionl(=4-2) and contains (B-3)C^3 and C^1 is 2 dimensional (=dim kernel B-3) and contains (B-3)C^2. We span C^3 using a vector in kernel (B-3)^3 and not in kernel (B_3)^2. We try: |
> | multiply((B-3)^2, L3[1]); |
> | multiply((B-3)^2, L3[2]); |
> | multiply((B-3)^2, L3[3]); |
> | multiply((B-3)^2, L3[4]); |
> | multiply((B-3)^2, L3[5]); |
> | v3:=vector([-6, 0, 0, 0, 1, 0, 0]); |
> | #(Hopefully, when you run Maple again on this example it will indeed choose to include this vector in the basis L3....) |
> | #Then (B-3)v3 is a vector in kernel (B-3)^2. It is |
> | Uv3:=multiply(B-3, v3); |
> | #We are looking for one more vector v2 so that kernel (B-3)^2 is the direct sum of kernel(B-3) and Span((B-3)v3, v2). Namely, for a vector in kernel (B-3)^2 and not in the span of the union of L1 and (B-3)v3. We can find such a vector among L2. We are looking for a vector in L2 so that the matrix below has rank 4. |
> | matrix([L1[1], L1[2], Uv3, L2[1]]);rank(%); |
> | matrix([L1[1], L1[2], Uv3, L2[2]]);rank(%); |
> | matrix([L1[1], L1[2], Uv3, L2[3]]);rank(%); |
> | matrix([L1[1], L1[2], Uv3, L2[4]]);rank(%); |
> | #So we may take (again, provided Maple chooses the list L2 in the same way when you try it out...) |
> | v2:=vector([6, 0, 0, 0, 0, 1, 0]); |
> | #At this point we are done with our basis for the t-3 factor. It is |
> | # U2v3= (B-3)^2v3, Uv3=(B-3)v3, v3, Uv2=(B-3)v2, v2, |
> | #where |
> | U2v3:=multiply((B-3)^2, v3); |
> | Uv2:=multiply((B-3), v2); |
> | #The t-2 factor is easier |
> | H1:=kernel((B-2)^2); |
> | H2:=kernel(B-2); |
> | #We look for a vector in H1 and not in H2. For example, we can take |
> | w2:=vector([1, 0, 0, 0, 0, 0, 0]); |
> | Uw2:=multiply(B-2, w2); |
> | #Our basis is then the columns of the matrix |
> | M:=transpose(matrix([U2v3, Uv3, v3, Uv2, v2, Uw2, w2])); |
> | multiply(inverse(M), B, M); |
> | #DONE!! |