Purpose
=======
LA_GEEVX computes for a real or complex square matrix A, the
eigenvalues and, optionally, the left and/or right eigenvectors.
Optionally, it also balances A and computes reciprocal condition
numbers for the eigenvalues and right eigenvectors.
A right eigenvector v(j) of A satisfies
A * v(j) = lambda(j) * v(j)
where lambda(j) is its eigenvalue. A left eigenvector u(j) of A
satisffies
u(j)^H * A = lambda(j) * u(j)^H
where u(j)^H denotes the conjugate-transpose of u(j). The computed
eigenvectors are normalized to have Euclidean norm equal to 1 and
largest component real.
Balancing A involves permuting its rows and columns to make
it more nearly upper triangular and then scaling rows and columns by
a diagonal similarity transformation to reduce the condition numbers
of the eigenvalues and eigenvectors.
Computed reciprocal condition numbers pertain to the matrix
after balancing. Permuting does not change condition numbers (in
exact arithmetic), but scaling does.
=========
SUBROUTINE LA_GEEVX( A, , VL=vl, VR=vr, BALANC=balanc, ILO=ilo, &
IHI=ihi, SCALE=scale, ABNRM=abnrm, RCONDE=rconde, &
RCONDV=rcondv, INFO=info )
(), INTENT(INOUT) :: A(:,:)
(), INTENT(OUT) ::
(), INTENT(OUT), OPTIONAL :: VL(:,:), VR(:,:)
CHARACTER(LEN=1), INTENT(IN), OPTIONAL :: BALANC
INTEGER, INTENT(OUT), OPTIONAL :: ILO, IHI
REAL(), INTENT(OUT), OPTIONAL :: SCALE(:), ABNRM, &
RCONDE(:), RCONDV(:)
INTEGER, INTENT(OUT), OPTIONAL :: INFO
where
::= REAL | COMPLEX
::= KIND(1.0) | KIND(1.0D0)
::= WR, WI | W
::= WR(:), WI(:) | W(:)
Arguments
=========
A (input/output) REAL or COMPLEX square array, shape (:,:).
On entry, the matrix A.
On exit, the contents of A are destroyed.
(output) REAL or COMPLEX array, shape (:) with size(w) =
size(A,1).
The computed eigenvalues.
::= WR(:), WI(:) | W(:),
where
WR(:), WI(:) are of REAL type (for the real and imaginary
parts) and W(:) is of COMPLEX type.
Note: If A is real, then a complex-conjugate pair appear
consecutively, with the eigenvalue having the positive
imaginary part appearing first.
VL Optional (output) REAL or COMPLEX square array, shape (:,:)
with size(VL,1) = size(A,1).
The left eigenvectors u(j) are stored in the columns of VL in
the order of their eigenvalues. Each eigenvector is scaled so
that the Euclidean norm is 1 and the largest component is real.
Note: If A is real then complex eigenvectors, like their
eigenvalues, occur in complex conjugate pairs. The real and
imaginary parts of the first eigenvector of the pair are
stored in VL(:,j) and VL(:,j+1). Thus a complex conjugate pair
is given by
u(j) = VL(:,j) + i*VL(:,j+1), u(j+1) = VL(:,j) - i*VL(:,j+1)
VR Optional (output) REAL or COMPLEX square array, shape (:,:)
with size(VR,1) = size(A,1).
The right eigenvectors v(j) are stored in the columns of VR in
the order of their eigenvalues.
Each eigenvector is scaled so that the Euclidean norm is 1 and
the largest component is real.
Note: If A is real then complex eigenvectors, like their
eigenvalues, occur in complex conjugate pairs. The real and
imaginary parts of the first eigenvector of the pair are stored
in VR(:,j) and VR(:,j+1). Thus a complex conjugate pair is
given by
v(j) = VR(:,j) + i*VR(:,j+1), v(j+1) = VR(:,j) - i*VR(:,j+1)
BALANC Optional (input) CHARACTER(LEN=1).
Indicates whether the input matrix should be permuted and/or
diagonally scaled.
= 'N': Do not permute or scale;
= 'P': Permute but do not scale;
= 'S': Scale but do not permute;
= 'B': Both permute and scale.
Default value: 'N'.
ILO,IHI Optional (output) INTEGER.
ILO and IHI are determined when A is balanced. The balanced
A(i,j) = 0 if i > j and j = 1, ..., ILO-1 or
i = IHI+1, ... , size(A,1).
SCALE Optional (output) REAL array, shape (:) with size(SCALE) =
size(A,1).
Details of the permutations and scaling factors applied when
balancing A. If P(j) is the index of the row and column
interchanged with row and column j, and D(j) is the
scaling factor applied to row and column j, then
P(j) = SCALE(j), j = 1, ..., ILO-1 and j =IHI+1, ..., n
D(j) = SCALE(j), j = ILO, ... , IHI.
ABNRM Optional (output) REAL.
The l1 norm of the balanced matrix (the maximum of the sum
of absolute values of elements of any column).
RCONDE Optional (output) REAL array, shape (:) with size(RCONDE) =
size(A,1). RCONDE(j) is the reciprocal condition number of
the j-th eigenvalue.
RCONDV Optional (output) REAL array, shape (:), size(RCONDV) =
size(A,1). RCONDV(j) is the reciprocal condition number of
the j-th right eigenvector.
INFO Optional (output) INTEGER.
= 0: successful exit.
< 0: if INFO = -i, the i-th argument had an illegal value.
> 0: if INFO = i, the QR algorithm failed to compute all the
eigenvalues and no eigenvectors or condition numbers were
computed; elements 1:ILO-1 and i+1:n of contain
eigenvalues which have converged.
If INFO is not present and an error occurs, then the program
is terminated with an error message.