[tinspire] Jordan canonical form- linalgcas lib

1,069 views
Skip to first unread message

Jim Fullerenex

unread,
Nov 29, 2011, 7:40:04 AM11/29/11
to Nspire Group
Hi everyone,

Recently I'm taking a close look at one of the three classical libraries in TI-Nspire CAS---- linalgcas, coming with every new hh, by Philippe Fortin (btw, is he here in the group? His work is amazing!)

The dn decomposition is working fine, so long as we do not require D+N to be in standard Jordan form.

I'm trying to develop an algorithm that can do Jordan decomposition of a nondiagonalizable square matrix. A=P*J*P^(-1) (and of course, I want the result to be in standard jordan form: http://en.wikipedia.org/wiki/Jordan_normal_form)  The most difficult part is to compute the modal matrix P.

Can anyone give me some help or hint to do so? Given that I may base my program on a couple of functions that are already available, like rank(), kernelbasis(), ceigenvals(), eigenvects(), whatever in linalgcas.tns. For your convenience, I attach the file in this email.

Thx!

Best,
Jim

linalgcas.tns

Jim Fullerenex

unread,
Nov 30, 2011, 10:33:29 PM11/30/11
to Nspire Group
Problem solved. Against tremendous odds. I shouldn't have put too much faith in Wiki; it helps nothing this time.

The Jordan canonical form is notorious for its computational challenge, but extremely useful in dealing with defective matrices. I pieced together the information I collected from several mathematical websites, and developed my own algorithm that partially avoids the tricky Jordan chain. Now I'm confident that Jordan() can take the place of dn() in linalgcas lib.

Also, armed with jordan decomposition, I wrote an algorithm that computes the generalized functions of matrices. matfunc(A, f(var), var) can replace both expmat() and pwrmat() in the original library. What's more, now I'm able to symbolically analyze sin(A*t), cos(A*t), log(A), sinh(A), etc.

Note: 1. when handling large matrices that do not have good eigenvalues, the function would sometimes fail, because the built-in cZeros and cPolyroots are working falsely. But if you input a 11*11 matrix with eigenvalues 1,2 and 3, my functions work perfectly.
2. if the matrix is diagonalizable, Jordan() is the same as diagonalization()

Thanks for Philippe's amazing groundwork.   

Cheers,
Jim



2011/11/29 Jim Fullerenex <smoa...@gmail.com>
Jordan canonical form and functions of matrices.jpg

Atcy

unread,
Jan 26, 2013, 6:10:56 AM1/26/13
to tins...@googlegroups.com
Hello everyone,

I know this is an old thread, but I wondered if the library containing this algorithm is available somewhere. It would help me a lot!

Best regards! 
Reply all
Reply to author
Forward
0 new messages