Purpose
=======
DLALN2 solves a system of the form (ca A - w D ) X = s B
or (ca A' - w D) X = s B with possible scaling ("s") and
perturbation of A. (A' means A-transpose.)
A is an NA x NA real matrix, ca is a real scalar, D is an NA x NA
real diagonal matrix, w is a real or complex value, and X and B are
NA x 1 matrices -- real if w is real, complex if w is complex. NA
may be 1 or 2.
If w is complex, X and B are represented as NA x 2 matrices,
the first column of each being the real part and the second
being the imaginary part.
"s" is a scaling factor (.LE. 1), computed by DLALN2, which is
so chosen that X can be computed without overflow. X is further
scaled if necessary to assure that norm(ca A - w D)*norm(X) is less
than overflow.
If both singular values of (ca A - w D) are less than SMIN,
SMIN*identity will be used instead of (ca A - w D). If only one
singular value is less than SMIN, one element of (ca A - w D) will be
perturbed enough to make the smallest singular value roughly SMIN.
If both singular values are at least SMIN, (ca A - w D) will not be
perturbed. In any case, the perturbation will be at most some small
multiple of max( SMIN, ulp*norm(ca A - w D) ). The singular values
are computed by infinity-norm approximations, and thus will only be
correct to a factor of 2 or so.
Note: all input quantities are assumed to be smaller than overflow
by a reasonable factor. (See BIGNUM.)
Namespace: DotNumerics.LinearAlgebra.CSLapackAssembly: DWSIM.MathOps.DotNumerics (in DWSIM.MathOps.DotNumerics.dll) Version: 1.0.0.0 (1.0.0.0)
Syntax public void Run(
bool LTRANS,
int NA,
int NW,
double SMIN,
double CA,
double[] A,
int offset_a,
int LDA,
double D1,
double D2,
double[] B,
int offset_b,
int LDB,
double WR,
double WI,
ref double[] X,
int offset_x,
int LDX,
ref double SCALE,
ref double XNORM,
ref int INFO
)
Public Sub Run (
LTRANS As Boolean,
NA As Integer,
NW As Integer,
SMIN As Double,
CA As Double,
A As Double(),
offset_a As Integer,
LDA As Integer,
D1 As Double,
D2 As Double,
B As Double(),
offset_b As Integer,
LDB As Integer,
WR As Double,
WI As Double,
ByRef X As Double(),
offset_x As Integer,
LDX As Integer,
ByRef SCALE As Double,
ByRef XNORM As Double,
ByRef INFO As Integer
)
Request Example
View SourceParameters
- LTRANS Boolean
-
(input) LOGICAL
=.TRUE.: A-transpose will be used.
=.FALSE.: A will be used (not transposed.)
- NA Int32
-
(input) INTEGER
The size of the matrix A. It may (only) be 1 or 2.
- NW Int32
-
(input) INTEGER
1 if "w" is real, 2 if "w" is complex. It may only be 1
or 2.
- SMIN Double
-
(input) DOUBLE PRECISION
The desired lower bound on the singular values of A. This
should be a safe distance away from underflow or overflow,
say, between (underflow/machine precision) and (machine
precision * overflow ). (See BIGNUM and ULP.)
- CA Double
-
(input) DOUBLE PRECISION
The coefficient c, which A is multiplied by.
- A Double
-
is an NA x NA real matrix, ca is a real scalar, D is an NA x NA
- offset_a Int32
-
- LDA Int32
-
(input) INTEGER
The leading dimension of A. It must be at least NA.
- D1 Double
-
(input) DOUBLE PRECISION
The 1,1 element in the diagonal matrix D.
- D2 Double
-
(input) DOUBLE PRECISION
The 2,2 element in the diagonal matrix D. Not used if NW=1.
- B Double
-
(input) DOUBLE PRECISION array, dimension (LDB,NW)
The NA x NW matrix B (right-hand side). If NW=2 ("w" is
complex), column 1 contains the real part of B and column 2
contains the imaginary part.
- offset_b Int32
-
- LDB Int32
-
(input) INTEGER
The leading dimension of B. It must be at least NA.
- WR Double
-
(input) DOUBLE PRECISION
The real part of the scalar "w".
- WI Double
-
(input) DOUBLE PRECISION
The imaginary part of the scalar "w". Not used if NW=1.
- X Double
-
(output) DOUBLE PRECISION array, dimension (LDX,NW)
The NA x NW matrix X (unknowns), as computed by DLALN2.
If NW=2 ("w" is complex), on exit, column 1 will contain
the real part of X and column 2 will contain the imaginary
part.
- offset_x Int32
-
- LDX Int32
-
(input) INTEGER
The leading dimension of X. It must be at least NA.
- SCALE Double
-
(output) DOUBLE PRECISION
The scale factor that B must be multiplied by to insure
that overflow does not occur when computing X. Thus,
(ca A - w D) X will be SCALE*B, not B (ignoring
perturbations of A.) It will be at most 1.
- XNORM Double
-
(output) DOUBLE PRECISION
The infinity-norm of X, when X is regarded as an NA x NW
real matrix.
- INFO Int32
-
(output) INTEGER
An error flag. It will be set to zero if no error occurs,
a negative number if an argument is in error, or a positive
number if ca A - w D had to be perturbed.
The possible values are:
= 0: No error occurred, and (ca A - w D) did not have to be
perturbed.
= 1: (ca A - w D) had to be perturbed to make its smallest
(or only) singular value greater than SMIN.
NOTE: In the interests of speed, this routine does not
check the inputs for errors.
See Also