YEE@rcgl1.eng.ohio-state.edu (Roger Yee) (11/10/90)
Hi there, I just got a 48sx and in a class we do alot of matrix manipulations. The two I'm primarily interested in is eiganvalues and eiganvectors of a matrix. I can't seem to find a book on a method of doing this and I hate going to campus just to do homework when my calculator probably can do this. Can anyone help? I know that Bill Wickes did something like this for the 28 has he done it for the 48sx? Thanks in advance, Roger Yee (YEE@RCGL1.ENG.OHIO-STATE.EDU)
jc@atcmp.nl (Jan Christiaan van Winkel) (11/11/90)
From article <6132@quanta.eng.ohio-state.edu>, by YEE@rcgl1.eng.ohio-state.edu (Roger Yee): > Hi there, > > I just got a 48sx and in a class we do alot of matrix manipulations. The > two I'm primarily interested in is eiganvalues and eiganvectors of a matrix. Sorry for correcting you - the name is eigenvalue and eigenvector. the word 'eigen' stems from dutch and means something like 'own' or 'self'. I am proud that at least a few words from my not so widespread language (about 20M people speak it) make it in international disciplins! :-) Happy computing! JC -- ___ __ ____________________________________________________________________ |/ \ Jan Christiaan van Winkel Tel: +31 80 566880 jc@atcmp.nl | AT Computing P.O. Box 1428 6501 BK Nijmegen The Netherlands __/ \__/ ____________________________________________________________________
jmorriso@ee.ubc.ca (John Paul Morrison) (11/13/90)
The Eigenvector, eigenvalue problem is fairly easy.
write this program:
<< A I L * - DET >>
Put your matrix in A, the identity matrix in I and then hit solve.
It helps to try and get a reasonable guess first.
This isn't exactly an EFFICIENT method, but it is EASY to do!
Eigenvectors are more tricky:
you have to calculate A-LI where L is the eigenvalue in question.
you can't just put a zero vector on the stack and divide to get the answer.
You will just get the trivial zero solution.
Instead: find INV(A-L*I).
You will get a weird looking matrix, since a division by zero was done
somewhere.
But you can scale the matrix down, and you will have n linearly
dependent solutions.
The column vectors of the matrix are the eigenvectors. With a bit of
common sense,
(ie fiddling) you should be able to see how many INdependent
eigenvectors there are.
To get the column vectors try this short program I wrote:
it is A\->V
%%HP: T(3)A(D)F(.);
\<< TRN ARRY\-> LIST\->
DROP DUP 1 - NEG \->
n m m1
\<< m n 1 - * 1 + n
FOR i m \->ARRY i
ROLLD m1
STEP n
\>>
\>>
and the reverse process V\->A
takes n vectors and puts them in a matrix
%%HP: T(3)A(D)F(.);
\<< OVER SIZE 1 GET
DUP 1 - \-> n m m1
\<< n m n 1 - * 1 +
FOR i i ROLL
ARRY\-> DROP m1
STEP { n m }
\->ARRY TRN
\>>
\>>
***both these programs have trivial bugs which I have no intention of
fixing right now.
A\->V won't work for a 1 * n matrix. V\->A won't work for 1 dimensional
vecotrs. If you don't
like it, don't do it.
Putting it all together:
calculate A I L * - INV A\->V
which gives n vectors. Divide any vector by it absolute value or its row
norm (RNRM) and
then you have an eigenvector that is normalized or scaled to a useful
value.