[Numpy-discussion] Getting non-normalized eigenvectors from generalized eigenvalue solution?

Andrew Jaffe a.h.jaffe at gmail.com
Wed Dec 21 07:31:14 EST 2011

Just to be completely clear, there is no such thing as a 
"non-normalized" eigenvector. An eigenvector is only determined *up to a 
scalar normalization*, which is obvious from the eigenvalue equation:

A v = l v

where A is the matrix, l is the eigenvalue, and v is the eigenvector. 
Obviously v is only determined up to a constant factor. A given eigen 
routine can return anything at all, but there is no native 
"non-normalized" version.

Traditionally, you can decide to return "normalized" eigenvectors with 
the scalar factor determined by norm(v)=1 for some suitable norm. (I 
could imagine that an algorithm could depend on that.)


On 21/12/2011 07:01, Olivier Delalleau wrote:
 > Aaah, thanks a lot Lennart, I knew there had to be some logic to
 > Octave's output, but I couldn't see it...
 > -=- Olivier
 > 2011/12/21 Lennart Fricke <pge08aqw at studserv.uni-leipzig.de
 > <mailto:pge08aqw at studserv.uni-leipzig.de>>
 >     Dear Fahreddın,
 >     I think, the norm of the eigenvectors corresponds to some generic
 >     amplitude. But that is something you cannot extract from the 
solution of
 >     the eigenvalue problem but it depends on the initial deflection or
 >     velocities.
 >     So I think you should be able to use the normalized values just 
as well
 >     as the non-, un- or not normalized ones.
 >     Octave seems to normalize that way that, transpose(Z).B.Z=I, 
where Z is
 >     the matrix of eigenvectors, B is matrix B of the generalized 
 >     problem and I is the identity. It uses lapack functions. But 
that's only
 >     true if A,B are symmetric. If not it normalizes the magnitude of 
 >     element of each eigenvector to 1.
 >     I believe you can get it like that. If U is a Matrix with 
 >     factors it is diagonal and Z.A contains the normalized column 
 >     then it is:
 >       transpose(Z.A).B.Z.A
 >     =transpose(A).transpose(Z).B.Z.A
 >     =A.transpose(Z).B.Z.A=I
 >     and thus invert(A).invert(A)=transpose(Z).B.Z
 >     As A is diagonal invert(A) has the reciprocal elements on the 
 >     So you can easily extract them
 >     A=diag(1/sqrt(diag(transpose(Z).B.Z)))
 >     I hope that's correct.
 >     Best Regards
 >     Lennart
 >     _______________________________________________
 >     NumPy-Discussion mailing list
 >     NumPy-Discussion at scipy.org <mailto:NumPy-Discussion at scipy.org>
 >     http://mail.scipy.org/mailman/listinfo/numpy-discussion
 > _______________________________________________
 > NumPy-Discussion mailing list
 > NumPy-Discussion at scipy.org
 > http://mail.scipy.org/mailman/listinfo/numpy-discussion

More information about the NumPy-Discussion mailing list