(Fwd) (Fwd) Re: Band Matrices

10:24:04 PM

-------------------

Quote:

> NB. I would like to see the posting of more

> NB. well-defined problems (such as the diag-

> NB. onal and band matrices posted by Faust),

> NB. together with executable treatments of

> NB. them in any or all dialects of APL. Here

> NB. is a treatment of band matrices in J:

> sh=. |. !. 0 NB. Shift in zeroes

> NB. Try:

> diag 2 3 5 7

>2 0 0 0

>0 3 0 0

>0 0 5 0

>0 0 0 7

> 0 band 2 3 5 7

>2 0 0 0

>0 3 0 0

>0 0 5 0

>0 0 0 7

> 1 band 3 5 7

>0 3 0 0

>0 0 5 0

>0 0 0 7

>0 0 0 0

> _1 band 3 5 7

>0 0 0 0

>3 0 0 0

>0 5 0 0

>0 0 7 0

>. . . .

In reply to KEI here is further discussion on

banded matrices, including APL listings

to band a matrix super or sub-diagonal.

The four APL2 and ISI/APLIWIN functions

are short, but in my opinion, rely a bit too

much on overtake tricks and implicit

premultiplication of a boolean matrix by a

diagonal matrix (last line of the each function.)

Some limitations are also apparent. Thus

only one diagonal is banded with each

execution. Several bands - matrices such

as bidiagonal or tridiagonal forms -are

usually what's needed. To achieve that

result with these functions requires multiple

execution. This forces one extra copy of the

matrix into the workspace, not a good thing

if the matrix is big. A minor limitation is that

the resulting matrix is square.

The functions are listed as APL transliterated

to ASCII. APL2 function names are in upper case,

ISI/APLIWIN function names are in lower case.

BANDHI and bandhi put their right vector

(or scalar) argument R into a super-diagonal,

BANDLO and bandlo put their right argument

into a sub-diagonal. The left argument, scalar L,

sets the dimensions of the resulting square matrix.

The length of the right argument ({shape},R)

determines which diagonal will be used to contain

R. The length must not be zero or exceed L.

Transliteration is via use of J. Weigang's A2A

workspace (beta version). A2A inverse trans-

literation to APL functions should work for the APL2

listings. It may fail for the ISI/APLIWIN functions

because of the symbol {rank}, which is ISI/APLIWIN's

'Rank Conjunction'. See page 6-19 of the Iverson APL

Reference Manual (1993). It is {quad}AV[164] when

{quad}io is 0.

Usage; In APL2, 5 BANDHI 1 2 3 makes a 5 by 5 matrix

of all zeros except at positions [1;3], [2;4] and [3;5],

a super-diagonal of length three, in which vector 1 2 3

resides, in upper left to lower right order. 5 bandhi 1 2 3

does the same thing in ISI/APLIWIN, but uses the rank

conjunction in place of the axes brackets of APL2.

5 BANDHI 0 0 0 is a 5 by 5 matrix of all zeros.

5 BANDHI 0 1 0 is a 5 by 5 all zero matrix except with 1

stored in [2;4], which is on the super-diagonal of length 3.

5 bandhi 1 is a 5 by 5 all zero matrix except 1 is stored

in [1;5], the shortest and highest super-diagonal.

(5 bandhi 1 2 3 4 5) + 5 bandhi 6 7 8 9 is an upper

bidiagonal matrix, etc.

Function Listings;

[0] R{is}M BANDHI V;N;B

[1] B{is}(N{is}M+#IO{is}1){reshape}0

[2] B[N-{shape},V]{is}1

[3] R{is}(M{take}V){times}[1](M,M){reshape}N{take}B

[0] R{is}M BANDLO V;N;B

[1] B{is}(N{is}M+#IO{is}1){reshape}0

[2] B[N-{shape},V]{is}1

[3]

R{is}(M{take}V){times}[2]{transpose}(M,M){reshape}N{take}B

[0] r{is}m bandhi v;n;b

[1] b{is}(n{is}m+#io{is}1){reshape}0

[2] b[n-{shape},v]{is}1

[3] r{is}(m{take}v){times}{rank}0 1(m,m){reshape}n{take}b

[0] r{is}m bandlo v;n;b

[1] b{is}(n{is}m+#io{is}1){reshape}0

[2] b[n-{shape},v]{is}1

[3]

r{is}({transpose}(m,m){reshape}n{take}b){times}{rank}1(m{take}v)