LAPACK  3.6.1 LAPACK: Linear Algebra PACKage
 subroutine cptsvx ( character FACT, integer N, integer NRHS, real, dimension( * ) D, complex, dimension( * ) E, real, dimension( * ) DF, complex, dimension( * ) EF, complex, dimension( ldb, * ) B, integer LDB, complex, dimension( ldx, * ) X, integer LDX, real RCOND, real, dimension( * ) FERR, real, dimension( * ) BERR, complex, dimension( * ) WORK, real, dimension( * ) RWORK, integer INFO )

CPTSVX computes the solution to system of linear equations A * X = B for PT matrices

Purpose:
``` CPTSVX uses the factorization A = L*D*L**H to compute the solution
to a complex system of linear equations A*X = B, where A is an
N-by-N Hermitian positive definite tridiagonal matrix and X and B
are N-by-NRHS matrices.

Error bounds on the solution and a condition estimate are also
provided.```
Description:
``` The following steps are performed:

1. If FACT = 'N', the matrix A is factored as A = L*D*L**H, where L
is a unit lower bidiagonal matrix and D is diagonal.  The
factorization can also be regarded as having the form
A = U**H*D*U.

2. If the leading i-by-i principal minor is not positive definite,
then the routine returns with INFO = i. Otherwise, the factored
form of A is used to estimate the condition number of the matrix
A.  If the reciprocal of the condition number is less than machine
precision, INFO = N+1 is returned as a warning, but the routine
still goes on to solve for X and compute error bounds as
described below.

3. The system of equations is solved for X using the factored form
of A.

4. Iterative refinement is applied to improve the computed solution
matrix and calculate error bounds and backward error estimates
for it.```
Parameters
 [in] FACT ``` FACT is CHARACTER*1 Specifies whether or not the factored form of the matrix A is supplied on entry. = 'F': On entry, DF and EF contain the factored form of A. D, E, DF, and EF will not be modified. = 'N': The matrix A will be copied to DF and EF and factored.``` [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] D ``` D is REAL array, dimension (N) The n diagonal elements of the tridiagonal matrix A.``` [in] E ``` E is COMPLEX array, dimension (N-1) The (n-1) subdiagonal elements of the tridiagonal matrix A.``` [in,out] DF ``` DF is REAL array, dimension (N) If FACT = 'F', then DF is an input argument and on entry contains the n diagonal elements of the diagonal matrix D from the L*D*L**H factorization of A. If FACT = 'N', then DF is an output argument and on exit contains the n diagonal elements of the diagonal matrix D from the L*D*L**H factorization of A.``` [in,out] EF ``` EF is COMPLEX array, dimension (N-1) If FACT = 'F', then EF is an input argument and on entry contains the (n-1) subdiagonal elements of the unit bidiagonal factor L from the L*D*L**H factorization of A. If FACT = 'N', then EF is an output argument and on exit contains the (n-1) subdiagonal elements of the unit bidiagonal factor L from the L*D*L**H factorization of A.``` [in] B ``` B is COMPLEX array, dimension (LDB,NRHS) The N-by-NRHS right hand side matrix B.``` [in] LDB ``` LDB is INTEGER The leading dimension of the array B. LDB >= max(1,N).``` [out] X ``` X is COMPLEX array, dimension (LDX,NRHS) If INFO = 0 or INFO = N+1, the N-by-NRHS solution matrix X.``` [in] LDX ``` LDX is INTEGER The leading dimension of the array X. LDX >= max(1,N).``` [out] RCOND ``` RCOND is REAL The reciprocal condition number of the matrix A. If RCOND is less than the machine precision (in particular, if RCOND = 0), the matrix is singular to working precision. This condition is indicated by a return code of INFO > 0.``` [out] FERR ``` FERR is REAL array, dimension (NRHS) The 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).``` [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 COMPLEX array, dimension (N)` [out] RWORK ` RWORK 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, and i is <= N: the leading minor of order i of A is not positive definite, so the factorization could not be completed, and the solution has not been computed. RCOND = 0 is returned. = N+1: U is nonsingular, but RCOND is less than machine precision, meaning that the matrix is singular to working precision. Nevertheless, the solution and error bounds are computed because there are a number of situations where the computed solution can be more accurate than the value of RCOND would suggest.```
Date
September 2012

Definition at line 236 of file cptsvx.f.

236 *
237 * -- LAPACK driver routine (version 3.4.2) --
238 * -- LAPACK is a software package provided by Univ. of Tennessee, --
239 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
240 * September 2012
241 *
242 * .. Scalar Arguments ..
243  CHARACTER fact
244  INTEGER info, ldb, ldx, n, nrhs
245  REAL rcond
246 * ..
247 * .. Array Arguments ..
248  REAL berr( * ), d( * ), df( * ), ferr( * ),
249  \$ rwork( * )
250  COMPLEX b( ldb, * ), e( * ), ef( * ), work( * ),
251  \$ x( ldx, * )
252 * ..
253 *
254 * =====================================================================
255 *
256 * .. Parameters ..
257  REAL zero
258  parameter ( zero = 0.0e+0 )
259 * ..
260 * .. Local Scalars ..
261  LOGICAL nofact
262  REAL anorm
263 * ..
264 * .. External Functions ..
265  LOGICAL lsame
266  REAL clanht, slamch
267  EXTERNAL lsame, clanht, slamch
268 * ..
269 * .. External Subroutines ..
270  EXTERNAL ccopy, clacpy, cptcon, cptrfs, cpttrf, cpttrs,
271  \$ scopy, xerbla
272 * ..
273 * .. Intrinsic Functions ..
274  INTRINSIC max
275 * ..
276 * .. Executable Statements ..
277 *
278 * Test the input parameters.
279 *
280  info = 0
281  nofact = lsame( fact, 'N' )
282  IF( .NOT.nofact .AND. .NOT.lsame( fact, 'F' ) ) THEN
283  info = -1
284  ELSE IF( n.LT.0 ) THEN
285  info = -2
286  ELSE IF( nrhs.LT.0 ) THEN
287  info = -3
288  ELSE IF( ldb.LT.max( 1, n ) ) THEN
289  info = -9
290  ELSE IF( ldx.LT.max( 1, n ) ) THEN
291  info = -11
292  END IF
293  IF( info.NE.0 ) THEN
294  CALL xerbla( 'CPTSVX', -info )
295  RETURN
296  END IF
297 *
298  IF( nofact ) THEN
299 *
300 * Compute the L*D*L**H (or U**H*D*U) factorization of A.
301 *
302  CALL scopy( n, d, 1, df, 1 )
303  IF( n.GT.1 )
304  \$ CALL ccopy( n-1, e, 1, ef, 1 )
305  CALL cpttrf( n, df, ef, info )
306 *
307 * Return if INFO is non-zero.
308 *
309  IF( info.GT.0 )THEN
310  rcond = zero
311  RETURN
312  END IF
313  END IF
314 *
315 * Compute the norm of the matrix A.
316 *
317  anorm = clanht( '1', n, d, e )
318 *
319 * Compute the reciprocal of the condition number of A.
320 *
321  CALL cptcon( n, df, ef, anorm, rcond, rwork, info )
322 *
323 * Compute the solution vectors X.
324 *
325  CALL clacpy( 'Full', n, nrhs, b, ldb, x, ldx )
326  CALL cpttrs( 'Lower', n, nrhs, df, ef, x, ldx, info )
327 *
328 * Use iterative refinement to improve the computed solutions and
329 * compute error bounds and backward error estimates for them.
330 *
331  CALL cptrfs( 'Lower', n, nrhs, d, e, df, ef, b, ldb, x, ldx, ferr,
332  \$ berr, work, rwork, info )
333 *
334 * Set INFO = N+1 if the matrix is singular to working precision.
335 *
336  IF( rcond.LT.slamch( 'Epsilon' ) )
337  \$ info = n + 1
338 *
339  RETURN
340 *
341 * End of CPTSVX
342 *
subroutine cpttrf(N, D, E, INFO)
CPTTRF
Definition: cpttrf.f:94
subroutine cptcon(N, D, E, ANORM, RCOND, RWORK, INFO)
CPTCON
Definition: cptcon.f:121
subroutine cpttrs(UPLO, N, NRHS, D, E, B, LDB, INFO)
CPTTRS
Definition: cpttrs.f:123
subroutine xerbla(SRNAME, INFO)
XERBLA
Definition: xerbla.f:62
subroutine cptrfs(UPLO, N, NRHS, D, E, DF, EF, B, LDB, X, LDX, FERR, BERR, WORK, RWORK, INFO)
CPTRFS
Definition: cptrfs.f:185
subroutine clacpy(UPLO, M, N, A, LDA, B, LDB)
CLACPY copies all or part of one two-dimensional array to another.
Definition: clacpy.f:105
subroutine ccopy(N, CX, INCX, CY, INCY)
CCOPY
Definition: ccopy.f:52
real function clanht(NORM, N, D, E)
CLANHT returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a complex Hermitian tridiagonal matrix.
Definition: clanht.f:103
real function slamch(CMACH)
SLAMCH
Definition: slamch.f:69
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:55
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY
Definition: scopy.f:53

Here is the call graph for this function:

Here is the caller graph for this function: