Functions | |
| subroutine | sla_syamv (uplo, n, alpha, a, lda, x, incx, beta, y, incy) |
| SLA_SYAMV computes a matrix-vector product using a symmetric indefinite matrix to calculate error bounds. | |
| real function | sla_syrcond (uplo, n, a, lda, af, ldaf, ipiv, cmode, c, info, work, iwork) |
| SLA_SYRCOND estimates the Skeel condition number for a symmetric indefinite matrix. | |
| subroutine | sla_syrfsx_extended (prec_type, uplo, n, nrhs, a, lda, af, ldaf, ipiv, colequ, c, b, ldb, y, ldy, berr_out, n_norms, err_bnds_norm, err_bnds_comp, res, ayb, dy, y_tail, rcond, ithresh, rthresh, dz_ub, ignore_cwise, info) |
| SLA_SYRFSX_EXTENDED improves the computed solution to a system of linear equations for symmetric indefinite matrices by performing extra-precise iterative refinement and provides error bounds and backward error estimates for the solution. | |
| real function | sla_syrpvgrw (uplo, n, info, a, lda, af, ldaf, ipiv, work) |
| SLA_SYRPVGRW computes the reciprocal pivot growth factor norm(A)/norm(U) for a symmetric indefinite matrix. | |
| subroutine | slasyf (uplo, n, nb, kb, a, lda, ipiv, w, ldw, info) |
| SLASYF computes a partial factorization of a real symmetric matrix using the Bunch-Kaufman diagonal pivoting method. | |
| subroutine | slasyf_aa (uplo, j1, m, nb, a, lda, ipiv, h, ldh, work) |
| SLASYF_AA | |
| subroutine | slasyf_rook (uplo, n, nb, kb, a, lda, ipiv, w, ldw, info) |
| SLASYF_ROOK computes a partial factorization of a real symmetric matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method. | |
| subroutine | ssycon (uplo, n, a, lda, ipiv, anorm, rcond, work, iwork, info) |
| SSYCON | |
| subroutine | ssycon_rook (uplo, n, a, lda, ipiv, anorm, rcond, work, iwork, info) |
| SSYCON_ROOK | |
| subroutine | ssyconv (uplo, way, n, a, lda, ipiv, e, info) |
| SSYCONV | |
| subroutine | ssyequb (uplo, n, a, lda, s, scond, amax, work, info) |
| SSYEQUB | |
| subroutine | ssygs2 (itype, uplo, n, a, lda, b, ldb, info) |
| SSYGS2 reduces a symmetric definite generalized eigenproblem to standard form, using the factorization results obtained from spotrf (unblocked algorithm). | |
| subroutine | ssygst (itype, uplo, n, a, lda, b, ldb, info) |
| SSYGST | |
| subroutine | ssyrfs (uplo, n, nrhs, a, lda, af, ldaf, ipiv, b, ldb, x, ldx, ferr, berr, work, iwork, info) |
| SSYRFS | |
| subroutine | ssyrfsx (uplo, equed, n, nrhs, a, lda, af, ldaf, ipiv, s, b, ldb, x, ldx, rcond, berr, n_err_bnds, err_bnds_norm, err_bnds_comp, nparams, params, work, iwork, info) |
| SSYRFSX | |
| subroutine | ssytd2 (uplo, n, a, lda, d, e, tau, info) |
| SSYTD2 reduces a symmetric matrix to real symmetric tridiagonal form by an orthogonal similarity transformation (unblocked algorithm). | |
| subroutine | ssytf2 (uplo, n, a, lda, ipiv, info) |
| SSYTF2 computes the factorization of a real symmetric indefinite matrix, using the diagonal pivoting method (unblocked algorithm). | |
| subroutine | ssytf2_rook (uplo, n, a, lda, ipiv, info) |
| SSYTF2_ROOK computes the factorization of a real symmetric indefinite matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method (unblocked algorithm). | |
| subroutine | ssytrd (uplo, n, a, lda, d, e, tau, work, lwork, info) |
| SSYTRD | |
| subroutine | ssytrd_2stage (vect, uplo, n, a, lda, d, e, tau, hous2, lhous2, work, lwork, info) |
| SSYTRD_2STAGE | |
| subroutine | ssytrd_sy2sb (uplo, n, kd, a, lda, ab, ldab, tau, work, lwork, info) |
| SSYTRD_SY2SB | |
| subroutine | ssytrf (uplo, n, a, lda, ipiv, work, lwork, info) |
| SSYTRF | |
| subroutine | ssytrf_aa (uplo, n, a, lda, ipiv, work, lwork, info) |
| SSYTRF_AA | |
| subroutine | ssytrf_aa_2stage (uplo, n, a, lda, tb, ltb, ipiv, ipiv2, work, lwork, info) |
| SSYTRF_AA_2STAGE | |
| subroutine | ssytrf_rook (uplo, n, a, lda, ipiv, work, lwork, info) |
| SSYTRF_ROOK | |
| subroutine | ssytri (uplo, n, a, lda, ipiv, work, info) |
| SSYTRI | |
| subroutine | ssytri2 (uplo, n, a, lda, ipiv, work, lwork, info) |
| SSYTRI2 | |
| subroutine | ssytri2x (uplo, n, a, lda, ipiv, work, nb, info) |
| SSYTRI2X | |
| subroutine | ssytri_rook (uplo, n, a, lda, ipiv, work, info) |
| SSYTRI_ROOK | |
| subroutine | ssytrs (uplo, n, nrhs, a, lda, ipiv, b, ldb, info) |
| SSYTRS | |
| subroutine | ssytrs2 (uplo, n, nrhs, a, lda, ipiv, b, ldb, work, info) |
| SSYTRS2 | |
| subroutine | ssytrs_aa (uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork, info) |
| SSYTRS_AA | |
| subroutine | ssytrs_aa_2stage (uplo, n, nrhs, a, lda, tb, ltb, ipiv, ipiv2, b, ldb, info) |
| SSYTRS_AA_2STAGE | |
| subroutine | ssytrs_rook (uplo, n, nrhs, a, lda, ipiv, b, ldb, info) |
| SSYTRS_ROOK | |
| subroutine | stgsyl (trans, ijob, m, n, a, lda, b, ldb, c, ldc, d, ldd, e, lde, f, ldf, scale, dif, work, lwork, iwork, info) |
| STGSYL | |
| subroutine | strsyl (trana, tranb, isgn, m, n, a, lda, b, ldb, c, ldc, scale, info) |
| STRSYL | |
This is the group of real computational functions for SY matrices
| subroutine sla_syamv | ( | integer | uplo, |
| integer | n, | ||
| real | alpha, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( * ) | x, | ||
| integer | incx, | ||
| real | beta, | ||
| real, dimension( * ) | y, | ||
| integer | incy ) |
SLA_SYAMV computes a matrix-vector product using a symmetric indefinite matrix to calculate error bounds.
Download SLA_SYAMV + dependencies [TGZ] [ZIP] [TXT]
!> !> SLA_SYAMV performs the matrix-vector operation !> !> y := alpha*abs(A)*abs(x) + beta*abs(y), !> !> where alpha and beta are scalars, x and y are vectors and A is an !> n by n symmetric matrix. !> !> This function is primarily used in calculating error bounds. !> To protect against underflow during evaluation, components in !> the resulting vector are perturbed away from zero by (N+1) !> times the underflow threshold. To prevent unnecessarily large !> errors for block-structure embedded in general matrices, !> zero components are not perturbed. A zero !> entry is considered if all multiplications involved !> in computing that entry have at least one zero multiplicand. !>
| [in] | UPLO | !> UPLO is INTEGER !> On entry, UPLO specifies whether the upper or lower !> triangular part of the array A is to be referenced as !> follows: !> !> UPLO = BLAS_UPPER Only the upper triangular part of A !> is to be referenced. !> !> UPLO = BLAS_LOWER Only the lower triangular part of A !> is to be referenced. !> !> Unchanged on exit. !> |
| [in] | N | !> N is INTEGER !> On entry, N specifies the number of columns of the matrix A. !> N must be at least zero. !> Unchanged on exit. !> |
| [in] | ALPHA | !> ALPHA is REAL . !> On entry, ALPHA specifies the scalar alpha. !> Unchanged on exit. !> |
| [in] | A | !> A is REAL array, dimension ( LDA, n ). !> Before entry, the leading m by n part of the array A must !> contain the matrix of coefficients. !> Unchanged on exit. !> |
| [in] | LDA | !> LDA is INTEGER !> On entry, LDA specifies the first dimension of A as declared !> in the calling (sub) program. LDA must be at least !> max( 1, n ). !> Unchanged on exit. !> |
| [in] | X | !> X is REAL array, dimension !> ( 1 + ( n - 1 )*abs( INCX ) ) !> Before entry, the incremented array X must contain the !> vector x. !> Unchanged on exit. !> |
| [in] | INCX | !> INCX is INTEGER !> On entry, INCX specifies the increment for the elements of !> X. INCX must not be zero. !> Unchanged on exit. !> |
| [in] | BETA | !> BETA is REAL . !> On entry, BETA specifies the scalar beta. When BETA is !> supplied as zero then Y need not be set on input. !> Unchanged on exit. !> |
| [in,out] | Y | !> Y is REAL array, dimension !> ( 1 + ( n - 1 )*abs( INCY ) ) !> Before entry with BETA non-zero, the incremented array Y !> must contain the vector y. On exit, Y is overwritten by the !> updated vector y. !> |
| [in] | INCY | !> INCY is INTEGER !> On entry, INCY specifies the increment for the elements of !> Y. INCY must not be zero. !> Unchanged on exit. !> |
!> !> Level 2 Blas routine. !> !> -- Written on 22-October-1986. !> Jack Dongarra, Argonne National Lab. !> Jeremy Du Croz, Nag Central Office. !> Sven Hammarling, Nag Central Office. !> Richard Hanson, Sandia National Labs. !> -- Modified for the absolute-value product, April 2006 !> Jason Riedy, UC Berkeley !>
Definition at line 175 of file sla_syamv.f.
| real function sla_syrcond | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| integer | cmode, | ||
| real, dimension( * ) | c, | ||
| integer | info, | ||
| real, dimension( * ) | work, | ||
| integer, dimension( * ) | iwork ) |
SLA_SYRCOND estimates the Skeel condition number for a symmetric indefinite matrix.
Download SLA_SYRCOND + dependencies [TGZ] [ZIP] [TXT]
!> !> SLA_SYRCOND estimates the Skeel condition number of op(A) * op2(C) !> where op2 is determined by CMODE as follows !> CMODE = 1 op2(C) = C !> CMODE = 0 op2(C) = I !> CMODE = -1 op2(C) = inv(C) !> The Skeel condition number cond(A) = norminf( |inv(A)||A| ) !> is computed by computing scaling factors R such that !> diag(R)*A*op2(C) is row equilibrated and computing the standard !> infinity-norm condition number. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The number of linear equations, i.e., the order of the !> matrix A. N >= 0. !> |
| [in] | A | !> A is REAL array, dimension (LDA,N) !> On entry, the N-by-N matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is REAL array, dimension (LDAF,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by SSYTRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by SSYTRF. !> |
| [in] | CMODE | !> CMODE is INTEGER !> Determines op2(C) in the formula op(A) * op2(C) as follows: !> CMODE = 1 op2(C) = C !> CMODE = 0 op2(C) = I !> CMODE = -1 op2(C) = inv(C) !> |
| [in] | C | !> C is REAL array, dimension (N) !> The vector C in the formula op(A) * op2(C). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: Successful exit. !> i > 0: The ith argument is invalid. !> |
| [out] | WORK | !> WORK is REAL array, dimension (3*N). !> Workspace. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (N). !> Workspace. !> |
Definition at line 144 of file sla_syrcond.f.
| subroutine sla_syrfsx_extended | ( | integer | prec_type, |
| character | uplo, | ||
| integer | n, | ||
| integer | nrhs, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| logical | colequ, | ||
| real, dimension( * ) | c, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( ldy, * ) | y, | ||
| integer | ldy, | ||
| real, dimension( * ) | berr_out, | ||
| integer | n_norms, | ||
| real, dimension( nrhs, * ) | err_bnds_norm, | ||
| real, dimension( nrhs, * ) | err_bnds_comp, | ||
| real, dimension( * ) | res, | ||
| real, dimension( * ) | ayb, | ||
| real, dimension( * ) | dy, | ||
| real, dimension( * ) | y_tail, | ||
| real | rcond, | ||
| integer | ithresh, | ||
| real | rthresh, | ||
| real | dz_ub, | ||
| logical | ignore_cwise, | ||
| integer | info ) |
SLA_SYRFSX_EXTENDED improves the computed solution to a system of linear equations for symmetric indefinite matrices by performing extra-precise iterative refinement and provides error bounds and backward error estimates for the solution.
Download SLA_SYRFSX_EXTENDED + dependencies [TGZ] [ZIP] [TXT]
!> !> !> SLA_SYRFSX_EXTENDED improves the computed solution to a system of !> linear equations by performing extra-precise iterative refinement !> and provides error bounds and backward error estimates for the solution. !> This subroutine is called by SSYRFSX to perform iterative refinement. !> In addition to normwise error bound, the code provides maximum !> componentwise error bound if possible. See comments for ERR_BNDS_NORM !> and ERR_BNDS_COMP for details of the error bounds. Note that this !> subroutine is only responsible for setting the second fields of !> ERR_BNDS_NORM and ERR_BNDS_COMP. !>
| [in] | PREC_TYPE | !> PREC_TYPE is INTEGER !> Specifies the intermediate precision to be used in refinement. !> The value is defined by ILAPREC(P) where P is a CHARACTER and P !> = 'S': Single !> = 'D': Double !> = 'I': Indigenous !> = 'X' or 'E': Extra !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The number of linear equations, i.e., the order of the !> matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right-hand-sides, i.e., the number of columns of the !> matrix B. !> |
| [in] | A | !> A is REAL array, dimension (LDA,N) !> On entry, the N-by-N matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is REAL array, dimension (LDAF,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by SSYTRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by SSYTRF. !> |
| [in] | COLEQU | !> COLEQU is LOGICAL !> If .TRUE. then column equilibration was done to A before calling !> this routine. This is needed to compute the solution and error !> bounds correctly. !> |
| [in] | C | !> C is REAL array, dimension (N) !> The column scale factors for A. If COLEQU = .FALSE., C !> is not accessed. If C is input, each element of C should be a power !> of the radix to ensure a reliable solution and error estimates. !> Scaling by powers of the radix does not cause rounding errors unless !> the result underflows or overflows. Rounding errors during scaling !> lead to refining with a matrix that is not equivalent to the !> input matrix, producing error estimates that may not be !> reliable. !> |
| [in] | B | !> B is REAL array, dimension (LDB,NRHS) !> The right-hand-side matrix B. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [in,out] | Y | !> Y is REAL array, dimension (LDY,NRHS) !> On entry, the solution matrix X, as computed by SSYTRS. !> On exit, the improved solution matrix Y. !> |
| [in] | LDY | !> LDY is INTEGER !> The leading dimension of the array Y. LDY >= max(1,N). !> |
| [out] | BERR_OUT | !> BERR_OUT is REAL array, dimension (NRHS) !> On exit, BERR_OUT(j) contains the componentwise relative backward !> error for right-hand-side j from the formula !> max(i) ( abs(RES(i)) / ( abs(op(A_s))*abs(Y) + abs(B_s) )(i) ) !> where abs(Z) is the componentwise absolute value of the matrix !> or vector Z. This is computed by SLA_LIN_BERR. !> |
| [in] | N_NORMS | !> N_NORMS is INTEGER !> Determines which error bounds to return (see ERR_BNDS_NORM !> and ERR_BNDS_COMP). !> If N_NORMS >= 1 return normwise error bounds. !> If N_NORMS >= 2 return componentwise error bounds. !> |
| [in,out] | ERR_BNDS_NORM | !> ERR_BNDS_NORM is REAL array, dimension (NRHS, N_ERR_BNDS)
!> For each right-hand side, this array contains information about
!> various error bounds and condition numbers corresponding to the
!> normwise relative error, which is defined as follows:
!>
!> Normwise relative error in the ith solution vector:
!> max_j (abs(XTRUE(j,i) - X(j,i)))
!> ------------------------------
!> max_j abs(X(j,i))
!>
!> The array is indexed by the type of error information as described
!> below. There currently are up to three pieces of information
!> returned.
!>
!> The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
!> right-hand side.
!>
!> The second index in ERR_BNDS_NORM(:,err) contains the following
!> three fields:
!> err = 1 boolean. Trust the answer if the
!> reciprocal condition number is less than the threshold
!> sqrt(n) * slamch('Epsilon').
!>
!> err = 2 error bound: The estimated forward error,
!> almost certainly within a factor of 10 of the true error
!> so long as the next entry is greater than the threshold
!> sqrt(n) * slamch('Epsilon'). This error bound should only
!> be trusted if the previous boolean is true.
!>
!> err = 3 Reciprocal condition number: Estimated normwise
!> reciprocal condition number. Compared with the threshold
!> sqrt(n) * slamch('Epsilon') to determine if the error
!> estimate is . These reciprocal condition
!> numbers are 1 / (norm(Z^{-1},inf) * norm(Z,inf)) for some
!> appropriately scaled matrix Z.
!> Let Z = S*A, where S scales each row by a power of the
!> radix so all absolute row sums of Z are approximately 1.
!>
!> This subroutine is only responsible for setting the second field
!> above.
!> See Lapack Working Note 165 for further details and extra
!> cautions.
!> |
| [in,out] | ERR_BNDS_COMP | !> ERR_BNDS_COMP is REAL array, dimension (NRHS, N_ERR_BNDS)
!> For each right-hand side, this array contains information about
!> various error bounds and condition numbers corresponding to the
!> componentwise relative error, which is defined as follows:
!>
!> Componentwise relative error in the ith solution vector:
!> abs(XTRUE(j,i) - X(j,i))
!> max_j ----------------------
!> abs(X(j,i))
!>
!> The array is indexed by the right-hand side i (on which the
!> componentwise relative error depends), and the type of error
!> information as described below. There currently are up to three
!> pieces of information returned for each right-hand side. If
!> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
!> ERR_BNDS_COMP is not accessed. If N_ERR_BNDS < 3, then at most
!> the first (:,N_ERR_BNDS) entries are returned.
!>
!> The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
!> right-hand side.
!>
!> The second index in ERR_BNDS_COMP(:,err) contains the following
!> three fields:
!> err = 1 boolean. Trust the answer if the
!> reciprocal condition number is less than the threshold
!> sqrt(n) * slamch('Epsilon').
!>
!> err = 2 error bound: The estimated forward error,
!> almost certainly within a factor of 10 of the true error
!> so long as the next entry is greater than the threshold
!> sqrt(n) * slamch('Epsilon'). This error bound should only
!> be trusted if the previous boolean is true.
!>
!> err = 3 Reciprocal condition number: Estimated componentwise
!> reciprocal condition number. Compared with the threshold
!> sqrt(n) * slamch('Epsilon') to determine if the error
!> estimate is . These reciprocal condition
!> numbers are 1 / (norm(Z^{-1},inf) * norm(Z,inf)) for some
!> appropriately scaled matrix Z.
!> Let Z = S*(A*diag(x)), where x is the solution for the
!> current right-hand side and S scales each row of
!> A*diag(x) by a power of the radix so all absolute row
!> sums of Z are approximately 1.
!>
!> This subroutine is only responsible for setting the second field
!> above.
!> See Lapack Working Note 165 for further details and extra
!> cautions.
!> |
| [in] | RES | !> RES is REAL array, dimension (N) !> Workspace to hold the intermediate residual. !> |
| [in] | AYB | !> AYB is REAL array, dimension (N) !> Workspace. This can be the same workspace passed for Y_TAIL. !> |
| [in] | DY | !> DY is REAL array, dimension (N) !> Workspace to hold the intermediate solution. !> |
| [in] | Y_TAIL | !> Y_TAIL is REAL array, dimension (N) !> Workspace to hold the trailing bits of the intermediate solution. !> |
| [in] | RCOND | !> RCOND is REAL !> Reciprocal scaled condition number. This is an estimate of the !> reciprocal Skeel condition number of the matrix A after !> equilibration (if done). If this is less than the machine !> precision (in particular, if it is zero), the matrix is singular !> to working precision. Note that the error may still be small even !> if this number is very small and the matrix appears ill- !> conditioned. !> |
| [in] | ITHRESH | !> ITHRESH is INTEGER !> The maximum number of residual computations allowed for !> refinement. The default is 10. For 'aggressive' set to 100 to !> permit convergence using approximate factorizations or !> factorizations other than LU. If the factorization uses a !> technique other than Gaussian elimination, the guarantees in !> ERR_BNDS_NORM and ERR_BNDS_COMP may no longer be trustworthy. !> |
| [in] | RTHRESH | !> RTHRESH is REAL
!> Determines when to stop refinement if the error estimate stops
!> decreasing. Refinement will stop when the next solution no longer
!> satisfies norm(dx_{i+1}) < RTHRESH * norm(dx_i) where norm(Z) is
!> the infinity norm of Z. RTHRESH satisfies 0 < RTHRESH <= 1. The
!> default value is 0.5. For 'aggressive' set to 0.9 to permit
!> convergence on extremely ill-conditioned matrices. See LAWN 165
!> for more details.
!> |
| [in] | DZ_UB | !> DZ_UB is REAL !> Determines when to start considering componentwise convergence. !> Componentwise convergence is only considered after each component !> of the solution Y is stable, which we define as the relative !> change in each component being less than DZ_UB. The default value !> is 0.25, requiring the first bit to be stable. See LAWN 165 for !> more details. !> |
| [in] | IGNORE_CWISE | !> IGNORE_CWISE is LOGICAL !> If .TRUE. then ignore componentwise convergence. Default value !> is .FALSE.. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: Successful exit. !> < 0: if INFO = -i, the ith argument to SLA_SYRFSX_EXTENDED had an illegal !> value !> |
Definition at line 389 of file sla_syrfsx_extended.f.
| real function sla_syrpvgrw | ( | character*1 | uplo, |
| integer | n, | ||
| integer | info, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( * ) | work ) |
SLA_SYRPVGRW computes the reciprocal pivot growth factor norm(A)/norm(U) for a symmetric indefinite matrix.
Download SLA_SYRPVGRW + dependencies [TGZ] [ZIP] [TXT]
!> !> !> SLA_SYRPVGRW computes the reciprocal pivot growth factor !> norm(A)/norm(U). The norm is used. If this is !> much less than 1, the stability of the LU factorization of the !> (equilibrated) matrix A could be poor. This also means that the !> solution X, estimated condition numbers, and error bounds could be !> unreliable. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The number of linear equations, i.e., the order of the !> matrix A. N >= 0. !> |
| [in] | INFO | !> INFO is INTEGER !> The value of INFO returned from SSYTRF, .i.e., the pivot in !> column INFO is exactly 0. !> |
| [in] | A | !> A is REAL array, dimension (LDA,N) !> On entry, the N-by-N matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | AF | !> AF is REAL array, dimension (LDAF,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by SSYTRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by SSYTRF. !> |
| [out] | WORK | !> WORK is REAL array, dimension (2*N) !> |
Definition at line 120 of file sla_syrpvgrw.f.
| subroutine slasyf | ( | character | uplo, |
| integer | n, | ||
| integer | nb, | ||
| integer | kb, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( ldw, * ) | w, | ||
| integer | ldw, | ||
| integer | info ) |
SLASYF computes a partial factorization of a real symmetric matrix using the Bunch-Kaufman diagonal pivoting method.
Download SLASYF + dependencies [TGZ] [ZIP] [TXT]
!> !> SLASYF computes a partial factorization of a real symmetric matrix A !> using the Bunch-Kaufman diagonal pivoting method. The partial !> factorization has the form: !> !> A = ( I U12 ) ( A11 0 ) ( I 0 ) if UPLO = 'U', or: !> ( 0 U22 ) ( 0 D ) ( U12**T U22**T ) !> !> A = ( L11 0 ) ( D 0 ) ( L11**T L21**T ) if UPLO = 'L' !> ( L21 I ) ( 0 A22 ) ( 0 I ) !> !> where the order of D is at most NB. The actual order is returned in !> the argument KB, and is either NB or NB-1, or N if N <= NB. !> !> SLASYF is an auxiliary routine called by SSYTRF. It uses blocked code !> (calling Level 3 BLAS) to update the submatrix A11 (if UPLO = 'U') or !> A22 (if UPLO = 'L'). !>
| [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] | NB | !> NB is INTEGER !> The maximum number of columns of the matrix A that should be !> factored. NB should be at least 2 to allow for 2-by-2 pivot !> blocks. !> |
| [out] | KB | !> KB is INTEGER !> The number of columns of A that were actually factored. !> KB is either NB-1 or NB, or N if N <= NB. !> |
| [in,out] | A | !> A is REAL 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, A contains details of the partial factorization. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D. !> !> If UPLO = 'U': !> Only the last KB elements of IPIV are set. !> !> If IPIV(k) > 0, then rows and columns k and IPIV(k) were !> interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) = IPIV(k-1) < 0, then rows and columns !> k-1 and -IPIV(k) were interchanged and D(k-1:k,k-1:k) !> is a 2-by-2 diagonal block. !> !> If UPLO = 'L': !> Only the first KB elements of IPIV are set. !> !> If IPIV(k) > 0, then rows and columns k and IPIV(k) were !> interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) = IPIV(k+1) < 0, then rows and columns !> k+1 and -IPIV(k) were interchanged and D(k:k+1,k:k+1) !> is a 2-by-2 diagonal block. !> |
| [out] | W | !> W is REAL array, dimension (LDW,NB) !> |
| [in] | LDW | !> LDW is INTEGER !> The leading dimension of the array W. LDW >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> > 0: if INFO = k, D(k,k) is exactly zero. The factorization !> has been completed, but the block diagonal matrix D is !> exactly singular. !> |
!> !> November 2013, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !>
Definition at line 175 of file slasyf.f.
| subroutine slasyf_aa | ( | character | uplo, |
| integer | j1, | ||
| integer | m, | ||
| integer | nb, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( ldh, * ) | h, | ||
| integer | ldh, | ||
| real, dimension( * ) | work ) |
SLASYF_AA
Download SLASYF_AA + dependencies [TGZ] [ZIP] [TXT]
!> !> DLATRF_AA factorizes a panel of a real symmetric matrix A using !> the Aasen's algorithm. The panel consists of a set of NB rows of A !> when UPLO is U, or a set of NB columns when UPLO is L. !> !> In order to factorize the panel, the Aasen's algorithm requires the !> last row, or column, of the previous panel. The first row, or column, !> of A is set to be the first row, or column, of an identity matrix, !> which is used to factorize the first panel. !> !> The resulting J-th row of U, or J-th column of L, is stored in the !> (J-1)-th row, or column, of A (without the unit diagonals), while !> the diagonal and subdiagonal of A are overwritten by those of T. !> !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | J1 | !> J1 is INTEGER !> The location of the first row, or column, of the panel !> within the submatrix of A, passed to this routine, e.g., !> when called by SSYTRF_AA, for the first panel, J1 is 1, !> while for the remaining panels, J1 is 2. !> |
| [in] | M | !> M is INTEGER !> The dimension of the submatrix. M >= 0. !> |
| [in] | NB | !> NB is INTEGER !> The dimension of the panel to be facotorized. !> |
| [in,out] | A | !> A is REAL array, dimension (LDA,M) for !> the first panel, while dimension (LDA,M+1) for the !> remaining panels. !> !> On entry, A contains the last row, or column, of !> the previous panel, and the trailing submatrix of A !> to be factorized, except for the first panel, only !> the panel is passed. !> !> On exit, the leading panel is factorized. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (M) !> Details of the row and column interchanges, !> the row and column k were interchanged with the row and !> column IPIV(k). !> |
| [in,out] | H | !> H is REAL workspace, dimension (LDH,NB). !> !> |
| [in] | LDH | !> LDH is INTEGER !> The leading dimension of the workspace H. LDH >= max(1,M). !> |
| [out] | WORK | !> WORK is REAL workspace, dimension (M). !> |
Definition at line 142 of file slasyf_aa.f.
| subroutine slasyf_rook | ( | character | uplo, |
| integer | n, | ||
| integer | nb, | ||
| integer | kb, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( ldw, * ) | w, | ||
| integer | ldw, | ||
| integer | info ) |
SLASYF_ROOK computes a partial factorization of a real symmetric matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method.
Download SLASYF_ROOK + dependencies [TGZ] [ZIP] [TXT]
!> !> SLASYF_ROOK computes a partial factorization of a real symmetric !> matrix A using the bounded Bunch-Kaufman () diagonal !> pivoting method. The partial factorization has the form: !> !> A = ( I U12 ) ( A11 0 ) ( I 0 ) if UPLO = 'U', or: !> ( 0 U22 ) ( 0 D ) ( U12**T U22**T ) !> !> A = ( L11 0 ) ( D 0 ) ( L11**T L21**T ) if UPLO = 'L' !> ( L21 I ) ( 0 A22 ) ( 0 I ) !> !> where the order of D is at most NB. The actual order is returned in !> the argument KB, and is either NB or NB-1, or N if N <= NB. !> !> SLASYF_ROOK is an auxiliary routine called by SSYTRF_ROOK. It uses !> blocked code (calling Level 3 BLAS) to update the submatrix !> A11 (if UPLO = 'U') or A22 (if UPLO = 'L'). !>
| [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] | NB | !> NB is INTEGER !> The maximum number of columns of the matrix A that should be !> factored. NB should be at least 2 to allow for 2-by-2 pivot !> blocks. !> |
| [out] | KB | !> KB is INTEGER !> The number of columns of A that were actually factored. !> KB is either NB-1 or NB, or N if N <= NB. !> |
| [in,out] | A | !> A is REAL 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, A contains details of the partial factorization. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D. !> !> If UPLO = 'U': !> Only the last KB elements of IPIV are set. !> !> If IPIV(k) > 0, then rows and columns k and IPIV(k) were !> interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) < 0 and IPIV(k-1) < 0, then rows and !> columns k and -IPIV(k) were interchanged and rows and !> columns k-1 and -IPIV(k-1) were inerchaged, !> D(k-1:k,k-1:k) is a 2-by-2 diagonal block. !> !> If UPLO = 'L': !> Only the first KB elements of IPIV are set. !> !> If IPIV(k) > 0, then rows and columns k and IPIV(k) !> were interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) < 0 and IPIV(k+1) < 0, then rows and !> columns k and -IPIV(k) were interchanged and rows and !> columns k+1 and -IPIV(k+1) were inerchaged, !> D(k:k+1,k:k+1) is a 2-by-2 diagonal block. !> |
| [out] | W | !> W is REAL array, dimension (LDW,NB) !> |
| [in] | LDW | !> LDW is INTEGER !> The leading dimension of the array W. LDW >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> > 0: if INFO = k, D(k,k) is exactly zero. The factorization !> has been completed, but the block diagonal matrix D is !> exactly singular. !> |
!> !> November 2013, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !>
Definition at line 182 of file slasyf_rook.f.
| subroutine ssycon | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real | anorm, | ||
| real | rcond, | ||
| real, dimension( * ) | work, | ||
| integer, dimension( * ) | iwork, | ||
| integer | info ) |
SSYCON
Download SSYCON + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYCON estimates the reciprocal of the condition number (in the !> 1-norm) of a real symmetric matrix A using the factorization !> A = U*D*U**T or A = L*D*L**T computed by SSYTRF. !> !> An estimate is obtained for norm(inv(A)), and the reciprocal of the !> condition number is computed as RCOND = 1 / (ANORM * norm(inv(A))). !>
| [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] | A | !> A is REAL array, dimension (LDA,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by SSYTRF. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by SSYTRF. !> |
| [in] | ANORM | !> ANORM is REAL !> The 1-norm of the original matrix A. !> |
| [out] | RCOND | !> RCOND is REAL !> The reciprocal of the condition number of the matrix A, !> computed as RCOND = 1/(ANORM * AINVNM), where AINVNM is an !> estimate of the 1-norm of inv(A) computed in this routine. !> |
| [out] | WORK | !> WORK is REAL array, dimension (2*N) !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 128 of file ssycon.f.
| subroutine ssycon_rook | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real | anorm, | ||
| real | rcond, | ||
| real, dimension( * ) | work, | ||
| integer, dimension( * ) | iwork, | ||
| integer | info ) |
SSYCON_ROOK
Download SSYCON_ROOK + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYCON_ROOK estimates the reciprocal of the condition number (in the !> 1-norm) of a real symmetric matrix A using the factorization !> A = U*D*U**T or A = L*D*L**T computed by SSYTRF_ROOK. !> !> An estimate is obtained for norm(inv(A)), and the reciprocal of the !> condition number is computed as RCOND = 1 / (ANORM * norm(inv(A))). !>
| [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] | A | !> A is REAL array, dimension (LDA,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by SSYTRF_ROOK. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by SSYTRF_ROOK. !> |
| [in] | ANORM | !> ANORM is REAL !> The 1-norm of the original matrix A. !> |
| [out] | RCOND | !> RCOND is REAL !> The reciprocal of the condition number of the matrix A, !> computed as RCOND = 1/(ANORM * AINVNM), where AINVNM is an !> estimate of the 1-norm of inv(A) computed in this routine. !> |
| [out] | WORK | !> WORK is REAL array, dimension (2*N) !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> December 2016, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !>
Definition at line 142 of file ssycon_rook.f.
| subroutine ssyconv | ( | character | uplo, |
| character | way, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( * ) | e, | ||
| integer | info ) |
SSYCONV
Download SSYCONV + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYCONV convert A given by TRF into L and D and vice-versa. !> Get Non-diag elements of D (returned in workspace) and !> apply or reverse permutation done in TRF. !>
| [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] | WAY | !> WAY is CHARACTER*1 !> = 'C': Convert !> = 'R': Revert !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is REAL array, dimension (LDA,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by SSYTRF. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by SSYTRF. !> |
| [out] | E | !> E is REAL array, dimension (N) !> E stores the supdiagonal/subdiagonal of the symmetric 1-by-1 !> or 2-by-2 block diagonal matrix D in LDLT. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 113 of file ssyconv.f.
| subroutine ssyequb | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( * ) | s, | ||
| real | scond, | ||
| real | amax, | ||
| real, dimension( * ) | work, | ||
| integer | info ) |
SSYEQUB
Download SSYEQUB + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYEQUB computes row and column scalings intended to equilibrate a !> symmetric matrix A (with respect to the Euclidean norm) and reduce !> its condition number. The scale factors S are computed by the BIN !> algorithm (see references) so that the scaled matrix B with elements !> B(i,j) = S(i)*A(i,j)*S(j) has a condition number within a factor N of !> the smallest possible condition number over all possible diagonal !> scalings. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | A | !> A is REAL array, dimension (LDA,N) !> The N-by-N symmetric matrix whose scaling factors are to be !> computed. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | S | !> S is REAL array, dimension (N) !> If INFO = 0, S contains the scale factors for A. !> |
| [out] | SCOND | !> SCOND is REAL !> If INFO = 0, S contains the ratio of the smallest S(i) to !> the largest S(i). If SCOND >= 0.1 and AMAX is neither too !> large nor too small, it is not worth scaling by S. !> |
| [out] | AMAX | !> AMAX is REAL !> Largest absolute value of any matrix element. If AMAX is !> very close to overflow or very close to underflow, the !> matrix should be scaled. !> |
| [out] | WORK | !> WORK is REAL array, dimension (2*N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, the i-th diagonal element is nonpositive. !> |
Definition at line 130 of file ssyequb.f.
| subroutine ssygs2 | ( | integer | itype, |
| character | uplo, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | info ) |
SSYGS2 reduces a symmetric definite generalized eigenproblem to standard form, using the factorization results obtained from spotrf (unblocked algorithm).
Download SSYGS2 + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYGS2 reduces a real symmetric-definite generalized eigenproblem !> to standard form. !> !> If ITYPE = 1, the problem is A*x = lambda*B*x, !> and A is overwritten by inv(U**T)*A*inv(U) or inv(L)*A*inv(L**T) !> !> If ITYPE = 2 or 3, the problem is A*B*x = lambda*x or !> B*A*x = lambda*x, and A is overwritten by U*A*U**T or L**T *A*L. !> !> B must have been previously factorized as U**T *U or L*L**T by SPOTRF. !>
| [in] | ITYPE | !> ITYPE is INTEGER !> = 1: compute inv(U**T)*A*inv(U) or inv(L)*A*inv(L**T); !> = 2 or 3: compute U*A*U**T or L**T *A*L. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> Specifies whether the upper or lower triangular part of the !> symmetric matrix A is stored, and how B has been factorized. !> = 'U': Upper triangular !> = 'L': Lower triangular !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A and B. N >= 0. !> |
| [in,out] | A | !> A is REAL 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 INFO = 0, the transformed matrix, stored in the !> same format as A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | B | !> B is REAL array, dimension (LDB,N) !> The triangular factor from the Cholesky factorization of B, !> as returned by SPOTRF. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit. !> < 0: if INFO = -i, the i-th argument had an illegal value. !> |
Definition at line 126 of file ssygs2.f.
| subroutine ssygst | ( | integer | itype, |
| character | uplo, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | info ) |
SSYGST
Download SSYGST + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYGST reduces a real symmetric-definite generalized eigenproblem !> to standard form. !> !> If ITYPE = 1, the problem is A*x = lambda*B*x, !> and A is overwritten by inv(U**T)*A*inv(U) or inv(L)*A*inv(L**T) !> !> If ITYPE = 2 or 3, the problem is A*B*x = lambda*x or !> B*A*x = lambda*x, and A is overwritten by U*A*U**T or L**T*A*L. !> !> B must have been previously factorized as U**T*U or L*L**T by SPOTRF. !>
| [in] | ITYPE | !> ITYPE is INTEGER !> = 1: compute inv(U**T)*A*inv(U) or inv(L)*A*inv(L**T); !> = 2 or 3: compute U*A*U**T or L**T*A*L. !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored and B is factored as !> U**T*U; !> = 'L': Lower triangle of A is stored and B is factored as !> L*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices A and B. N >= 0. !> |
| [in,out] | A | !> A is REAL 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 INFO = 0, the transformed matrix, stored in the !> same format as A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | B | !> B is REAL array, dimension (LDB,N) !> The triangular factor from the Cholesky factorization of B, !> as returned by SPOTRF. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 126 of file ssygst.f.
| subroutine ssyrfs | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( ldx, * ) | x, | ||
| integer | ldx, | ||
| real, dimension( * ) | ferr, | ||
| real, dimension( * ) | berr, | ||
| real, dimension( * ) | work, | ||
| integer, dimension( * ) | iwork, | ||
| integer | info ) |
SSYRFS
Download SSYRFS + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYRFS improves the computed solution to a system of linear !> equations when the coefficient matrix is symmetric indefinite, and !> provides error bounds and backward error estimates for the solution. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrices B and X. NRHS >= 0. !> |
| [in] | A | !> A is REAL 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(1,N). !> |
| [in] | AF | !> AF is REAL array, dimension (LDAF,N) !> The factored form of the matrix A. AF contains the block !> diagonal matrix D and the multipliers used to obtain the !> factor U or L from the factorization A = U*D*U**T or !> A = L*D*L**T as computed by SSYTRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by SSYTRF. !> |
| [in] | B | !> B is REAL array, dimension (LDB,NRHS) !> The right hand side matrix B. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [in,out] | X | !> X is REAL array, dimension (LDX,NRHS) !> On entry, the solution matrix X, as computed by SSYTRS. !> On exit, the improved solution matrix X. !> |
| [in] | LDX | !> LDX is INTEGER !> The leading dimension of the array X. LDX >= max(1,N). !> |
| [out] | FERR | !> FERR is REAL array, dimension (NRHS) !> The estimated forward error bound for each solution vector !> X(j) (the j-th column of the solution matrix X). !> If XTRUE is the true solution corresponding to X(j), FERR(j) !> is an estimated upper bound for the magnitude of the largest !> element in (X(j) - XTRUE) divided by the magnitude of the !> largest element in X(j). The estimate is as reliable as !> the estimate for RCOND, and is almost always a slight !> overestimate of the true error. !> |
| [out] | BERR | !> BERR is REAL array, dimension (NRHS) !> The componentwise relative backward error of each solution !> vector X(j) (i.e., the smallest relative change in !> any element of A or B that makes X(j) an exact solution). !> |
| [out] | WORK | !> WORK is REAL array, dimension (3*N) !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> ITMAX is the maximum number of steps of iterative refinement. !>
Definition at line 189 of file ssyrfs.f.
| subroutine ssyrfsx | ( | character | uplo, |
| character | equed, | ||
| integer | n, | ||
| integer | nrhs, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldaf, * ) | af, | ||
| integer | ldaf, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( * ) | s, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( ldx, * ) | x, | ||
| integer | ldx, | ||
| real | rcond, | ||
| real, dimension( * ) | berr, | ||
| integer | n_err_bnds, | ||
| real, dimension( nrhs, * ) | err_bnds_norm, | ||
| real, dimension( nrhs, * ) | err_bnds_comp, | ||
| integer | nparams, | ||
| real, dimension( * ) | params, | ||
| real, dimension( * ) | work, | ||
| integer, dimension( * ) | iwork, | ||
| integer | info ) |
SSYRFSX
Download SSYRFSX + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYRFSX improves the computed solution to a system of linear !> equations when the coefficient matrix is symmetric indefinite, and !> provides error bounds and backward error estimates for the !> solution. In addition to normwise error bound, the code provides !> maximum componentwise error bound if possible. See comments for !> ERR_BNDS_NORM and ERR_BNDS_COMP for details of the error bounds. !> !> The original system of linear equations may have been equilibrated !> before calling this routine, as described by arguments EQUED and S !> below. In this case, the solution and error bounds returned are !> for the original unequilibrated system. !>
!> Some optional parameters are bundled in the PARAMS array. These !> settings determine how refinement is performed, but often the !> defaults are acceptable. If the defaults are acceptable, users !> can pass NPARAMS = 0 which prevents the source code from accessing !> the PARAMS argument. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | EQUED | !> EQUED is CHARACTER*1 !> Specifies the form of equilibration that was done to A !> before calling this routine. This is needed to compute !> the solution and error bounds correctly. !> = 'N': No equilibration !> = 'Y': Both row and column equilibration, i.e., A has been !> replaced by diag(S) * A * diag(S). !> The right hand side B has been changed accordingly. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrices B and X. NRHS >= 0. !> |
| [in] | A | !> A is REAL 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(1,N). !> |
| [in] | AF | !> AF is REAL array, dimension (LDAF,N) !> The factored form of the matrix A. AF contains the block !> diagonal matrix D and the multipliers used to obtain the !> factor U or L from the factorization A = U*D*U**T or A = !> L*D*L**T as computed by SSYTRF. !> |
| [in] | LDAF | !> LDAF is INTEGER !> The leading dimension of the array AF. LDAF >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by SSYTRF. !> |
| [in,out] | S | !> S is REAL array, dimension (N) !> The scale factors for A. If EQUED = 'Y', A is multiplied on !> the left and right by diag(S). S is an input argument if FACT = !> 'F'; otherwise, S is an output argument. If FACT = 'F' and EQUED !> = 'Y', each element of S must be positive. If S is output, each !> element of S is a power of the radix. If S is input, each element !> of S should be a power of the radix to ensure a reliable solution !> and error estimates. Scaling by powers of the radix does not cause !> rounding errors unless the result underflows or overflows. !> Rounding errors during scaling lead to refining with a matrix that !> is not equivalent to the input matrix, producing error estimates !> that may not be reliable. !> |
| [in] | B | !> B is REAL array, dimension (LDB,NRHS) !> The right hand side matrix B. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [in,out] | X | !> X is REAL array, dimension (LDX,NRHS) !> On entry, the solution matrix X, as computed by SGETRS. !> On exit, the improved solution matrix X. !> |
| [in] | LDX | !> LDX is INTEGER !> The leading dimension of the array X. LDX >= max(1,N). !> |
| [out] | RCOND | !> RCOND is REAL !> Reciprocal scaled condition number. This is an estimate of the !> reciprocal Skeel condition number of the matrix A after !> equilibration (if done). If this is less than the machine !> precision (in particular, if it is zero), the matrix is singular !> to working precision. Note that the error may still be small even !> if this number is very small and the matrix appears ill- !> conditioned. !> |
| [out] | BERR | !> BERR is REAL array, dimension (NRHS) !> Componentwise relative backward error. This is the !> componentwise relative backward error of each solution vector X(j) !> (i.e., the smallest relative change in any element of A or B that !> makes X(j) an exact solution). !> |
| [in] | N_ERR_BNDS | !> N_ERR_BNDS is INTEGER !> Number of error bounds to return for each right hand side !> and each type (normwise or componentwise). See ERR_BNDS_NORM and !> ERR_BNDS_COMP below. !> |
| [out] | ERR_BNDS_NORM | !> ERR_BNDS_NORM is REAL array, dimension (NRHS, N_ERR_BNDS)
!> For each right-hand side, this array contains information about
!> various error bounds and condition numbers corresponding to the
!> normwise relative error, which is defined as follows:
!>
!> Normwise relative error in the ith solution vector:
!> max_j (abs(XTRUE(j,i) - X(j,i)))
!> ------------------------------
!> max_j abs(X(j,i))
!>
!> The array is indexed by the type of error information as described
!> below. There currently are up to three pieces of information
!> returned.
!>
!> The first index in ERR_BNDS_NORM(i,:) corresponds to the ith
!> right-hand side.
!>
!> The second index in ERR_BNDS_NORM(:,err) contains the following
!> three fields:
!> err = 1 boolean. Trust the answer if the
!> reciprocal condition number is less than the threshold
!> sqrt(n) * slamch('Epsilon').
!>
!> err = 2 error bound: The estimated forward error,
!> almost certainly within a factor of 10 of the true error
!> so long as the next entry is greater than the threshold
!> sqrt(n) * slamch('Epsilon'). This error bound should only
!> be trusted if the previous boolean is true.
!>
!> err = 3 Reciprocal condition number: Estimated normwise
!> reciprocal condition number. Compared with the threshold
!> sqrt(n) * slamch('Epsilon') to determine if the error
!> estimate is . These reciprocal condition
!> numbers are 1 / (norm(Z^{-1},inf) * norm(Z,inf)) for some
!> appropriately scaled matrix Z.
!> Let Z = S*A, where S scales each row by a power of the
!> radix so all absolute row sums of Z are approximately 1.
!>
!> See Lapack Working Note 165 for further details and extra
!> cautions.
!> |
| [out] | ERR_BNDS_COMP | !> ERR_BNDS_COMP is REAL array, dimension (NRHS, N_ERR_BNDS)
!> For each right-hand side, this array contains information about
!> various error bounds and condition numbers corresponding to the
!> componentwise relative error, which is defined as follows:
!>
!> Componentwise relative error in the ith solution vector:
!> abs(XTRUE(j,i) - X(j,i))
!> max_j ----------------------
!> abs(X(j,i))
!>
!> The array is indexed by the right-hand side i (on which the
!> componentwise relative error depends), and the type of error
!> information as described below. There currently are up to three
!> pieces of information returned for each right-hand side. If
!> componentwise accuracy is not requested (PARAMS(3) = 0.0), then
!> ERR_BNDS_COMP is not accessed. If N_ERR_BNDS < 3, then at most
!> the first (:,N_ERR_BNDS) entries are returned.
!>
!> The first index in ERR_BNDS_COMP(i,:) corresponds to the ith
!> right-hand side.
!>
!> The second index in ERR_BNDS_COMP(:,err) contains the following
!> three fields:
!> err = 1 boolean. Trust the answer if the
!> reciprocal condition number is less than the threshold
!> sqrt(n) * slamch('Epsilon').
!>
!> err = 2 error bound: The estimated forward error,
!> almost certainly within a factor of 10 of the true error
!> so long as the next entry is greater than the threshold
!> sqrt(n) * slamch('Epsilon'). This error bound should only
!> be trusted if the previous boolean is true.
!>
!> err = 3 Reciprocal condition number: Estimated componentwise
!> reciprocal condition number. Compared with the threshold
!> sqrt(n) * slamch('Epsilon') to determine if the error
!> estimate is . These reciprocal condition
!> numbers are 1 / (norm(Z^{-1},inf) * norm(Z,inf)) for some
!> appropriately scaled matrix Z.
!> Let Z = S*(A*diag(x)), where x is the solution for the
!> current right-hand side and S scales each row of
!> A*diag(x) by a power of the radix so all absolute row
!> sums of Z are approximately 1.
!>
!> See Lapack Working Note 165 for further details and extra
!> cautions.
!> |
| [in] | NPARAMS | !> NPARAMS is INTEGER !> Specifies the number of parameters set in PARAMS. If <= 0, the !> PARAMS array is never referenced and default values are used. !> |
| [in,out] | PARAMS | !> PARAMS is REAL array, dimension NPARAMS !> Specifies algorithm parameters. If an entry is < 0.0, then !> that entry will be filled with default value used for that !> parameter. Only positions up to NPARAMS are accessed; defaults !> are used for higher-numbered parameters. !> !> PARAMS(LA_LINRX_ITREF_I = 1) : Whether to perform iterative !> refinement or not. !> Default: 1.0 !> = 0.0: No refinement is performed, and no error bounds are !> computed. !> = 1.0: Use the double-precision refinement algorithm, !> possibly with doubled-single computations if the !> compilation environment does not support DOUBLE !> PRECISION. !> (other values are reserved for future use) !> !> PARAMS(LA_LINRX_ITHRESH_I = 2) : Maximum number of residual !> computations allowed for refinement. !> Default: 10 !> Aggressive: Set to 100 to permit convergence using approximate !> factorizations or factorizations other than LU. If !> the factorization uses a technique other than !> Gaussian elimination, the guarantees in !> err_bnds_norm and err_bnds_comp may no longer be !> trustworthy. !> !> PARAMS(LA_LINRX_CWISE_I = 3) : Flag determining if the code !> will attempt to find a solution with small componentwise !> relative error in the double-precision algorithm. Positive !> is true, 0.0 is false. !> Default: 1.0 (attempt componentwise convergence) !> |
| [out] | WORK | !> WORK is REAL array, dimension (4*N) !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: Successful exit. The solution to every right-hand side is !> guaranteed. !> < 0: If INFO = -i, the i-th argument had an illegal value !> > 0 and <= N: U(INFO,INFO) is exactly zero. The factorization !> has been completed, but the factor U is exactly singular, so !> the solution and error bounds could not be computed. RCOND = 0 !> is returned. !> = N+J: The solution corresponding to the Jth right-hand side is !> not guaranteed. The solutions corresponding to other right- !> hand sides K with K > J may not be guaranteed as well, but !> only the first such right-hand side is reported. If a small !> componentwise error is not requested (PARAMS(3) = 0.0) then !> the Jth right-hand side is the first with a normwise error !> bound that is not guaranteed (the smallest J such !> that ERR_BNDS_NORM(J,1) = 0.0). By default (PARAMS(3) = 1.0) !> the Jth right-hand side is the first with either a normwise or !> componentwise error bound that is not guaranteed (the smallest !> J such that either ERR_BNDS_NORM(J,1) = 0.0 or !> ERR_BNDS_COMP(J,1) = 0.0). See the definition of !> ERR_BNDS_NORM(:,1) and ERR_BNDS_COMP(:,1). To get information !> about all of the right-hand sides check ERR_BNDS_NORM or !> ERR_BNDS_COMP. !> |
Definition at line 398 of file ssyrfsx.f.
| subroutine ssytd2 | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( * ) | d, | ||
| real, dimension( * ) | e, | ||
| real, dimension( * ) | tau, | ||
| integer | info ) |
SSYTD2 reduces a symmetric matrix to real symmetric tridiagonal form by an orthogonal similarity transformation (unblocked algorithm).
Download SSYTD2 + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTD2 reduces a real symmetric matrix A to symmetric tridiagonal !> form T by an orthogonal similarity transformation: Q**T * A * Q = T. !>
| [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 REAL 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 UPLO = 'U', the diagonal and first superdiagonal !> of A are overwritten by the corresponding elements of the !> tridiagonal matrix T, and the elements above the first !> superdiagonal, with the array TAU, represent the orthogonal !> matrix Q as a product of elementary reflectors; if UPLO !> = 'L', the diagonal and first subdiagonal of A are over- !> written by the corresponding elements of the tridiagonal !> matrix T, and the elements below the first subdiagonal, with !> the array TAU, represent the orthogonal matrix Q as a product !> of elementary reflectors. See Further Details. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | D | !> D is REAL array, dimension (N) !> The diagonal elements of the tridiagonal matrix T: !> D(i) = A(i,i). !> |
| [out] | E | !> E is REAL array, dimension (N-1) !> The off-diagonal elements of the tridiagonal matrix T: !> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'. !> |
| [out] | TAU | !> TAU is REAL array, dimension (N-1) !> The scalar factors of the elementary reflectors (see Further !> Details). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> |
!> !> If UPLO = 'U', the matrix Q is represented as a product of elementary !> reflectors !> !> Q = H(n-1) . . . H(2) H(1). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**T !> !> where tau is a real scalar, and v is a real vector with !> v(i+1:n) = 0 and v(i) = 1; v(1:i-1) is stored on exit in !> A(1:i-1,i+1), and tau in TAU(i). !> !> If UPLO = 'L', the matrix Q is represented as a product of elementary !> reflectors !> !> Q = H(1) H(2) . . . H(n-1). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**T !> !> where tau is a real scalar, and v is a real vector with !> v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), !> and tau in TAU(i). !> !> The contents of A on exit are illustrated by the following examples !> with n = 5: !> !> if UPLO = 'U': if UPLO = 'L': !> !> ( d e v2 v3 v4 ) ( d ) !> ( d e v3 v4 ) ( e d ) !> ( d e v4 ) ( v1 e d ) !> ( d e ) ( v1 v2 e d ) !> ( d ) ( v1 v2 v3 e d ) !> !> where d and e denote diagonal and off-diagonal elements of T, and vi !> denotes an element of the vector defining H(i). !>
Definition at line 172 of file ssytd2.f.
| subroutine ssytf2 | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| integer | info ) |
SSYTF2 computes the factorization of a real symmetric indefinite matrix, using the diagonal pivoting method (unblocked algorithm).
Download SSYTF2 + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTF2 computes the factorization of a real symmetric matrix A using !> the Bunch-Kaufman diagonal pivoting method: !> !> A = U*D*U**T or A = L*D*L**T !> !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, U**T is the transpose of U, and D is symmetric and !> block diagonal with 1-by-1 and 2-by-2 diagonal blocks. !> !> This is the unblocked version of the algorithm, calling Level 2 BLAS. !>
| [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 REAL 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, the block diagonal matrix D and the multipliers used !> to obtain the factor U or L (see below for further details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D. !> !> If UPLO = 'U': !> If IPIV(k) > 0, then rows and columns k and IPIV(k) were !> interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) = IPIV(k-1) < 0, then rows and columns !> k-1 and -IPIV(k) were interchanged and D(k-1:k,k-1:k) !> is a 2-by-2 diagonal block. !> !> If UPLO = 'L': !> If IPIV(k) > 0, then rows and columns k and IPIV(k) were !> interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) = IPIV(k+1) < 0, then rows and columns !> k+1 and -IPIV(k) were interchanged and D(k:k+1,k:k+1) !> is a 2-by-2 diagonal block. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -k, the k-th argument had an illegal value !> > 0: if INFO = k, D(k,k) is exactly zero. The factorization !> has been completed, but the block diagonal matrix D is !> exactly singular, and division by zero will occur if it !> is used to solve a system of equations. !> |
!> !> If UPLO = 'U', then A = U*D*U**T, where !> U = P(n)*U(n)* ... *P(k)U(k)* ..., !> i.e., U is a product of terms P(k)*U(k), where k decreases from n to !> 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and U(k) is a unit upper triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I v 0 ) k-s !> U(k) = ( 0 I 0 ) s !> ( 0 0 I ) n-k !> k-s s n-k !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k). !> If s = 2, the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k), !> and A(k,k), and v overwrites A(1:k-2,k-1:k). !> !> If UPLO = 'L', then A = L*D*L**T, where !> L = P(1)*L(1)* ... *P(k)*L(k)* ..., !> i.e., L is a product of terms P(k)*L(k), where k increases from 1 to !> n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and L(k) is a unit lower triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I 0 0 ) k-1 !> L(k) = ( 0 I 0 ) s !> ( 0 v I ) n-k-s+1 !> k-1 s n-k-s+1 !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k). !> If s = 2, the lower triangle of D(k) overwrites A(k,k), A(k+1,k), !> and A(k+1,k+1), and v overwrites A(k+2:n,k:k+1). !>
!> !> 09-29-06 - patch from !> Bobby Cheng, MathWorks !> !> Replace l.204 and l.372 !> IF( MAX( ABSAKK, COLMAX ).EQ.ZERO ) THEN !> by !> IF( (MAX( ABSAKK, COLMAX ).EQ.ZERO) .OR. SISNAN(ABSAKK) ) THEN !> !> 01-01-96 - Based on modifications by !> J. Lewis, Boeing Computer Services Company !> A. Petitet, Computer Science Dept., Univ. of Tenn., Knoxville, USA !> 1-96 - Based on modifications by J. Lewis, Boeing Computer Services !> Company !> !>
Definition at line 194 of file ssytf2.f.
| subroutine ssytf2_rook | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| integer | info ) |
SSYTF2_ROOK computes the factorization of a real symmetric indefinite matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method (unblocked algorithm).
Download SSYTF2_ROOK + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTF2_ROOK computes the factorization of a real symmetric matrix A !> using the bounded Bunch-Kaufman () diagonal pivoting method: !> !> A = U*D*U**T or A = L*D*L**T !> !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, U**T is the transpose of U, and D is symmetric and !> block diagonal with 1-by-1 and 2-by-2 diagonal blocks. !> !> This is the unblocked version of the algorithm, calling Level 2 BLAS. !>
| [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 REAL 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, the block diagonal matrix D and the multipliers used !> to obtain the factor U or L (see below for further details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D. !> !> If UPLO = 'U': !> If IPIV(k) > 0, then rows and columns k and IPIV(k) !> were interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) < 0 and IPIV(k-1) < 0, then rows and !> columns k and -IPIV(k) were interchanged and rows and !> columns k-1 and -IPIV(k-1) were inerchaged, !> D(k-1:k,k-1:k) is a 2-by-2 diagonal block. !> !> If UPLO = 'L': !> If IPIV(k) > 0, then rows and columns k and IPIV(k) !> were interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) < 0 and IPIV(k+1) < 0, then rows and !> columns k and -IPIV(k) were interchanged and rows and !> columns k+1 and -IPIV(k+1) were inerchaged, !> D(k:k+1,k:k+1) is a 2-by-2 diagonal block. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -k, the k-th argument had an illegal value !> > 0: if INFO = k, D(k,k) is exactly zero. The factorization !> has been completed, but the block diagonal matrix D is !> exactly singular, and division by zero will occur if it !> is used to solve a system of equations. !> |
!> !> If UPLO = 'U', then A = U*D*U**T, where !> U = P(n)*U(n)* ... *P(k)U(k)* ..., !> i.e., U is a product of terms P(k)*U(k), where k decreases from n to !> 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and U(k) is a unit upper triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I v 0 ) k-s !> U(k) = ( 0 I 0 ) s !> ( 0 0 I ) n-k !> k-s s n-k !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k). !> If s = 2, the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k), !> and A(k,k), and v overwrites A(1:k-2,k-1:k). !> !> If UPLO = 'L', then A = L*D*L**T, where !> L = P(1)*L(1)* ... *P(k)*L(k)* ..., !> i.e., L is a product of terms P(k)*L(k), where k increases from 1 to !> n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and L(k) is a unit lower triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I 0 0 ) k-1 !> L(k) = ( 0 I 0 ) s !> ( 0 v I ) n-k-s+1 !> k-1 s n-k-s+1 !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k). !> If s = 2, the lower triangle of D(k) overwrites A(k,k), A(k+1,k), !> and A(k+1,k+1), and v overwrites A(k+2:n,k:k+1). !>
!> !> November 2013, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !> 01-01-96 - Based on modifications by !> J. Lewis, Boeing Computer Services Company !> A. Petitet, Computer Science Dept., Univ. of Tenn., Knoxville abd , USA !>
Definition at line 193 of file ssytf2_rook.f.
| subroutine ssytrd | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( * ) | d, | ||
| real, dimension( * ) | e, | ||
| real, dimension( * ) | tau, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SSYTRD
Download SSYTRD + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRD reduces a real symmetric matrix A to real symmetric !> tridiagonal form T by an orthogonal similarity transformation: !> Q**T * A * Q = T. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is REAL 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 UPLO = 'U', the diagonal and first superdiagonal !> of A are overwritten by the corresponding elements of the !> tridiagonal matrix T, and the elements above the first !> superdiagonal, with the array TAU, represent the orthogonal !> matrix Q as a product of elementary reflectors; if UPLO !> = 'L', the diagonal and first subdiagonal of A are over- !> written by the corresponding elements of the tridiagonal !> matrix T, and the elements below the first subdiagonal, with !> the array TAU, represent the orthogonal matrix Q as a product !> of elementary reflectors. See Further Details. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | D | !> D is REAL array, dimension (N) !> The diagonal elements of the tridiagonal matrix T: !> D(i) = A(i,i). !> |
| [out] | E | !> E is REAL array, dimension (N-1) !> The off-diagonal elements of the tridiagonal matrix T: !> E(i) = A(i,i+1) if UPLO = 'U', E(i) = A(i+1,i) if UPLO = 'L'. !> |
| [out] | TAU | !> TAU is REAL array, dimension (N-1) !> The scalar factors of the elementary reflectors (see Further !> Details). !> |
| [out] | WORK | !> WORK is REAL array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= 1. !> For optimum performance LWORK >= N*NB, where NB is the !> optimal blocksize. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, and no error !> message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> If UPLO = 'U', the matrix Q is represented as a product of elementary !> reflectors !> !> Q = H(n-1) . . . H(2) H(1). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**T !> !> where tau is a real scalar, and v is a real vector with !> v(i+1:n) = 0 and v(i) = 1; v(1:i-1) is stored on exit in !> A(1:i-1,i+1), and tau in TAU(i). !> !> If UPLO = 'L', the matrix Q is represented as a product of elementary !> reflectors !> !> Q = H(1) H(2) . . . H(n-1). !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**T !> !> where tau is a real scalar, and v is a real vector with !> v(1:i) = 0 and v(i+1) = 1; v(i+2:n) is stored on exit in A(i+2:n,i), !> and tau in TAU(i). !> !> The contents of A on exit are illustrated by the following examples !> with n = 5: !> !> if UPLO = 'U': if UPLO = 'L': !> !> ( d e v2 v3 v4 ) ( d ) !> ( d e v3 v4 ) ( e d ) !> ( d e v4 ) ( v1 e d ) !> ( d e ) ( v1 v2 e d ) !> ( d ) ( v1 v2 v3 e d ) !> !> where d and e denote diagonal and off-diagonal elements of T, and vi !> denotes an element of the vector defining H(i). !>
Definition at line 191 of file ssytrd.f.
| subroutine ssytrd_2stage | ( | character | vect, |
| character | uplo, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( * ) | d, | ||
| real, dimension( * ) | e, | ||
| real, dimension( * ) | tau, | ||
| real, dimension( * ) | hous2, | ||
| integer | lhous2, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SSYTRD_2STAGE
Download SSYTRD_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRD_2STAGE reduces a real symmetric matrix A to real symmetric !> tridiagonal form T by a orthogonal similarity transformation: !> Q1**T Q2**T* A * Q2 * Q1 = T. !>
| [in] | VECT | !> VECT is CHARACTER*1 !> = 'N': No need for the Housholder representation, !> in particular for the second stage (Band to !> tridiagonal) and thus LHOUS2 is of size max(1, 4*N); !> = 'V': the Householder representation is needed to !> either generate Q1 Q2 or to apply Q1 Q2, !> then LHOUS2 is to be queried and computed. !> (NOT AVAILABLE IN THIS RELEASE). !> |
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is REAL 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 UPLO = 'U', the band superdiagonal !> of A are overwritten by the corresponding elements of the !> internal band-diagonal matrix AB, and the elements above !> the KD superdiagonal, with the array TAU, represent the orthogonal !> matrix Q1 as a product of elementary reflectors; if UPLO !> = 'L', the diagonal and band subdiagonal of A are over- !> written by the corresponding elements of the internal band-diagonal !> matrix AB, and the elements below the KD subdiagonal, with !> the array TAU, represent the orthogonal matrix Q1 as a product !> of elementary reflectors. See Further Details. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | D | !> D is REAL array, dimension (N) !> The diagonal elements of the tridiagonal matrix T. !> |
| [out] | E | !> E is REAL array, dimension (N-1) !> The off-diagonal elements of the tridiagonal matrix T. !> |
| [out] | TAU | !> TAU is REAL array, dimension (N-KD) !> The scalar factors of the elementary reflectors of !> the first stage (see Further Details). !> |
| [out] | HOUS2 | !> HOUS2 is REAL array, dimension (LHOUS2) !> Stores the Householder representation of the stage2 !> band to tridiagonal. !> |
| [in] | LHOUS2 | !> LHOUS2 is INTEGER !> The dimension of the array HOUS2. !> If LWORK = -1, or LHOUS2 = -1, !> then a query is assumed; the routine !> only calculates the optimal size of the HOUS2 array, returns !> this value as the first entry of the HOUS2 array, and no error !> message related to LHOUS2 is issued by XERBLA. !> If VECT='N', LHOUS2 = max(1, 4*n); !> if VECT='V', option not yet available. !> |
| [out] | WORK | !> WORK is REAL array, dimension (LWORK) !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK = MAX(1, dimension) !> If LWORK = -1, or LHOUS2=-1, !> then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, and no error !> message related to LWORK is issued by XERBLA. !> LWORK = MAX(1, dimension) where !> dimension = max(stage1,stage2) + (KD+1)*N !> = N*KD + N*max(KD+1,FACTOPTNB) !> + max(2*KD*KD, KD*NTHREADS) !> + (KD+1)*N !> where KD is the blocking size of the reduction, !> FACTOPTNB is the blocking used by the QR or LQ !> algorithm, usually FACTOPTNB=128 is a good choice !> NTHREADS is the number of threads used when !> openMP compilation is enabled, otherwise =1. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> Implemented by Azzam Haidar. !> !> All details are available on technical report, SC11, SC13 papers. !> !> Azzam Haidar, Hatem Ltaief, and Jack Dongarra. !> Parallel reduction to condensed forms for symmetric eigenvalue problems !> using aggregated fine-grained and memory-aware kernels. In Proceedings !> of 2011 International Conference for High Performance Computing, !> Networking, Storage and Analysis (SC '11), New York, NY, USA, !> Article 8 , 11 pages. !> http://doi.acm.org/10.1145/2063384.2063394 !> !> A. Haidar, J. Kurzak, P. Luszczek, 2013. !> An improved parallel singular value algorithm and its implementation !> for multicore hardware, In Proceedings of 2013 International Conference !> for High Performance Computing, Networking, Storage and Analysis (SC '13). !> Denver, Colorado, USA, 2013. !> Article 90, 12 pages. !> http://doi.acm.org/10.1145/2503210.2503292 !> !> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra. !> A novel hybrid CPU-GPU generalized eigensolver for electronic structure !> calculations based on fine-grained memory aware tasks. !> International Journal of High Performance Computing Applications. !> Volume 28 Issue 2, Pages 196-209, May 2014. !> http://hpc.sagepub.com/content/28/2/196 !> !>
Definition at line 222 of file ssytrd_2stage.f.
| subroutine ssytrd_sy2sb | ( | character | uplo, |
| integer | n, | ||
| integer | kd, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldab, * ) | ab, | ||
| integer | ldab, | ||
| real, dimension( * ) | tau, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SSYTRD_SY2SB
Download SSYTRD_SY2SB + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRD_SY2SB reduces a real symmetric matrix A to real symmetric !> band-diagonal form AB by a orthogonal similarity transformation: !> Q**T * A * Q = AB. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | KD | !> KD is INTEGER !> The number of superdiagonals of the reduced matrix if UPLO = 'U', !> or the number of subdiagonals if UPLO = 'L'. KD >= 0. !> The reduced matrix is stored in the array AB. !> |
| [in,out] | A | !> A is REAL 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 UPLO = 'U', the diagonal and first superdiagonal !> of A are overwritten by the corresponding elements of the !> tridiagonal matrix T, and the elements above the first !> superdiagonal, with the array TAU, represent the orthogonal !> matrix Q as a product of elementary reflectors; if UPLO !> = 'L', the diagonal and first subdiagonal of A are over- !> written by the corresponding elements of the tridiagonal !> matrix T, and the elements below the first subdiagonal, with !> the array TAU, represent the orthogonal matrix Q as a product !> of elementary reflectors. See Further Details. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | AB | !> AB is REAL array, dimension (LDAB,N) !> On exit, the upper or lower triangle of the symmetric band !> matrix A, stored in the first KD+1 rows of the array. The !> j-th column of A is stored in the j-th column of the array AB !> as follows: !> if UPLO = 'U', AB(kd+1+i-j,j) = A(i,j) for max(1,j-kd)<=i<=j; !> if UPLO = 'L', AB(1+i-j,j) = A(i,j) for j<=i<=min(n,j+kd). !> |
| [in] | LDAB | !> LDAB is INTEGER !> The leading dimension of the array AB. LDAB >= KD+1. !> |
| [out] | TAU | !> TAU is REAL array, dimension (N-KD) !> The scalar factors of the elementary reflectors (see Further !> Details). !> |
| [out] | WORK | !> WORK is REAL array, dimension (LWORK) !> On exit, if INFO = 0, or if LWORK=-1, !> WORK(1) returns the size of LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK which should be calculated !> by a workspace query. LWORK = MAX(1, LWORK_QUERY) !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, and no error !> message related to LWORK is issued by XERBLA. !> LWORK_QUERY = N*KD + N*max(KD,FACTOPTNB) + 2*KD*KD !> where FACTOPTNB is the blocking used by the QR or LQ !> algorithm, usually FACTOPTNB=128 is a good choice otherwise !> putting LWORK=-1 will provide the size of WORK. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> Implemented by Azzam Haidar. !> !> All details are available on technical report, SC11, SC13 papers. !> !> Azzam Haidar, Hatem Ltaief, and Jack Dongarra. !> Parallel reduction to condensed forms for symmetric eigenvalue problems !> using aggregated fine-grained and memory-aware kernels. In Proceedings !> of 2011 International Conference for High Performance Computing, !> Networking, Storage and Analysis (SC '11), New York, NY, USA, !> Article 8 , 11 pages. !> http://doi.acm.org/10.1145/2063384.2063394 !> !> A. Haidar, J. Kurzak, P. Luszczek, 2013. !> An improved parallel singular value algorithm and its implementation !> for multicore hardware, In Proceedings of 2013 International Conference !> for High Performance Computing, Networking, Storage and Analysis (SC '13). !> Denver, Colorado, USA, 2013. !> Article 90, 12 pages. !> http://doi.acm.org/10.1145/2503210.2503292 !> !> A. Haidar, R. Solca, S. Tomov, T. Schulthess and J. Dongarra. !> A novel hybrid CPU-GPU generalized eigensolver for electronic structure !> calculations based on fine-grained memory aware tasks. !> International Journal of High Performance Computing Applications. !> Volume 28 Issue 2, Pages 196-209, May 2014. !> http://hpc.sagepub.com/content/28/2/196 !> !>
!> !> If UPLO = 'U', the matrix Q is represented as a product of elementary !> reflectors !> !> Q = H(k)**T . . . H(2)**T H(1)**T, where k = n-kd. !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**T !> !> where tau is a real scalar, and v is a real vector with !> v(1:i+kd-1) = 0 and v(i+kd) = 1; conjg(v(i+kd+1:n)) is stored on exit in !> A(i,i+kd+1:n), and tau in TAU(i). !> !> If UPLO = 'L', the matrix Q is represented as a product of elementary !> reflectors !> !> Q = H(1) H(2) . . . H(k), where k = n-kd. !> !> Each H(i) has the form !> !> H(i) = I - tau * v * v**T !> !> where tau is a real scalar, and v is a real vector with !> v(kd+1:i) = 0 and v(i+kd+1) = 1; v(i+kd+2:n) is stored on exit in !> A(i+kd+2:n,i), and tau in TAU(i). !> !> The contents of A on exit are illustrated by the following examples !> with n = 5: !> !> if UPLO = 'U': if UPLO = 'L': !> !> ( ab ab/v1 v1 v1 v1 ) ( ab ) !> ( ab ab/v2 v2 v2 ) ( ab/v1 ab ) !> ( ab ab/v3 v3 ) ( v1 ab/v2 ab ) !> ( ab ab/v4 ) ( v1 v2 ab/v3 ab ) !> ( ab ) ( v1 v2 v3 ab/v4 ab ) !> !> where d and e denote diagonal and off-diagonal elements of T, and vi !> denotes an element of the vector defining H(i). !>
Definition at line 241 of file ssytrd_sy2sb.f.
| subroutine ssytrf | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SSYTRF
Download SSYTRF + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRF computes the factorization of a real symmetric matrix A using !> the Bunch-Kaufman diagonal pivoting method. The form of the !> factorization is !> !> A = U**T*D*U or A = L*D*L**T !> !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, and D is symmetric and block diagonal with !> 1-by-1 and 2-by-2 diagonal blocks. !> !> This is the blocked version of the algorithm, calling Level 3 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is REAL 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, the block diagonal matrix D and the multipliers used !> to obtain the factor U or L (see below for further details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D. !> If IPIV(k) > 0, then rows and columns k and IPIV(k) were !> interchanged and D(k,k) is a 1-by-1 diagonal block. !> If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and !> columns k-1 and -IPIV(k) were interchanged and D(k-1:k,k-1:k) !> is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) = !> IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were !> interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block. !> |
| [out] | WORK | !> WORK is REAL array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The length of WORK. LWORK >=1. For best performance !> LWORK >= N*NB, where NB is the block size returned by ILAENV. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, and no error !> message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, D(i,i) is exactly zero. The factorization !> has been completed, but the block diagonal matrix D is !> exactly singular, and division by zero will occur if it !> is used to solve a system of equations. !> |
!> !> If UPLO = 'U', then A = U**T*D*U, where !> U = P(n)*U(n)* ... *P(k)U(k)* ..., !> i.e., U is a product of terms P(k)*U(k), where k decreases from n to !> 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and U(k) is a unit upper triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I v 0 ) k-s !> U(k) = ( 0 I 0 ) s !> ( 0 0 I ) n-k !> k-s s n-k !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k). !> If s = 2, the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k), !> and A(k,k), and v overwrites A(1:k-2,k-1:k). !> !> If UPLO = 'L', then A = L*D*L**T, where !> L = P(1)*L(1)* ... *P(k)*L(k)* ..., !> i.e., L is a product of terms P(k)*L(k), where k increases from 1 to !> n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and L(k) is a unit lower triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I 0 0 ) k-1 !> L(k) = ( 0 I 0 ) s !> ( 0 v I ) n-k-s+1 !> k-1 s n-k-s+1 !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k). !> If s = 2, the lower triangle of D(k) overwrites A(k,k), A(k+1,k), !> and A(k+1,k+1), and v overwrites A(k+2:n,k:k+1). !>
Definition at line 181 of file ssytrf.f.
| subroutine ssytrf_aa | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SSYTRF_AA
Download SSYTRF_AA + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRF_AA computes the factorization of a real symmetric matrix A !> using the Aasen's algorithm. The form of the factorization is !> !> A = U**T*T*U or A = L*T*L**T !> !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, and T is a symmetric tridiagonal matrix. !> !> This is the blocked version of the algorithm, calling Level 3 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is REAL 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, the tridiagonal matrix is stored in the diagonals !> and the subdiagonals of A just below (or above) the diagonals, !> and L is stored below (or above) the subdiaonals, when UPLO !> is 'L' (or 'U'). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> On exit, it contains the details of the interchanges, i.e., !> the row and column k of A were interchanged with the !> row and column IPIV(k). !> |
| [out] | WORK | !> WORK is REAL array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The length of WORK. LWORK >= MAX(1,2*N). For optimum performance !> LWORK >= N*(1+NB), where NB is the optimal blocksize. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, and no error !> message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> |
Definition at line 131 of file ssytrf_aa.f.
| subroutine ssytrf_aa_2stage | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( * ) | tb, | ||
| integer | ltb, | ||
| integer, dimension( * ) | ipiv, | ||
| integer, dimension( * ) | ipiv2, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SSYTRF_AA_2STAGE
Download SSYTRF_AA_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRF_AA_2STAGE computes the factorization of a real symmetric matrix A !> using the Aasen's algorithm. The form of the factorization is !> !> A = U**T*T*U or A = L*T*L**T !> !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, and T is a symmetric band matrix with the !> bandwidth of NB (NB is internally selected and stored in TB( 1 ), and T is !> LU factorized with partial pivoting). !> !> This is the blocked version of the algorithm, calling Level 3 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is REAL 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, L is stored below (or above) the subdiaonal blocks, !> when UPLO is 'L' (or 'U'). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | TB | !> TB is REAL array, dimension (LTB) !> On exit, details of the LU factorization of the band matrix. !> |
| [in] | LTB | !> LTB is INTEGER !> The size of the array TB. LTB >= 4*N, internally !> used to select NB such that LTB >= (3*NB+1)*N. !> !> If LTB = -1, then a workspace query is assumed; the !> routine only calculates the optimal size of LTB, !> returns this value as the first entry of TB, and !> no error message related to LTB is issued by XERBLA. !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> On exit, it contains the details of the interchanges, i.e., !> the row and column k of A were interchanged with the !> row and column IPIV(k). !> |
| [out] | IPIV2 | !> IPIV2 is INTEGER array, dimension (N) !> On exit, it contains the details of the interchanges, i.e., !> the row and column k of T were interchanged with the !> row and column IPIV(k). !> |
| [out] | WORK | !> WORK is REAL workspace of size LWORK !> |
| [in] | LWORK | !> LWORK is INTEGER !> The size of WORK. LWORK >= N, internally used to select NB !> such that LWORK >= N*NB. !> !> If LWORK = -1, then a workspace query is assumed; the !> routine only calculates the optimal size of the WORK array, !> returns this value as the first entry of the WORK array, and !> no error message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !> > 0: if INFO = i, band LU factorization failed on i-th column !> |
Definition at line 158 of file ssytrf_aa_2stage.f.
| subroutine ssytrf_rook | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SSYTRF_ROOK
Download SSYTRF_ROOK + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRF_ROOK computes the factorization of a real symmetric matrix A !> using the bounded Bunch-Kaufman () diagonal pivoting method. !> The form of the factorization is !> !> A = U*D*U**T or A = L*D*L**T !> !> where U (or L) is a product of permutation and unit upper (lower) !> triangular matrices, and D is symmetric and block diagonal with !> 1-by-1 and 2-by-2 diagonal blocks. !> !> This is the blocked version of the algorithm, calling Level 3 BLAS. !>
| [in] | UPLO | !> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in,out] | A | !> A is REAL 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, the block diagonal matrix D and the multipliers used !> to obtain the factor U or L (see below for further details). !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D. !> !> If UPLO = 'U': !> If IPIV(k) > 0, then rows and columns k and IPIV(k) !> were interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) < 0 and IPIV(k-1) < 0, then rows and !> columns k and -IPIV(k) were interchanged and rows and !> columns k-1 and -IPIV(k-1) were inerchaged, !> D(k-1:k,k-1:k) is a 2-by-2 diagonal block. !> !> If UPLO = 'L': !> If IPIV(k) > 0, then rows and columns k and IPIV(k) !> were interchanged and D(k,k) is a 1-by-1 diagonal block. !> !> If IPIV(k) < 0 and IPIV(k+1) < 0, then rows and !> columns k and -IPIV(k) were interchanged and rows and !> columns k+1 and -IPIV(k+1) were inerchaged, !> D(k:k+1,k:k+1) is a 2-by-2 diagonal block. !> |
| [out] | WORK | !> WORK is REAL array, dimension (MAX(1,LWORK)). !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The length of WORK. LWORK >=1. For best performance !> LWORK >= N*NB, where NB is the block size returned by ILAENV. !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, and no error !> message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, D(i,i) is exactly zero. The factorization !> has been completed, but the block diagonal matrix D is !> exactly singular, and division by zero will occur if it !> is used to solve a system of equations. !> |
!> !> If UPLO = 'U', then A = U*D*U**T, where !> U = P(n)*U(n)* ... *P(k)U(k)* ..., !> i.e., U is a product of terms P(k)*U(k), where k decreases from n to !> 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and U(k) is a unit upper triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I v 0 ) k-s !> U(k) = ( 0 I 0 ) s !> ( 0 0 I ) n-k !> k-s s n-k !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k). !> If s = 2, the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k), !> and A(k,k), and v overwrites A(1:k-2,k-1:k). !> !> If UPLO = 'L', then A = L*D*L**T, where !> L = P(1)*L(1)* ... *P(k)*L(k)* ..., !> i.e., L is a product of terms P(k)*L(k), where k increases from 1 to !> n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 !> and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as !> defined by IPIV(k), and L(k) is a unit lower triangular matrix, such !> that if the diagonal block D(k) is of order s (s = 1 or 2), then !> !> ( I 0 0 ) k-1 !> L(k) = ( 0 I 0 ) s !> ( 0 v I ) n-k-s+1 !> k-1 s n-k-s+1 !> !> If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k). !> If s = 2, the lower triangle of D(k) overwrites A(k,k), A(k+1,k), !> and A(k+1,k+1), and v overwrites A(k+2:n,k:k+1). !>
!> !> June 2016, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !>
Definition at line 207 of file ssytrf_rook.f.
| subroutine ssytri | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( * ) | work, | ||
| integer | info ) |
SSYTRI
Download SSYTRI + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRI computes the inverse of a real symmetric indefinite matrix !> A using the factorization A = U*D*U**T or A = L*D*L**T computed by !> SSYTRF. !>
| [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 REAL array, dimension (LDA,N) !> On entry, the block diagonal matrix D and the multipliers !> used to obtain the factor U or L as computed by SSYTRF. !> !> 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] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by SSYTRF. !> |
| [out] | WORK | !> WORK is REAL array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, D(i,i) = 0; the matrix is singular and its !> inverse could not be computed. !> |
Definition at line 113 of file ssytri.f.
| subroutine ssytri2 | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SSYTRI2
Download SSYTRI2 + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRI2 computes the inverse of a REAL symmetric indefinite matrix !> A using the factorization A = U*D*U**T or A = L*D*L**T computed by !> SSYTRF. SSYTRI2 sets the LEADING DIMENSION of the workspace !> before calling SSYTRI2X that actually computes the inverse. !>
| [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 REAL array, dimension (LDA,N) !> On entry, the block diagonal matrix D and the multipliers !> used to obtain the factor U or L as computed by SSYTRF. !> !> 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] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by SSYTRF. !> |
| [out] | WORK | !> WORK is REAL array, dimension (N+NB+1)*(NB+3) !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. !> WORK is size >= (N+NB+1)*(NB+3) !> If LWORK = -1, then a workspace query is assumed; the routine !> calculates: !> - the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, !> - and no error message related to LWORK is issued by XERBLA. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, D(i,i) = 0; the matrix is singular and its !> inverse could not be computed. !> |
Definition at line 126 of file ssytri2.f.
| subroutine ssytri2x | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( n+nb+1,* ) | work, | ||
| integer | nb, | ||
| integer | info ) |
SSYTRI2X
Download SSYTRI2X + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRI2X computes the inverse of a real symmetric indefinite matrix !> A using the factorization A = U*D*U**T or A = L*D*L**T computed by !> SSYTRF. !>
| [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 REAL array, dimension (LDA,N) !> On entry, the NNB diagonal matrix D and the multipliers !> used to obtain the factor U or L as computed by SSYTRF. !> !> 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] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the NNB structure of D !> as determined by SSYTRF. !> |
| [out] | WORK | !> WORK is REAL array, dimension (N+NB+1,NB+3) !> |
| [in] | NB | !> NB is INTEGER !> Block size !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, D(i,i) = 0; the matrix is singular and its !> inverse could not be computed. !> |
Definition at line 119 of file ssytri2x.f.
| subroutine ssytri_rook | ( | character | uplo, |
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( * ) | work, | ||
| integer | info ) |
SSYTRI_ROOK
Download SSYTRI_ROOK + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRI_ROOK computes the inverse of a real symmetric !> matrix A using the factorization A = U*D*U**T or A = L*D*L**T !> computed by SSYTRF_ROOK. !>
| [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 REAL array, dimension (LDA,N) !> On entry, the block diagonal matrix D and the multipliers !> used to obtain the factor U or L as computed by SSYTRF_ROOK. !> !> 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] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by SSYTRF_ROOK. !> |
| [out] | WORK | !> WORK is REAL array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> > 0: if INFO = i, D(i,i) = 0; the matrix is singular and its !> inverse could not be computed. !> |
!> !> April 2012, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !>
Definition at line 128 of file ssytri_rook.f.
| subroutine ssytrs | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | info ) |
SSYTRS
Download SSYTRS + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRS solves a system of linear equations A*X = B with a real !> symmetric matrix A using the factorization A = U*D*U**T or !> A = L*D*L**T computed by SSYTRF. !>
| [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] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in] | A | !> A is REAL array, dimension (LDA,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by SSYTRF. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by SSYTRF. !> |
| [in,out] | B | !> B is REAL array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 119 of file ssytrs.f.
| subroutine ssytrs2 | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( * ) | work, | ||
| integer | info ) |
SSYTRS2
Download SSYTRS2 + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRS2 solves a system of linear equations A*X = B with a real !> symmetric matrix A using the factorization A = U*D*U**T or !> A = L*D*L**T computed by SSYTRF and converted by SSYCONV. !>
| [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] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in,out] | A | !> A is REAL array, dimension (LDA,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by SSYTRF. !> Note that A is input / output. This might be counter-intuitive, !> and one may think that A is input only. A is input / output. This !> is because, at the start of the subroutine, we permute A in a !> form and then we permute A back to its original form at !> the end. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by SSYTRF. !> |
| [in,out] | B | !> B is REAL array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (N) !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 130 of file ssytrs2.f.
| subroutine ssytrs_aa | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer | info ) |
SSYTRS_AA
Download SSYTRS_AA + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRS_AA solves a system of linear equations A*X = B with a real !> symmetric matrix A using the factorization A = U**T*T*U or !> A = L*T*L**T computed by SSYTRF_AA. !>
| [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**T*T*U; !> = 'L': Lower triangular, form is A = L*T*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in] | A | !> A is REAL array, dimension (LDA,N) !> Details of factors computed by SSYTRF_AA. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges as computed by SSYTRF_AA. !> |
| [in,out] | B | !> B is REAL array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | WORK | !> WORK is REAL array, dimension (MAX(1,LWORK)) !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK >= max(1,3*N-2). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 129 of file ssytrs_aa.f.
| subroutine ssytrs_aa_2stage | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( * ) | tb, | ||
| integer | ltb, | ||
| integer, dimension( * ) | ipiv, | ||
| integer, dimension( * ) | ipiv2, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | info ) |
SSYTRS_AA_2STAGE
Download SSYTRS_AA_2STAGE + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRS_AA_2STAGE solves a system of linear equations A*X = B with a real !> symmetric matrix A using the factorization A = U**T*T*U or !> A = L*T*L**T computed by SSYTRF_AA_2STAGE. !>
| [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**T*T*U; !> = 'L': Lower triangular, form is A = L*T*L**T. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix A. N >= 0. !> |
| [in] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in] | A | !> A is REAL array, dimension (LDA,N) !> Details of factors computed by SSYTRF_AA_2STAGE. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [out] | TB | !> TB is REAL array, dimension (LTB) !> Details of factors computed by SSYTRF_AA_2STAGE. !> |
| [in] | LTB | !> LTB is INTEGER !> The size of the array TB. LTB >= 4*N. !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges as computed by !> SSYTRF_AA_2STAGE. !> |
| [in] | IPIV2 | !> IPIV2 is INTEGER array, dimension (N) !> Details of the interchanges as computed by !> SSYTRF_AA_2STAGE. !> |
| [in,out] | B | !> B is REAL array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
Definition at line 137 of file ssytrs_aa_2stage.f.
| subroutine ssytrs_rook | ( | character | uplo, |
| integer | n, | ||
| integer | nrhs, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| integer, dimension( * ) | ipiv, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| integer | info ) |
SSYTRS_ROOK
Download SSYTRS_ROOK + dependencies [TGZ] [ZIP] [TXT]
!> !> SSYTRS_ROOK solves a system of linear equations A*X = B with !> a real symmetric matrix A using the factorization A = U*D*U**T or !> A = L*D*L**T computed by SSYTRF_ROOK. !>
| [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] | NRHS | !> NRHS is INTEGER !> The number of right hand sides, i.e., the number of columns !> of the matrix B. NRHS >= 0. !> |
| [in] | A | !> A is REAL array, dimension (LDA,N) !> The block diagonal matrix D and the multipliers used to !> obtain the factor U or L as computed by SSYTRF_ROOK. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !> |
| [in] | IPIV | !> IPIV is INTEGER array, dimension (N) !> Details of the interchanges and the block structure of D !> as determined by SSYTRF_ROOK. !> |
| [in,out] | B | !> B is REAL array, dimension (LDB,NRHS) !> On entry, the right hand side matrix B. !> On exit, the solution matrix X. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> |
!> !> April 2012, Igor Kozachenko, !> Computer Science Division, !> University of California, Berkeley !> !> September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, !> School of Mathematics, !> University of Manchester !> !>
Definition at line 134 of file ssytrs_rook.f.
| subroutine stgsyl | ( | character | trans, |
| integer | ijob, | ||
| integer | m, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( ldc, * ) | c, | ||
| integer | ldc, | ||
| real, dimension( ldd, * ) | d, | ||
| integer | ldd, | ||
| real, dimension( lde, * ) | e, | ||
| integer | lde, | ||
| real, dimension( ldf, * ) | f, | ||
| integer | ldf, | ||
| real | scale, | ||
| real | dif, | ||
| real, dimension( * ) | work, | ||
| integer | lwork, | ||
| integer, dimension( * ) | iwork, | ||
| integer | info ) |
STGSYL
Download STGSYL + dependencies [TGZ] [ZIP] [TXT]
!> !> STGSYL solves the generalized Sylvester equation: !> !> A * R - L * B = scale * C (1) !> D * R - L * E = scale * F !> !> 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 (real) 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 (1) is equivalent to solve Zx = scale b, where !> Z is defined as !> !> Z = [ kron(In, A) -kron(B**T, Im) ] (2) !> [ kron(In, D) -kron(E**T, Im) ]. !> !> Here 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. !> !> If TRANS = 'T', STGSYL solves the transposed system Z**T*y = scale*b, !> 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 (TRANS = 'T') is used to compute an one-norm-based estimate !> of Dif[(A,D), (B,E)], the separation between the matrix pairs (A,D) !> and (B,E), using SLACON. !> !> If IJOB >= 1, STGSYL computes a Frobenius norm-based estimate !> of Dif[(A,D),(B,E)]. That is, the reciprocal of a lower bound on the !> reciprocal of the smallest singular value of Z. See [1-2] for more !> information. !> !> This is a level 3 BLAS algorithm. !>
| [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: The functionality of 0 and 3. !> = 2: The functionality of 0 and 4. !> = 3: Only an estimate of Dif[(A,D), (B,E)] is computed. !> (look ahead strategy IJOB = 1 is used). !> = 4: Only an estimate of Dif[(A,D), (B,E)] is computed. !> ( SGECON on sub-systems is used ). !> Not referenced if TRANS = 'T'. !> |
| [in] | M | !> M is INTEGER !> The order of the matrices A and D, and the row dimension of !> the matrices C, F, R and L. !> |
| [in] | N | !> N is INTEGER !> The order of the matrices B and E, and the column dimension !> of the matrices C, F, R and L. !> |
| [in] | A | !> A is REAL array, dimension (LDA, M) !> The upper quasi triangular matrix A. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1, M). !> |
| [in] | B | !> B is REAL array, dimension (LDB, N) !> The upper quasi triangular matrix B. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1, N). !> |
| [in,out] | C | !> C is REAL array, dimension (LDC, N) !> On entry, C contains the right-hand-side of the first matrix !> equation in (1) or (3). !> On exit, if IJOB = 0, 1 or 2, C has been overwritten by !> the solution R. If IJOB = 3 or 4 and TRANS = 'N', C holds R, !> the solution achieved during the computation of the !> Dif-estimate. !> |
| [in] | LDC | !> LDC is INTEGER !> The leading dimension of the array C. LDC >= max(1, M). !> |
| [in] | D | !> D is REAL array, dimension (LDD, M) !> The upper triangular matrix D. !> |
| [in] | LDD | !> LDD is INTEGER !> The leading dimension of the array D. LDD >= max(1, M). !> |
| [in] | E | !> E is REAL array, dimension (LDE, N) !> The upper triangular matrix E. !> |
| [in] | LDE | !> LDE is INTEGER !> The leading dimension of the array E. LDE >= max(1, N). !> |
| [in,out] | F | !> F is REAL array, dimension (LDF, N) !> On entry, F contains the right-hand-side of the second matrix !> equation in (1) or (3). !> On exit, if IJOB = 0, 1 or 2, F has been overwritten by !> the solution L. If IJOB = 3 or 4 and TRANS = 'N', F holds L, !> the solution achieved during the computation of the !> Dif-estimate. !> |
| [in] | LDF | !> LDF is INTEGER !> The leading dimension of the array F. LDF >= max(1, M). !> |
| [out] | DIF | !> DIF is REAL !> On exit DIF is the reciprocal of a lower bound of the !> reciprocal of the Dif-function, i.e. DIF is an upper bound of !> Dif[(A,D), (B,E)] = sigma_min(Z), where Z as in (2). !> IF IJOB = 0 or TRANS = 'T', DIF is not touched. !> |
| [out] | SCALE | !> SCALE is REAL !> On exit SCALE is the scaling factor in (1) or (3). !> If 0 < SCALE < 1, C and F hold the solutions R and L, resp., !> to a slightly perturbed system but the input matrices A, B, D !> and E have not been changed. If SCALE = 0, C and F hold the !> solutions R and L, respectively, to the homogeneous system !> with C = F = 0. Normally, SCALE = 1. !> |
| [out] | WORK | !> WORK is REAL array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !> |
| [in] | LWORK | !> LWORK is INTEGER !> The dimension of the array WORK. LWORK > = 1. !> If IJOB = 1 or 2 and TRANS = 'N', LWORK >= max(1,2*M*N). !> !> If LWORK = -1, then a workspace query is assumed; the routine !> only calculates the optimal size of the WORK array, returns !> this value as the first entry of the WORK array, and no error !> message related to LWORK is issued by XERBLA. !> |
| [out] | IWORK | !> IWORK is INTEGER array, dimension (M+N+6) !> |
| [out] | INFO | !> INFO is INTEGER !> =0: successful exit !> <0: If INFO = -i, the i-th argument had an illegal value. !> >0: (A, D) and (B, E) have common or close eigenvalues. !> |
!> !> [1] B. Kagstrom and P. Poromaa, LAPACK-Style Algorithms and Software !> for Solving the Generalized Sylvester Equation and Estimating the !> Separation between Regular Matrix Pairs, Report UMINF - 93.23, !> Department of Computing Science, Umea University, S-901 87 Umea, !> Sweden, December 1993, Revised April 1994, Also as LAPACK Working !> Note 75. To appear in ACM Trans. on Math. Software, Vol 22, !> No 1, 1996. !> !> [2] B. Kagstrom, A Perturbation Analysis of the Generalized Sylvester !> Equation (AR - LB, DR - LE ) = (C, F), SIAM J. Matrix Anal. !> Appl., 15(4):1045-1060, 1994 !> !> [3] B. Kagstrom and L. Westin, Generalized Schur Methods with !> Condition Estimators for Solving the Generalized Sylvester !> Equation, IEEE Transactions on Automatic Control, Vol. 34, No. 7, !> July 1989, pp 745-751. !>
Definition at line 296 of file stgsyl.f.
| subroutine strsyl | ( | character | trana, |
| character | tranb, | ||
| integer | isgn, | ||
| integer | m, | ||
| integer | n, | ||
| real, dimension( lda, * ) | a, | ||
| integer | lda, | ||
| real, dimension( ldb, * ) | b, | ||
| integer | ldb, | ||
| real, dimension( ldc, * ) | c, | ||
| integer | ldc, | ||
| real | scale, | ||
| integer | info ) |
STRSYL
Download STRSYL + dependencies [TGZ] [ZIP] [TXT]
!> !> STRSYL solves the real Sylvester matrix equation: !> !> op(A)*X + X*op(B) = scale*C or !> op(A)*X - X*op(B) = scale*C, !> !> where op(A) = A or A**T, and A and B are both upper quasi- !> triangular. A is M-by-M and B is N-by-N; the right hand side C and !> the solution X are M-by-N; and scale is an output scale factor, set !> <= 1 to avoid overflow in X. !> !> A and B must be in Schur canonical form (as returned by SHSEQR), that !> is, block upper triangular with 1-by-1 and 2-by-2 diagonal blocks; !> each 2-by-2 diagonal block has its diagonal elements equal and its !> off-diagonal elements of opposite sign. !>
| [in] | TRANA | !> TRANA is CHARACTER*1 !> Specifies the option op(A): !> = 'N': op(A) = A (No transpose) !> = 'T': op(A) = A**T (Transpose) !> = 'C': op(A) = A**H (Conjugate transpose = Transpose) !> |
| [in] | TRANB | !> TRANB is CHARACTER*1 !> Specifies the option op(B): !> = 'N': op(B) = B (No transpose) !> = 'T': op(B) = B**T (Transpose) !> = 'C': op(B) = B**H (Conjugate transpose = Transpose) !> |
| [in] | ISGN | !> ISGN is INTEGER !> Specifies the sign in the equation: !> = +1: solve op(A)*X + X*op(B) = scale*C !> = -1: solve op(A)*X - X*op(B) = scale*C !> |
| [in] | M | !> M is INTEGER !> The order of the matrix A, and the number of rows in the !> matrices X and C. M >= 0. !> |
| [in] | N | !> N is INTEGER !> The order of the matrix B, and the number of columns in the !> matrices X and C. N >= 0. !> |
| [in] | A | !> A is REAL array, dimension (LDA,M) !> The upper quasi-triangular matrix A, in Schur canonical form. !> |
| [in] | LDA | !> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M). !> |
| [in] | B | !> B is REAL array, dimension (LDB,N) !> The upper quasi-triangular matrix B, in Schur canonical form. !> |
| [in] | LDB | !> LDB is INTEGER !> The leading dimension of the array B. LDB >= max(1,N). !> |
| [in,out] | C | !> C is REAL array, dimension (LDC,N) !> On entry, the M-by-N right hand side matrix C. !> On exit, C is overwritten by the solution matrix X. !> |
| [in] | LDC | !> LDC is INTEGER !> The leading dimension of the array C. LDC >= max(1,M) !> |
| [out] | SCALE | !> SCALE is REAL !> The scale factor, scale, set <= 1 to avoid overflow in X. !> |
| [out] | INFO | !> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value !> = 1: A and B have common or very close eigenvalues; perturbed !> values were used to solve the equation (but the matrices !> A and B are unchanged). !> |
Definition at line 162 of file strsyl.f.