Purpose
To reorder the diagonal blocks of the principal submatrix between the indices KL and KU (KU >= KL) of a real Schur form matrix A together with their eigenvalues, using orthogonal similarity transformations, such that the block specified by KU is moved in the position KL. The transformations are optionally postmultiplied in a given matrix X.Specification
SUBROUTINE MB03RX( JOBV, N, KL, KU, A, LDA, X, LDX, WR, WI, $ DWORK ) C .. Scalar Arguments .. CHARACTER JOBV INTEGER KL, KU, LDA, LDX, N C .. Array Arguments .. DOUBLE PRECISION A(LDA,*), DWORK(*), WI(*), WR(*), X(LDX,*)Arguments
Mode Parameters
JOBV CHARACTER*1 Specifies whether or not the transformations are accumulated, as follows: = 'N': The transformations are not accumulated; = 'V': The transformations are accumulated in X (the given matrix X is updated).Input/Output Parameters
N (input) INTEGER The order of the matrices A and X. N >= 0. KL (input) INTEGER The lower boundary index for the rows and columns of the principal submatrix of A whose diagonal blocks are to be reordered, and also the target position for the block to be moved. 1 <= KL <= KU <= N. KU (input/output) INTEGER On entry, KU specifies the upper boundary index for the rows and columns of the principal submatrix of A whose diagonal blocks are to be reordered, and also the original position for the block to be moved. 1 <= KL <= KU <= N. On exit, KU specifies the upper boundary index for the rows and columns of the principal submatrix of A whose diagonal blocks have been reordered. The given value will be increased by 1 if the moved block was 2-by-2 and it has been replaced by two 1-by-1 blocks. Otherwise, its input value is preserved. A (input/output) DOUBLE PRECISION array, dimension (LDA,N) On entry, the leading N-by-N part of this array must contain the matrix A in real Schur canonical form. On exit, the leading N-by-N part of this array contains the ordered real Schur canonical form. LDA INTEGER The leading dimension of array A. LDA >= MAX(1,N). X (input/output) DOUBLE PRECISION array, dimension (LDX,N) On entry, if JOBV = 'V', the leading N-by-N part of this array must contain a given matrix X. On exit, if JOBV = 'V', the leading N-by-N part of this array contains the product of the given matrix X and the transformation matrix that performed the reordering of A. If JOBV = 'N', this array is not referenced. LDX INTEGER The leading dimension of array X. LDX >= 1, if JOBV = 'N'; LDX >= MAX(1,N), if JOBV = 'V'. WR, (input/output) DOUBLE PRECISION arrays, dimension (N) WI On entry, these arrays must contain the real and imaginary parts, respectively, of the eigenvalues of the matrix A. On exit, these arrays contain the real and imaginary parts, respectively, of the eigenvalues of the matrix A, possibly reordered.Workspace
DWORK DOUBLE PRECISION array, dimension (N)Method
An attempt is made to move the block in the position (KU,KU) to the position (KL,KL) by a sequence of orthogonal similarity transformations, each swapping two consecutive blocks. The standard algorithm [1], [2] usually succeeds to perform this reordering. A failure of this algorithm means that two consecutive blocks (one of them being the desired block possibly moved) are too close to swap. In such a case, the leading block of the two is tried to be moved in the position (KL,KL) and the procedure is repeated.References
[1] Stewart, G.W. HQR3 and EXCHQZ: FORTRAN subroutines for calculating and ordering the eigenvalues of a real upper Hessenberg matrix. ACM TOMS, 2, pp. 275-280, 1976. [2] Anderson, E., Bai, Z., Bischof, C., Demmel, J., Dongarra, J., Du Croz, J., Greenbaum, A., Hammarling, S., McKenney, A., Ostrouchov, S., and Sorensen, D. LAPACK Users' Guide: Second Edition. SIAM, Philadelphia, 1995.Numerical Aspects
The algorithm is numerically stable. If some eigenvalues are ill-conditioned, their returned values could differ much from their input values.Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None