C Library Functions  - cwidth (3)

this program is a variation of the theme in the algorithm bandet1 by martin and wilkinson (numer.math. 9(1976)279-307). it solves the linear system
a*x = b
of nequ equations in case a is almost block diagonal with all
blocks having
  ncols columns using no more storage than it takes to
store the interesting part of
  a . such systems occur in the determ- ination of the b-spline coefficients of a spline approximation.
                           parameters
w on input, a two-dimensional array of size (nequ,ncols) contain- ing the interesting part of the almost block diagonal coeffici-
ent matrix
  a (see description and example below). the array
integs describes the storage scheme.
on output, w
  contains the upper triangular factor u of the
lu factorization of a possibly permuted version of
  a . in par-
ticular, the determinant of
  a could now be found as
iflag*w(1,1)*w(2,1)* ... * w(nequ,1)
 
b on input, the right side of the linear system, of length nequ.
the contents of
  b are changed during execution.
nequ number of equations in system ncols block width, i.e., number of columns in each block.
integs integer array, of size (2,nequ), describing the block struct-
ure of a .
integs(1,i) = no. of rows in block i
  = nrow integs(2,i) = no. of elimination steps in block i
= overhang over next block
  = last
nbloks number of blocks
d work array, to contain row sizes . if storage is scarce, the
array x could be used in the calling sequence for d .
x on output, contains computed solution (if iflag .ne. 0), of
length nequ .
iflag on output, integer = (-1)**(no.of interchanges during elimination)
if a is invertible
= 0 if a is singular
------ block structure of a ------
the interesting part of
  a is taken to consist of nbloks con-
secutive blocks, with the i-th block made up of
  nrowi = integs(1,i)
consecutive rows and
  ncols consecutive columns of a , and with
the first
  lasti = integs(2,i) columns to the left of the next block.
these blocks are stored consecutively in the workarray
  w . for example, here is an 11th order matrix and its arrangement in
the workarray
  w . (the interesting entries of a are indicated by their row and column index modulo 10.)
                  ---   a   ---                          ---   w   ---

nrow1=3

 
11 12 13 14
  11 12 13 14
21 22 23 24
  21 22 23 24
31 32 33 34
  nrow2=2 31 32 33 34
last1=2
  43 44 45 46 43 44 45 46
53 54 55 56
  nrow3=3 53 54 55 56
last2=3
  66 67 68 69 66 67 68 69
76 77 78 79
  76 77 78 79
86 87 88 89
  nrow4=1 86 87 88 89
last3=1
  97 98 99 90 nrow5=2 97 98 99 90
last4=1
  08 09 00 01 08 09 00 01
18 19 10 11
  18 19 10 11 last5=4
for this interpretation of
  a as an almost block diagonal matrix,
we have
  nbloks = 5 , and the integs array is
                        i=  1   2   3   4   5
k=
integs(k,i) =
  1 3 2 3 1 2
2 2 3 1 1 4
--------
  method -------- gauss elimination with scaled partial pivoting is used, but mult-
ipliers are
  n o t s a v e d in order to save storage. rather, the right side is operated on during elimination. the two parameters
i p v t e q
  and l a s t e q
are used to keep track of the action.
  ipvteq is the index of the
variable to be eliminated next, from equations
  ipvteq+1,...,lasteq,
using equation
  ipvteq (possibly after an interchange) as the pivot
equation. the entries in the pivot column are
  a l w a y s in column
1 of w . this is accomplished by putting the entries in rows
ipvteq+1,...,lasteq
  revised by the elimination of the ipvteq-th
variable one to the left in
  w . in this way, the columns of the
equations in a given block (as stored in
  w ) will be aligned with those of the next block at the moment when these next equations be- come involved in the elimination process. thus, for the above example, the first elimination steps proceed as follows.
*11 12 13 14
  11 12 13 14 11 12 13 14 11 12 13 14
*21 22 23 24
  *22 23 24 22 23 24 22 23 24
*31 32 33 34
  *32 33 34 *33 34 33 34
43 44 45 46
  43 44 45 46 *43 44 45 46 *44 45 46 etc.
53 54 55 56
  53 54 55 56 *53 54 55 56 *54 55 56
66 67 68 69
  66 67 68 69 66 67 68 69 66 67 68 69
. [char46] . .
in all other respects, the procedure is standard, including the scaled partial pivoting.


Nemo Release 3.1 cwidth (3) June 29, 2025
Generated by manServer 1.08 from ca83bccb-97b7-4c98-ba28-8b2b2c643137 using man macros.