Hello Marcelo,
the problem of finding numerically the eigenvalues and
specially the eigenvectors of a matrix is very difficult.
The main reason is that even if the eigenvalues depend continuously
on the matrix (as complex numbers), the eigenvectors (and their number)
do not!
Take for example the matrix M(a,b):=[1,a,0;0,1,b;0,0,1].
M(a,b) has only one eigenvalue (1) but for any nonzero number eps:
M(eps,0) has 2 eigenvectors: [1,0,0], [0,0,1]
M(0,eps) has 2 eigenvectors: [1,0,0], [0,1,0]
M(0,0) has 3 eigenvectors: [1,0,0], [0,1,0],[0,0,1].
If we know only an approximation of a matrix A, it is impossible
to give approximations for its eigenvectors!
However, if A has distinct eigenvalues then the situation changes:
the eigenvectors can be approximated but using several precautions
because the linear system (A-kI)x=0 is very unstable. If k is an
eigenvalue then det(A-kI)=0 but because of the roundoff errors, the
determinant could be evaluated as nonzero and so x=0!
In Derive, the following method is used by APPROX_EIGENVECTOR
to compute the eigenvector corresponding to the eigenvalue k:
x := SIGN ( (A-kI)^(-1).b ) where b is a kind of arbitrary (random) vector.
(in fact ROW_REDUCE is used to invert A-kI).
It is assumed that k is only an approximation of the eigenvalue, otherwise
(A-kI) would be singular.
This approach is justified by the fact (from operator calculus) that if b
is not in the range of A-kI, then
LIM( SIGN( (A-tI)^(-1).b ), t, k)
exists and it is an eigenvector.
A problem appears when k is too close to the exact eigenvalue.
You will have to apply a small perturbation or increase PrecisionDigits.
For example, use APPROX_EIGENVECTOR(A, APPROX(k,PrecisionDigits-2)).
Another (less likely) problem appears if b is in the range of A-kI:
you will have to change it.
Of course there exists better methods to compute eigenvectors
but APPROX_EIGENVECTOR has the advantage of being very simple.
P.S. The programs in eigenvals.dfw have several bugs and I do
not recommand to use them; for example EIGENVALS(M(0,0.01))
approximates to [1,100,1].
I hope that this rather long answer will help.
Cheers,
Valeriu
______________________________________________________________________
Do you want a free e-mail for life ? Get it at http://www.personal.ro/
|