Re: [Maxima] Jordan Form



Hi  happy new year.

I add Modematrix for jordan form.
please test this.
Maybe,I hope this code is robust.
After test,I hope to add  this in share/mat at new version.

By cauchy integral formula,if f(x) is analytic and
mat=diag([JF(m1,n1),,JF(mk,nk)]),then
f(mat)=(ModeMatrix)^^-1*diag([f(JF(m1,n1)),,f(JF(mk,nk))])*ModeMatrix.
Now,we can allmost calc this way.soon I write a program for(f(JF(m1,n1)).

(D1)                                diag.mc
(C2) load("data1.mc");

(D2)                               data1.mc
(C3) a
;

                   [  2     0     0     0    0    0   0  0 ]
                   [                                       ]
                   [  1     2     0     0    0    0   0  0 ]
                   [                                       ]
                   [ - 4    1     2     0    0    0   0  0 ]
                   [                                       ]
                   [  2     0     0     2    0    0   0  0 ]
(D3)               [                                       ]
                   [ - 7    2     0     0    2    0   0  0 ]
                   [                                       ]
                   [  9     0    - 2    0    1    2   0  0 ]
                   [                                       ]
                   [ - 34   7     1    - 2  - 1   1   2  0 ]
                   [                                       ]
                   [ 145   - 17  - 16   3    9   - 2  0  3 ]
(C4) jordan(a);

(D4)                        [[2, 3, 3, 1], [3, 1]]
(C5) mm:ModeMatrix(a,jordan(a));

                    [ 0    0      1     0    0   0   0  0 ]
                    [                                     ]
                    [ 0    1      0     0    0   1   0  0 ]
                    [                                     ]
                    [ 1   - 4     0     0    1   0   0  0 ]
                    [                                     ]
                    [ 0    2      0     0    0   0   1  0 ]
(D5)                [                                     ]
                    [ 2   - 7     0     0    2   0   0  0 ]
                    [                                     ]
                    [ 1    9      0     0    0   0   2  0 ]
                    [                                     ]
                    [ 15  - 34    0    - 1   7   0   0  0 ]
                    [                                     ]
                    [ 0    28   - 117   0   - 2  15  1  1 ]
(C6) (mm^^-1).a.mm;

                          [ 2  1  0  0  0  0  0  0 ]
                          [                        ]
                          [ 0  2  1  0  0  0  0  0 ]
                          [                        ]
                          [ 0  0  2  0  0  0  0  0 ]
                          [                        ]
                          [ 0  0  0  2  1  0  0  0 ]
(D6)                      [                        ]
                          [ 0  0  0  0  2  1  0  0 ]
                          [                        ]
                          [ 0  0  0  0  0  2  0  0 ]
                          [                        ]
                          [ 0  0  0  0  0  0  2  0 ]
                          [                        ]
                          [ 0  0  0  0  0  0  0  3 ]


Gosei Furuya (go_furuya@infoseek.jp)

> 
> Hello I write program for calculating Jordan cannonical Form,and etc.
> 
>   diag([a1,a2,..])
>   each ai is square matrix or one element.
>   Jordan cell JF(labmda,n),labmda is eigenvalue,n is size of matrix.
>   jordan(mat) is jordan form but represented by list.
>   we obtain matrix form ,dispJordan(this list).
>   minimalPoly(this list) display minimalpolynomial of that matrix
>   (M^^-1)AM=JF,I soon show maybe at this week end
>   I intended to write this program,after saw Barton's mat_exp.mc
>   Partially because of Mathematica BUG ,
>   a:matix( [2,0,0,0,0,0,0,0],
>          [1,2,0,0,0,0,0,0],
>          [-4,1,2,0,0,0,0,0],
>          [2,0,0,2,0,0,0,0],
>          [-7,2,0,0,2,0,0,0],
>          [9,0,-2,0,1,2,0,0],
>          [-34,7,1,-2,-1,1,2,0],
>          [145,-17,-16,3,9,-2,0,3])$	Mathematica returns wrong
>   Jordan form,my program returns correct answer for this matrix.
>   please see
>   http://library.wolfram.com/mathgroup/archive/2000/Dec/msg00108.html
>  any opinion is appreciated.
> sample
> 
> (C1) load("diag.mc");
> 
> Warning - you are redefining the MACSYMA function EIGENVALUES
> Warning - you are redefining the MACSYMA function EIGENVECTORS
> (D1)                                diag.mc
> a is above matrix.
> 
> (C3) jordan(a);
> 
> (D3)                        [[2, 3, 3, 1], [3, 1]]
> (C4) dispJordan(%);
> 
>                           [ 2  1  0  0  0  0  0  0 ]
>                           [                        ]
>                           [ 0  2  1  0  0  0  0  0 ]
>                           [                        ]
>                           [ 0  0  2  0  0  0  0  0 ]
>                           [                        ]
>                           [ 0  0  0  2  1  0  0  0 ]
> (D4)                      [                        ]
>                           [ 0  0  0  0  2  1  0  0 ]
>                           [                        ]
>                           [ 0  0  0  0  0  2  0  0 ]
>                           [                        ]
>                           [ 0  0  0  0  0  0  2  0 ]
>                           [                        ]
>                           [ 0  0  0  0  0  0  0  3 ]
> (C5) minimalPoly(d3);
> 
>                                               3
> (D5)                           (x - 3) (x - 2)
> (C6) diag([JF(1,7),x,JF(3,2)]);
> 
>                        [ 1  1  0  0  0  0  0  0  0  0 ]
>                        [                              ]
>                        [ 0  1  1  0  0  0  0  0  0  0 ]
>                        [                              ]
>                        [ 0  0  1  1  0  0  0  0  0  0 ]
>                        [                              ]
>                        [ 0  0  0  1  1  0  0  0  0  0 ]
>                        [                              ]
>                        [ 0  0  0  0  1  1  0  0  0  0 ]
> (D6)                   [                              ]
>                        [ 0  0  0  0  0  1  1  0  0  0 ]
>                        [                              ]
>                        [ 0  0  0  0  0  0  1  0  0  0 ]
>                        [                              ]
>                        [ 0  0  0  0  0  0  0  x  0  0 ]
>                        [                              ]
>                        [ 0  0  0  0  0  0  0  0  3  1 ]
>                        [                              ]
>                        [ 0  0  0  0  0  0  0  0  0  3 ]
> 
>  this program is GPL.
> Gosei Furuya (go_furuya@infoseek.jp)
> 
> 
> 

Attached file: diag.mc