_______________________________________________
NumPy-Discussion mailing list
NumPy-Di...@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion
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
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 <pge0...@studserv.uni-leipzig.de
> <mailto:pge0...@studserv.uni-leipzig.de>>
> NumPy-Di...@scipy.org <mailto:NumPy-Di...@scipy.org>
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
Let's call M the mass matrix and N the modal mass matrix. Then
X**T*M*X=N. If X (matrix of eigenvectors) is normalized with respect to
M, N is I (unity) so it just mean that X**T*M*X=I. That is what octave
and matlab give you.
For this to be true. x**T*M*x=1 must be true for each column x of X.
Thus if y is the not normalized eigenvector.
a*y**T*M*a*y=1
a**2 * y**T*M*y=1
a**2 = 1/(y**T*M*y)
For me the question, why X diagonalizes M and K at the same time, remains.
Another hint. If the matrizes are hermitian (symmetric if real) you can
use scipy.linalg.eigh, which gives you result with correct
normalization.
Best regards
Lennart
_______________________________________________
NumPy-Discussion mailing list
NumPy-Di...@scipy.org