Purpose
=======
DLALS0 applies back the multiplying factors of either the left or the
right singular vector matrix of a diagonal matrix appended by a row
to the right hand side matrix B in solving the least squares problem
using the divide-and-conquer SVD approach.
For the left singular vector matrix, three types of orthogonal
matrices are involved:
(1L) Givens rotations: the number of such rotations is GIVPTR; the
pairs of columns/rows they were applied to are stored in GIVCOL;
and the C- and S-values of these rotations are stored in GIVNUM.
(2L) Permutation. The (NL+1)-st row of B is to be moved to the first
row, and for J=2:N, PERM(J)-th row of B is to be moved to the
J-th row.
(3L) The left singular vector matrix of the remaining matrix.
For the right singular vector matrix, four types of orthogonal
matrices are involved:
(1R) The right singular vector matrix of the remaining matrix.
(2R) If SQRE = 1, one extra Givens rotation to generate the right
null space.
(3R) The inverse transformation of (2L).
(4R) The inverse transformation of (1L).
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(
int ICOMPQ,
int NL,
int NR,
int SQRE,
int NRHS,
ref double[] B,
int offset_b,
int LDB,
ref double[] BX,
int offset_bx,
int LDBX,
int[] PERM,
int offset_perm,
int GIVPTR,
int[] GIVCOL,
int offset_givcol,
int LDGCOL,
double[] GIVNUM,
int offset_givnum,
int LDGNUM,
double[] POLES,
int offset_poles,
double[] DIFL,
int offset_difl,
double[] DIFR,
int offset_difr,
double[] Z,
int offset_z,
int K,
double C,
double S,
ref double[] WORK,
int offset_work,
ref int INFO
)
Public Sub Run (
ICOMPQ As Integer,
NL As Integer,
NR As Integer,
SQRE As Integer,
NRHS As Integer,
ByRef B As Double(),
offset_b As Integer,
LDB As Integer,
ByRef BX As Double(),
offset_bx As Integer,
LDBX As Integer,
PERM As Integer(),
offset_perm As Integer,
GIVPTR As Integer,
GIVCOL As Integer(),
offset_givcol As Integer,
LDGCOL As Integer,
GIVNUM As Double(),
offset_givnum As Integer,
LDGNUM As Integer,
POLES As Double(),
offset_poles As Integer,
DIFL As Double(),
offset_difl As Integer,
DIFR As Double(),
offset_difr As Integer,
Z As Double(),
offset_z As Integer,
K As Integer,
C As Double,
S As Double,
ByRef WORK As Double(),
offset_work As Integer,
ByRef INFO As Integer
)
Request Example
View SourceParameters
- ICOMPQ Int32
-
(input) INTEGER
Specifies whether singular vectors are to be computed in
factored form:
= 0: Left singular vector matrix.
= 1: Right singular vector matrix.
- NL Int32
-
(input) INTEGER
The row dimension of the upper block. NL .GE. 1.
- NR Int32
-
(input) INTEGER
The row dimension of the lower block. NR .GE. 1.
- SQRE Int32
-
(input) INTEGER
= 0: the lower block is an NR-by-NR square matrix.
= 1: the lower block is an NR-by-(NR+1) rectangular matrix.
The bidiagonal matrix has row dimension N = NL + NR + 1,
and column dimension M = N + SQRE.
- NRHS Int32
-
(input) INTEGER
The number of columns of B and BX. NRHS must be at least 1.
- B Double
-
(input/output) DOUBLE PRECISION array, dimension ( LDB, NRHS )
On input, B contains the right hand sides of the least
squares problem in rows 1 through M. On output, B contains
the solution X in rows 1 through N.
- offset_b Int32
-
- LDB Int32
-
(input) INTEGER
The leading dimension of B. LDB must be at least
max(1,MAX( M, N ) ).
- BX Double
-
(workspace) DOUBLE PRECISION array, dimension ( LDBX, NRHS )
- offset_bx Int32
-
- LDBX Int32
-
(input) INTEGER
The leading dimension of BX.
- PERM Int32
-
(input) INTEGER array, dimension ( N )
The permutations (from deflation and sorting) applied
to the two blocks.
- offset_perm Int32
-
- GIVPTR Int32
-
(input) INTEGER
The number of Givens rotations which took place in this
subproblem.
- GIVCOL Int32
-
(input) INTEGER array, dimension ( LDGCOL, 2 )
Each pair of numbers indicates a pair of rows/columns
involved in a Givens rotation.
- offset_givcol Int32
-
- LDGCOL Int32
-
(input) INTEGER
The leading dimension of GIVCOL, must be at least N.
- GIVNUM Double
-
(input) DOUBLE PRECISION array, dimension ( LDGNUM, 2 )
Each number indicates the C or S value used in the
corresponding Givens rotation.
- offset_givnum Int32
-
- LDGNUM Int32
-
(input) INTEGER
The leading dimension of arrays DIFR, POLES and
GIVNUM, must be at least K.
- POLES Double
-
(input) DOUBLE PRECISION array, dimension ( LDGNUM, 2 )
On entry, POLES(1:K, 1) contains the new singular
values obtained from solving the secular equation, and
POLES(1:K, 2) is an array containing the poles in the secular
equation.
- offset_poles Int32
-
- DIFL Double
-
(input) DOUBLE PRECISION array, dimension ( K ).
On entry, DIFL(I) is the distance between I-th updated
(undeflated) singular value and the I-th (undeflated) old
singular value.
- offset_difl Int32
-
- DIFR Double
-
(input) DOUBLE PRECISION array, dimension ( LDGNUM, 2 ).
On entry, DIFR(I, 1) contains the distances between I-th
updated (undeflated) singular value and the I+1-th
(undeflated) old singular value. And DIFR(I, 2) is the
normalizing factor for the I-th right singular vector.
- offset_difr Int32
-
- Z Double
-
(input) DOUBLE PRECISION array, dimension ( K )
Contain the components of the deflation-adjusted updating row
vector.
- offset_z Int32
-
- K Int32
-
(input) INTEGER
Contains the dimension of the non-deflated matrix,
This is the order of the related secular equation. 1 .LE. K .LE.N.
- C Double
-
(input) DOUBLE PRECISION
C contains garbage if SQRE =0 and the C-value of a Givens
rotation related to the right null space if SQRE = 1.
- S Double
-
(input) DOUBLE PRECISION
S contains garbage if SQRE =0 and the S-value of a Givens
rotation related to the right null space if SQRE = 1.
- WORK Double
-
(workspace) DOUBLE PRECISION array, dimension ( K )
- offset_work Int32
-
- INFO Int32
-
(output) INTEGER
= 0: successful exit.
.LT. 0: if INFO = -i, the i-th argument had an illegal value.
See Also