***PURPOSE Solve the real system A*X=B or TRANS(A)*X=B using the
factors computed by DGECO or DGEFA.
***CATEGORY D2A1
***TYPE DOUBLE PRECISION (SGESL-S, DGESL-D, CGESL-C)
***KEYWORDS LINEAR ALGEBRA, LINPACK, MATRIX, SOLVE
***AUTHOR Moler, C. B., (U. of New Mexico)
***DESCRIPTION
DGESL solves the double precision system
A * X = B or TRANS(A) * X = B
using the factors computed by DGECO or DGEFA.
On Entry
A DOUBLE PRECISION(LDA, N)
the output from DGECO or DGEFA.
LDA INTEGER
the leading dimension of the array A .
N INTEGER
the order of the matrix A .
IPVT INTEGER(N)
the pivot vector from DGECO or DGEFA.
B DOUBLE PRECISION(N)
the right hand side vector.
JOB INTEGER
= 0 to solve A*X = B ,
= nonzero to solve TRANS(A)*X = B where
TRANS(A) is the transpose.
On Return
B the solution vector X .
Error Condition
A division by zero will occur if the input factor contains a
zero on the diagonal. Technically this indicates singularity
but it is often caused by improper arguments or improper
setting of LDA . It will not occur if the subroutines are
called correctly and if DGECO has set RCOND .GT. 0.0
or DGEFA has set INFO .EQ. 0 .
To compute INVERSE(A) * C where C is a matrix
with P columns
CALL DGECO(A,LDA,N,IPVT,RCOND,Z)
IF (RCOND is too small) GO TO ...
DO 10 J = 1, P
CALL DGESL(A,LDA,N,IPVT,C(1,J),0)
10 CONTINUE
***REFERENCES J. J. Dongarra, J. R. Bunch, C. B. Moler, and G. W.
Stewart, LINPACK Users' Guide, SIAM, 1979.
***ROUTINES CALLED DAXPY, DDOT
***REVISION HISTORY (YYMMDD)
780814 DATE WRITTEN
890831 Modified array declarations. (WRB)
890831 REVISION DATE from Version 3.2
891214 Prologue converted to Version 4.0 format. (BAB)
900326 Removed duplicate information from DESCRIPTION section.
(WRB)
920501 Reformatted the REFERENCES section. (WRB)
***END PROLOGUE DGESL
***FIRST EXECUTABLE STATEMENT DGESL
Namespace: DotNumerics.ODE.DVodeAssembly: DWSIM.MathOps.DotNumerics (in DWSIM.MathOps.DotNumerics.dll) Version: 1.0.0.0 (1.0.0.0)
Syntax public void Run(
double[] A,
int offset_a,
int LDA,
int N,
int[] IPVT,
int offset_ipvt,
ref double[] B,
int offset_b,
int JOB
)
Public Sub Run (
A As Double(),
offset_a As Integer,
LDA As Integer,
N As Integer,
IPVT As Integer(),
offset_ipvt As Integer,
ByRef B As Double(),
offset_b As Integer,
JOB As Integer
)
Request Example
View SourceParameters
- A Double
-
DOUBLE PRECISION(LDA, N)
the output from DGECO or DGEFA.
- offset_a Int32
-
- LDA Int32
-
INTEGER
the leading dimension of the array A .
- N Int32
-
INTEGER
the order of the matrix A .
- IPVT Int32
-
INTEGER(N)
the pivot vector from DGECO or DGEFA.
- offset_ipvt Int32
-
- B Double
-
DOUBLE PRECISION(N)
the right hand side vector.
- offset_b Int32
-
- JOB Int32
-
INTEGER
= 0 to solve A*X = B ,
= nonzero to solve TRANS(A)*X = B where
TRANS(A) is the transpose.
See Also