Computes the solution to the real or complex system of linear equations with a band coefficient matrix A and multiple right-hand sides, and provides error bounds on the solution.
The routine uses the
LUfactorization to compute the solution to a real or complex system of linear equations
Ais a band matrix of order
kusuperdiagonals, the columns of matrix
Bare individual right-hand sides, and the columns of
Xare the corresponding solutions.
Error bounds on the solution and a condition estimate are also provided.
?gbsvxperforms the following steps:
- If, real scaling factorsfact='E'randcare computed to equilibrate the system::trans='N'diag(r)*A*diag(c) *inv(diag(c))*X=diag(r)*B:trans='T'(diag(r)*A*diag(c))*inv(Tdiag(r))*X=diag(c)*B:trans='C'(diag(r)*A*diag(c))*inv(Hdiag(r))*X=diag(c)*BWhether the system will be equilibrated depends on the scaling of the matrixA, but if equilibration is used,Ais overwritten byanddiag(r)*A*diag(c)(ifBbydiag(r)*Btrans='N') or(if ordiag(c)*B'C').
- Iforfact='N''E', theLUdecomposition is used to factor the matrixA(after equilibration if) asfact='E'A=L*U, whereLis a product of permutation and unit lower triangular matrices withklsubdiagonals, andUis upper triangular withkl+kusuperdiagonals.
- If some= 0, so thatUi,iUis exactly singular, then the routine returns with. Otherwise, the factored form ofinfo=iAis used to estimate the condition number of the matrixA. If the reciprocal of the condition number is less than machine precision,is returned as a warning, but the routine still goes on to solve forinfo=n+ 1Xand compute error bounds as described below.
- The system of equations is solved forXusing the factored form ofA.
- Iterative refinement is applied to improve the computed solution matrix and calculate error bounds and backward error estimates for it.
- If equilibration was used, the matrixXis premultiplied by(ifdiag(c)) ortrans='N'(ifdiag(r)ortrans='T''C') so that it solves the original system before equilibration.
- Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).
- Must be'F','N', or'E'.Specifies whether the factored form of the matrixAis supplied on entry, and if not, whether the matrixAshould be equilibrated before it is factored.If: on entry,fact='F'afbandipivcontain the factored form ofA. Ifequedis not'N', the matrixAis equilibrated with scaling factors given byrandc.ab,afb, andipivare not modified.If, the matrixfact='N'Awill be copied toafband factored.If, the matrixfact='E'Awill be equilibrated if necessary, then copied toafband factored.
- Must be'N','T', or'C'.Specifies the form of the system of equations:If, the system has the formtrans='N'(No transpose).A*X=BIf, the system has the formtrans='T'AT*X=B(Transpose).If, the system has the formtrans='C'AH*X=B(Transpose for real flavors, conjugate transpose for complex flavors).
- The number of linear equations, the order of the matrixA;n≥0.
- The number of subdiagonals within the band ofA;kl≥0.
- The number of superdiagonals within the band ofA;ku≥0.
- The number of right hand sides, the number of columns of the matricesBandX;nrhs≥0.
- Arrays:ab(max(,ldab*n))afb(max(,ldafb*n))b(max(1,.ldb*nrhs) for column major layout and max(1,ldb*n) for row major layout)The arrayabcontains the matrixAin band storage (see Matrix Storage Schemes). Ifandfact='F'equedis not'N', thenAmust have been equilibrated by the scaling factors inrand/orc.The arrayafbis an input argument if. It contains the factored form of the matrixfact='F'A, that is, the factorsLandUfrom the factorizationas computed byA=P*L*U?gbtrf.Uis stored as an upper triangular band matrix withkl+kusuperdiagonals.IfLis stored as lower triangular band matrix withklsubdiagonals.equedis not'N', thenafbis the factored form of the equilibrated matrixA.The arraybcontains the matrixBwhose columns are the right-hand sides for the systems of equations.
- The leading dimension ofab;ldab≥kl+ku+1.
- The leading dimension ofafb;ldafb≥2*kl+ku+1.
- The leading dimension ofb;.ldb≥max(1,n) for column major layout andldb≥nrhsfor row major layout
- Array, size at leastmax(1,. The arrayn)ipivis an input argument if. It contains the pivot indices from the factorizationfact='F'as computed byA=P*L*U?gbtrf; rowiof the matrix was interchanged with row.ipiv[i-1]
- Must be'N','R','C', or'B'.equedis an input argument if. It specifies the form of equilibration that was done:fact='F'If, no equilibration was done (always true ifequed='N').fact='N'If, row equilibration was done, that is,equed='R'Ahas been premultiplied by.diag(r)If, column equilibration was done, that is,equed='C'Ahas been postmultiplied by.diag(c)if, both row and column equilibration was done, that is,equed='B'Ahas been replaced by.diag(r)*A*diag(c)
- Arrays:r(sizen),.c(sizen)The arrayrcontains the row scale factors forA, and the arrayccontains the column scale factors forA. These arrays are input arguments ifonly; otherwise they are output arguments.fact='F'Iforequed='R''B',Ais multiplied on the left by; ifdiag(r)orequed='N''C',ris not accessed.If