# [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.)

Andrew

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
eigenvalue
>     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
largest
>     element of each eigenvector to 1.
>
>     I believe you can get it like that. If U is a Matrix with
normalization
>     factors it is diagonal and Z.A contains the normalized column
vectors.
>     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
diagonal.
>     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

```