***PURPOSE Factor a band matrix using Gaussian elimination.
***CATEGORY D2A2
***TYPE DOUBLE PRECISION (SGBFA-S, DGBFA-D, CGBFA-C)
***KEYWORDS BANDED, LINEAR ALGEBRA, LINPACK, MATRIX FACTORIZATION
***AUTHOR Moler, C. B., (U. of New Mexico)
***DESCRIPTION
DGBFA factors a double precision band matrix by elimination.
DGBFA is usually called by DGBCO, but it can be called
directly with a saving in time if RCOND is not needed.
On Entry
ABD DOUBLE PRECISION(LDA, N)
contains the matrix in band storage. The columns
of the matrix are stored in the columns of ABD and
the diagonals of the matrix are stored in rows
ML+1 through 2*ML+MU+1 of ABD .
See the comments below for details.
LDA INTEGER
the leading dimension of the array ABD .
LDA must be .GE. 2*ML + MU + 1 .
N INTEGER
the order of the original matrix.
ML INTEGER
number of diagonals below the main diagonal.
0 .LE. ML .LT. N .
MU INTEGER
number of diagonals above the main diagonal.
0 .LE. MU .LT. N .
More efficient if ML .LE. MU .
On Return
ABD an upper triangular matrix in band storage and
the multipliers which were used to obtain it.
The factorization can be written A = L*U where
L is a product of permutation and unit lower
triangular matrices and U is upper triangular.
IPVT INTEGER(N)
an integer vector of pivot indices.
INFO INTEGER
= 0 normal value.
= K if U(K,K) .EQ. 0.0 . This is not an error
condition for this subroutine, but it does
indicate that DGBSL will divide by zero if
called. Use RCOND in DGBCO for a reliable
indication of singularity.
Band Storage
If A is a band matrix, the following program segment
will set up the input.
ML = (band width below the diagonal)
MU = (band width above the diagonal)
M = ML + MU + 1
DO 20 J = 1, N
I1 = MAX(1, J-MU)
I2 = MIN(N, J+ML)
DO 10 I = I1, I2
K = I - J + M
ABD(K,J) = A(I,J)
10 CONTINUE
20 CONTINUE
This uses rows ML+1 through 2*ML+MU+1 of ABD .
In addition, the first ML rows in ABD are used for
elements generated during the triangularization.
The total number of rows needed in ABD is 2*ML+MU+1 .
The ML+MU by ML+MU upper left triangle and the
ML by ML lower right triangle are not referenced.
***REFERENCES J. J. Dongarra, J. R. Bunch, C. B. Moler, and G. W.
Stewart, LINPACK Users' Guide, SIAM, 1979.
***ROUTINES CALLED DAXPY, DSCAL, IDAMAX
***REVISION HISTORY (YYMMDD)
780814 DATE WRITTEN
890531 Changed all specific intrinsics to generic. (WRB)
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 DGBFA
Namespace: Altaxo.Calc.Ode.Obsolete.DVodeAssembly: AltaxoCore (in AltaxoCore.dll) Version: 4.8.3179.0 (4.8.3179.0)
Syntax public void Run(
ref double[] ABD,
int offset_abd,
int LDA,
int N,
int ML,
int MU,
ref int[] IPVT,
int offset_ipvt,
ref int INFO
)
Parameters
- ABD Double
-
DOUBLE PRECISION(LDA, N)
contains the matrix in band storage. The columns
of the matrix are stored in the columns of ABD and
the diagonals of the matrix are stored in rows
ML+1 through 2*ML+MU+1 of ABD .
See the comments below for details.
- offset_abd Int32
[Missing <param name="offset_abd"/> documentation for "M:Altaxo.Calc.Ode.Obsolete.DVode.DGBFA.Run(System.Double[]@,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32[]@,System.Int32,System.Int32@)"]
- LDA Int32
-
INTEGER
the leading dimension of the array ABD .
LDA must be .GE. 2*ML + MU + 1 .
- N Int32
-
INTEGER
the order of the original matrix.
- ML Int32
-
INTEGER
number of diagonals below the main diagonal.
0 .LE. ML .LT. N .
- MU Int32
-
INTEGER
number of diagonals above the main diagonal.
0 .LE. MU .LT. N .
More efficient if ML .LE. MU .
- IPVT Int32
-
INTEGER(N)
an integer vector of pivot indices.
- offset_ipvt Int32
[Missing <param name="offset_ipvt"/> documentation for "M:Altaxo.Calc.Ode.Obsolete.DVode.DGBFA.Run(System.Double[]@,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32[]@,System.Int32,System.Int32@)"]
- INFO Int32
-
INTEGER
= 0 normal value.
= K if U(K,K) .EQ. 0.0 . This is not an error
condition for this subroutine, but it does
indicate that DGBSL will divide by zero if
called. Use RCOND in DGBCO for a reliable
indication of singularity.
See Also