Functions | |
| double precision function | dlansy (norm, uplo, n, a, lda, work) |
| DLANSY returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a real symmetric matrix. | |
| subroutine | dlaqsy (uplo, n, a, lda, s, scond, amax, equed) |
| DLAQSY scales a symmetric/Hermitian matrix, using scaling factors computed by spoequ. | |
| subroutine | dlasy2 (ltranl, ltranr, isgn, n1, n2, tl, ldtl, tr, ldtr, b, ldb, scale, x, ldx, xnorm, info) |
| DLASY2 solves the Sylvester matrix equation where the matrices are of order 1 or 2. | |
| subroutine | dsyswapr (uplo, n, a, lda, i1, i2) |
| DSYSWAPR applies an elementary permutation on the rows and columns of a symmetric matrix. | |
| subroutine | dtgsy2 (trans, ijob, m, n, a, lda, b, ldb, c, ldc, d, ldd, e, lde, f, ldf, scale, rdsum, rdscal, iwork, pq, info) |
| DTGSY2 solves the generalized Sylvester equation (unblocked algorithm). | |
This is the group of double auxiliary functions for SY matrices
| double precision function dlansy | ( | character | norm, |
| character | uplo, | ||
| integer | n, | ||
| double precision, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| double precision, dimension( * ) | work ) |
DLANSY returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a real symmetric matrix.
Download DLANSY + dependencies [TGZ] [ZIP] [TXT]
!> !> DLANSY returns the value of the one norm, or the Frobenius norm, or !> the infinity norm, or the element of largest absolute value of a !> real symmetric matrix A. !>
!> !> DLANSY = ( max(abs(A(i,j))), NORM = 'M' or 'm' !> ( !> ( norm1(A), NORM = '1', 'O' or 'o' !> ( !> ( normI(A), NORM = 'I' or 'i' !> ( !> ( normF(A), NORM = 'F', 'f', 'E' or 'e' !> !> where norm1 denotes the one norm of a matrix (maximum column sum), !> normI denotes the infinity norm of a matrix (maximum row sum) and !> normF denotes the Frobenius norm of a matrix (square root of sum of !> squares). Note that max(abs(A(i,j))) is not a consistent matrix norm. !>
| [in] | NORM | !> NORM is CHARACTER*1 !> Specifies the value to be returned in DLANSY as described !> above. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the upper or lower triangular part of the !> symmetric matrix A is to be referenced. !> = 'U': Upper triangular part of A is referenced !> = 'L': Lower triangular part of A is referenced !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. When N = 0, DLANSY is !> set to zero. !> |
| [in] | A | !> A is DOUBLE PRECISION array, dimension (LDA,N) !> The symmetric matrix A. If UPLO = 'U', the leading n by n !> upper triangular part of A contains the upper triangular part !> of the matrix A, and the strictly lower triangular part of A !> is not referenced. If UPLO = 'L', the leading n by n lower !> triangular part of A contains the lower triangular part of !> the matrix A, and the strictly upper triangular part of A is !> not referenced. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(N,1). !> |
| [out] | WORK | !> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)), !> where LWORK >= N when NORM = 'I' or '1' or 'O'; otherwise, !> WORK is not referenced. !> |
Definition at line 121 of file dlansy.f.
| subroutine dlaqsy | ( | character | uplo, |
| integer | n, | ||
| double precision, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| double precision, dimension( * ) | s, | ||
| double precision | scond, | ||
| double precision | amax, | ||
| character | equed ) |
DLAQSY scales a symmetric/Hermitian matrix, using scaling factors computed by spoequ.
Download DLAQSY + dependencies [TGZ] [ZIP] [TXT]
!> !> DLAQSY equilibrates a symmetric matrix A using the scaling factors !> in the vector S. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the upper or lower triangular part of the !> symmetric matrix A is stored. !> = 'U': Upper triangular !> = 'L': Lower triangular !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is DOUBLE PRECISION array, dimension (LDA,N) !> On entry, the symmetric matrix A. If UPLO = 'U', the leading !> n by n upper triangular part of A contains the upper !> triangular part of the matrix A, and the strictly lower !> triangular part of A is not referenced. If UPLO = 'L', the !> leading n by n lower triangular part of A contains the lower !> triangular part of the matrix A, and the strictly upper !> triangular part of A is not referenced. !> !> On exit, if EQUED = 'Y', the equilibrated matrix: !> diag(S) * A * diag(S). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(N,1). !> |
| [in] | S | !> S is DOUBLE PRECISION array, dimension (N) !> The scale factors for A. !> |
| [in] | SCOND | !> SCOND is DOUBLE PRECISION !> Ratio of the smallest S(i) to the largest S(i). !> |
| [in] | AMAX | !> AMAX is DOUBLE PRECISION !> Absolute value of largest matrix entry. !> |
| [out] | EQUED | !> EQUED is CHARACTER*1 !> Specifies whether or not equilibration was done. !> = 'N': No equilibration. !> = 'Y': Equilibration was done, i.e., A has been replaced by !> diag(S) * A * diag(S). !> |
!> THRESH is a threshold value used to decide if scaling should be done !> based on the ratio of the scaling factors. If SCOND < THRESH, !> scaling is done. !> !> LARGE and SMALL are threshold values used to decide if scaling should !> be done based on the absolute size of the largest matrix element. !> If AMAX > LARGE or AMAX < SMALL, scaling is done. !>
Definition at line 132 of file dlaqsy.f.
| subroutine dlasy2 | ( | logical | ltranl, |
| logical | ltranr, | ||
| integer | isgn, | ||
| integer | n1, | ||
| integer | n2, | ||
| double precision, dimension( ldtl, * ) | tl, | ||
| integer | ldtl, | ||
| double precision, dimension( ldtr, * ) | tr, | ||
| integer | ldtr, | ||
| double precision, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| double precision | scale, | ||
| double precision, dimension( ldx, * ) | x, | ||
| integer | ldx, | ||
| double precision | xnorm, | ||
| integer | info ) |
DLASY2 solves the Sylvester matrix equation where the matrices are of order 1 or 2.
Download DLASY2 + dependencies [TGZ] [ZIP] [TXT]
!> !> DLASY2 solves for the N1 by N2 matrix X, 1 <= N1,N2 <= 2, in !> !> op(TL)*X + ISGN*X*op(TR) = SCALE*B, !> !> where TL is N1 by N1, TR is N2 by N2, B is N1 by N2, and ISGN = 1 or !> -1. op(T) = T or T**T, where T**T denotes the transpose of T. !>
| [in] | LTRANL | !> LTRANL is LOGICAL !> On entry, LTRANL specifies the op(TL): !> = .FALSE., op(TL) = TL, !> = .TRUE., op(TL) = TL**T. !> |
| [in] | LTRANR | !> LTRANR is LOGICAL !> On entry, LTRANR specifies the op(TR): !> = .FALSE., op(TR) = TR, !> = .TRUE., op(TR) = TR**T. !> |
| [in] | ISGN | !> ISGN is INTEGER !> On entry, ISGN specifies the sign of the equation !> as described before. ISGN may only be 1 or -1. !> |
| [in] | N1 | !> N1 is INTEGER !> On entry, N1 specifies the order of matrix TL. !> N1 may only be 0, 1 or 2. !> |
| [in] | N2 | !> N2 is INTEGER !> On entry, N2 specifies the order of matrix TR. !> N2 may only be 0, 1 or 2. !> |
| [in] | TL | !> TL is DOUBLE PRECISION array, dimension (LDTL,2) !> On entry, TL contains an N1 by N1 matrix. !> |
| [in] | LDTL | !> LDTL is INTEGER !> The leading dimension of the matrix TL. LDTL >= max(1,N1). !> |
| [in] | TR | !> TR is DOUBLE PRECISION array, dimension (LDTR,2) !> On entry, TR contains an N2 by N2 matrix. !> |
| [in] | LDTR | !> LDTR is INTEGER !> The leading dimension of the matrix TR. LDTR >= max(1,N2). !> |
| [in] | B | !> B is DOUBLE PRECISION array, dimension (LDB,2) !> On entry, the N1 by N2 matrix B contains the right-hand !> side of the equation. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the matrix B. LDB >= max(1,N1). !> |
| [out] | SCALE | !> SCALE is DOUBLE PRECISION !> On exit, SCALE contains the scale factor. SCALE is chosen !> less than or equal to 1 to prevent the solution overflowing. !> |
| [out] | X | !> X is DOUBLE PRECISION array, dimension (LDX,2) !> On exit, X contains the N1 by N2 solution. !> |
| [in] | LDX | !> LDX is INTEGER !> The leading dimension of the matrix X. LDX >= max(1,N1). !> |
| [out] | XNORM | !> XNORM is DOUBLE PRECISION !> On exit, XNORM is the infinity-norm of the solution. !> |
| [out] | INFO | !> INFO is INTEGER !> On exit, INFO is set to !> 0: successful exit. !> 1: TL and TR have too close eigenvalues, so TL or !> TR is perturbed to get a nonsingular equation. !> NOTE: In the interests of speed, this routine does not !> check the inputs for errors. !> |
Definition at line 172 of file dlasy2.f.
| subroutine dsyswapr | ( | character | uplo, |
| integer | n, | ||
| double precision, dimension( lda, n ) | a, | ||
| integer | lda, | ||
| integer | i1, | ||
| integer | i2 ) |
DSYSWAPR applies an elementary permutation on the rows and columns of a symmetric matrix.
Download DSYSWAPR + dependencies [TGZ] [ZIP] [TXT]
!> !> DSYSWAPR applies an elementary permutation on the rows and the columns of !> a symmetric matrix. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the details of the factorization are stored !> as an upper or lower triangular matrix. !> = 'U': Upper triangular, form is A = U*D*U**T; !> = 'L': Lower triangular, form is A = L*D*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is DOUBLE PRECISION array, dimension (LDA,N) !> On entry, the NB diagonal matrix D and the multipliers !> used to obtain the factor U or L as computed by DSYTRF. !> !> On exit, if INFO = 0, the (symmetric) inverse of the original !> matrix. If UPLO = 'U', the upper triangular part of the !> inverse is formed and the part of A below the diagonal is not !> referenced; if UPLO = 'L' the lower triangular part of the !> inverse is formed and the part of A above the diagonal is !> not referenced. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | I1 | !> I1 is INTEGER !> Index of the first row to swap !> |
| [in] | I2 | !> I2 is INTEGER !> Index of the second row to swap !> |
Definition at line 101 of file dsyswapr.f.
| subroutine dtgsy2 | ( | character | trans, |
| integer | ijob, | ||
| integer | m, | ||
| integer | n, | ||
| double precision, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| double precision, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| double precision, dimension( ldc, * ) | c, | ||
| integer | ldc, | ||
| double precision, dimension( ldd, * ) | d, | ||
| integer | ldd, | ||
| double precision, dimension( lde, * ) | e, | ||
| integer | lde, | ||
| double precision, dimension( ldf, * ) | f, | ||
| integer | ldf, | ||
| double precision | scale, | ||
| double precision | rdsum, | ||
| double precision | rdscal, | ||
| integer, dimension( * ) | iwork, | ||
| integer | pq, | ||
| integer | info ) |
DTGSY2 solves the generalized Sylvester equation (unblocked algorithm).
Download DTGSY2 + dependencies [TGZ] [ZIP] [TXT]
!> !> DTGSY2 solves the generalized Sylvester equation: !> !> A * R - L * B = scale * C (1) !> D * R - L * E = scale * F, !> !> using Level 1 and 2 BLAS. where R and L are unknown M-by-N matrices, !> (A, D), (B, E) and (C, F) are given matrix pairs of size M-by-M, !> N-by-N and M-by-N, respectively, with real entries. (A, D) and (B, E) !> must be in generalized Schur canonical form, i.e. A, B are upper !> quasi triangular and D, E are upper triangular. The solution (R, L) !> overwrites (C, F). 0 <= SCALE <= 1 is an output scaling factor !> chosen to avoid overflow. !> !> In matrix notation solving equation (1) corresponds to solve !> Z*x = scale*b, where Z is defined as !> !> Z = [ kron(In, A) -kron(B**T, Im) ] (2) !> [ kron(In, D) -kron(E**T, Im) ], !> !> Ik is the identity matrix of size k and X**T is the transpose of X. !> kron(X, Y) is the Kronecker product between the matrices X and Y. !> In the process of solving (1), we solve a number of such systems !> where Dim(In), Dim(In) = 1 or 2. !> !> If TRANS = 'T', solve the transposed system Z**T*y = scale*b for y, !> which is equivalent to solve for R and L in !> !> A**T * R + D**T * L = scale * C (3) !> R * B**T + L * E**T = scale * -F !> !> This case is used to compute an estimate of Dif[(A, D), (B, E)] = !> sigma_min(Z) using reverse communication with DLACON. !> !> DTGSY2 also (IJOB >= 1) contributes to the computation in DTGSYL !> of an upper bound on the separation between to matrix pairs. Then !> the input (A, D), (B, E) are sub-pencils of the matrix pair in !> DTGSYL. See DTGSYL for details. !>
| [in] | TRANS | !> TRANS is CHARACTER*1 !> = 'N': solve the generalized Sylvester equation (1). !> = 'T': solve the 'transposed' system (3). !> |
| [in] | IJOB | !> IJOB is INTEGER !> Specifies what kind of functionality to be performed. !> = 0: solve (1) only. !> = 1: A contribution from this subsystem to a Frobenius !> norm-based estimate of the separation between two matrix !> pairs is computed. (look ahead strategy is used). !> = 2: A contribution from this subsystem to a Frobenius !> norm-based estimate of the separation between two matrix !> pairs is computed. (DGECON on sub-systems is used.) !> Not referenced if TRANS = 'T'. !> |
| [in] | M | !> M is INTEGER !> On entry, M specifies the order of A and D, and the row !> dimension of C, F, R and L. !> |
| [in] | N | !> N is INTEGER !> On entry, N specifies the order of B and E, and the column !> dimension of C, F, R and L. !> |
| [in] | A | !> A is DOUBLE PRECISION array, dimension (LDA, M) !> On entry, A contains an upper quasi triangular matrix. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the matrix A. LDA >= max(1, M). !> |
| [in] | B | !> B is DOUBLE PRECISION array, dimension (LDB, N) !> On entry, B contains an upper quasi triangular matrix. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the matrix B. LDB >= max(1, N). !> |
| [in,out] | C | !> C is DOUBLE PRECISION array, dimension (LDC, N) !> On entry, C contains the right-hand-side of the first matrix !> equation in (1). !> On exit, if IJOB = 0, C has been overwritten by the !> solution R. !> |
| [in] | LDC | !> LDC is INTEGER !> The leading dimension of the matrix C. LDC >= max(1, M). !> |
| [in] | D | !> D is DOUBLE PRECISION array, dimension (LDD, M) !> On entry, D contains an upper triangular matrix. !> |
| [in] | LDD | !> LDD is INTEGER !> The leading dimension of the matrix D. LDD >= max(1, M). !> |
| [in] | E | !> E is DOUBLE PRECISION array, dimension (LDE, N) !> On entry, E contains an upper triangular matrix. !> |
| [in] | LDE | !> LDE is INTEGER !> The leading dimension of the matrix E. LDE >= max(1, N). !> |
| [in,out] | F | !> F is DOUBLE PRECISION array, dimension (LDF, N) !> On entry, F contains the right-hand-side of the second matrix !> equation in (1). !> On exit, if IJOB = 0, F has been overwritten by the !> solution L. !> |
| [in] | LDF | !> LDF is INTEGER !> The leading dimension of the matrix F. LDF >= max(1, M). !> |
| [out] | SCALE | !> SCALE is DOUBLE PRECISION !> On exit, 0 <= SCALE <= 1. If 0 < SCALE < 1, the solutions !> R and L (C and F on entry) will hold the solutions to a !> slightly perturbed system but the input matrices A, B, D and !> E have not been changed. If SCALE = 0, R and L will hold the !> solutions to the homogeneous system with C = F = 0. Normally, !> SCALE = 1. !> |
| [in,out] | RDSUM | !> RDSUM is DOUBLE PRECISION !> On entry, the sum of squares of computed contributions to !> the Dif-estimate under computation by DTGSYL, where the !> scaling factor RDSCAL (see below) has been factored out. !> On exit, the corresponding sum of squares updated with the !> contributions from the current sub-system. !> If TRANS = 'T' RDSUM is not touched. !> NOTE: RDSUM only makes sense when DTGSY2 is called by DTGSYL. !> |
| [in,out] | RDSCAL | !> RDSCAL is DOUBLE PRECISION !> On entry, scaling factor used to prevent overflow in RDSUM. !> On exit, RDSCAL is updated w.r.t. the current contributions !> in RDSUM. !> If TRANS = 'T', RDSCAL is not touched. !> NOTE: RDSCAL only makes sense when DTGSY2 is called by !> DTGSYL. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (M+N+2) !> |
| [out] | PQ | !> PQ is INTEGER !> On exit, the number of subsystems (of size 2-by-2, 4-by-4 and !> 8-by-8) solved by this routine. !> |
| [out] | INFO | !> INFO is INTEGER !> On exit, if INFO is set to !> =0: Successful exit !> <0: If INFO = -i, the i-th argument had an illegal value. !> >0: The matrix pairs (A, D) and (B, E) have common or very !> close eigenvalues. !> |
Definition at line 271 of file dtgsy2.f.