A few things to note:
By definition
A·v = λ·v
, eigenvectors are not uniquenot unique. You can multiply by any constant and still get another valid eigenvector.The convention in MATLABThe convention in MATLAB is that for
eig(A)
, the eigenvectors are scaled so that the norm of each is 1.0, and foreig(A,B)
, the eigenvectors are not normalized (see heresee here for an example). Here is the relevant part in the documentation:V
: right eigenvectors, returned as a square matrix whose columns are the right eigenvectors ofA
or generalized right eigenvectors of the pair(A,B)
. The form and normalization ofV
depends on the combination of input arguments:[V,D] = eig(A)
returns matrixV
, whose columns are the right eigenvectors ofA
such thatA*V = V*D
. The eigenvectors inV
are normalized so that the 2-norm of each is 1.[V,D] = eig(A,'nobalance')
also returns matrixV
. However, the 2-norm of each eigenvector is not necessarily 1.[V,D] = eig(A,B)
and[V,D] = eig(A,B,algorithm)
returnsV
as a matrix whose columns are the generalized right eigenvectors that satisfyA*V = B*V*D
. The 2-norm of each eigenvector is not necessarily 1. In this case,D
contains the generalized eigenvalues of the pair(A,B)
, along the main diagonal.If
A
is symmetric andB
is symmetric positive definite, then the eigenvectors inV
are normalized so that the 2-norm of each is
In addition, eigenvalues are notnot sortedsorted. You are only guaranteed that the columns of
V
are the corresponding right eigenvectors to the eigenvalues inD
. That's not the same assvd
.In fact, there is no total ordering of complex numbers. The convention in MATLAB is that the
sort
function sorts complex elements first by magnitude (i.e.abs(x)
), then by phase angle on the[-pi,pi]
interval (i.e.angle(x)
) if magnitudes are equal.
Having considered the above, when solving the generalized eigenvalue problem, you should be getting similar results to MATLAB by using DGGEV routine in LAPACK.