Computes the solution to the system of linear equations with a square 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
nmatrix, 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.
?gesvxperforms 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 or not the system will be equilibrated depends on the scaling of the matrixA, but if equilibration is used,Ais overwritten byanddiag(r)*A*diag(c)Bby(ifdiag(r)*Bortrans='N')(ifdiag(c)*Bortrans='T').'C'
- Iforfact='N', the'E'LUdecomposition is used to factor the matrixA(after equilibration if) asfact='E', whereA=P*L*UPis a permutation matrix,Lis a unit lower triangular matrix, andUis upper triangular.
- 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 or not 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'afandipivcontain the factored form ofA. Ifequedis not'N', the matrixAhas been equilibrated with scaling factors given byrandc.a,af, andipivare not modified.If, the matrixfact='N'Awill be copied toafand factored.If, the matrixfact='E'Awill be equilibrated if necessary, then copied toafand 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 right hand sides; the number of columns of the matricesBandX;nrhs≥0.
- The arraya(size max(1,contains the matrixlda*n))A. Ifandfact='F'equedis not'N', thenAmust have been equilibrated by the scaling factors inrand/orc.
- The arrayafaf(size max(1,is an input argument ifldaf*n)). It contains the factored form of the matrixfact='F'A, that is, the factorsLandUfrom the factorizationas computed byA=P*L*U?getrf. Ifequedis not'N', thenafis the factored form of the equilibrated matrixA.
- The arraybbof size max(1,contains the matrixldb*nrhs) for column major layout and max(1,ldb*n) for row major layoutBwhose columns are the right-hand sides for the systems of equations.
- The leading dimension ofa;.lda≥max(1,n)
- The leading dimension ofaf;.ldaf≥max(1,n)
- 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?getrf; 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 bydiag(r).If, column equilibration was done, that is,equed='C'Ahas been postmultiplied bydiag(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). The arrayc(sizen)rcontains 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