Charles Boyd on Sun, 12 Feb 2012 22:36:20 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: matconcat


Hi,

Why not by default do (1), and add an optional flag to matconcat to specify alternative behaviors (2) or (3)?

- Charles

On Sun, Feb 12, 2012 at 2:13 PM, Bill Allombert <Bill.Allombert@math.u-bordeaux1.fr> wrote:
On Sun, Feb 12, 2012 at 05:09:13PM +0100, Karim Belabas wrote:
> Hi pari-dev,
>
> I implemented a convenience GP function matconcat(v), which builds
> a (block) matrix from the components of v (see the examples below in P.S).
>
> For instance matconcat([A, B; C, D]) builds the matrix :
> [A | B]
> [-----]
> [C | D]
>
> The building blocks may be t_MAT, t_VEC [ row matrix ], t_COL [ column matrix ]
> and even scalars [ 1x1 matrix ]
>
> All this is straightforward when all dimensions match up, but I have a
> problem when they don't. What to do in this case ? I see at least 3
> possibilities:
>
> 1) reject and raise an exception.
>
> 2) consider a scalar 'x' as x * matid(proper dimension),
> e.g.
>   matconcat([3, matid(2); matid(2), 4])
>   %1 =
>   [3 0 1 0]
>
>   [0 3 0 1]
>
>   [1 0 4 0]
>
>   [0 1 0 4]
>
> 3) extend the blocks as needed, by rows and columns of 0
> e.g.
>   matconcat([3, matid(2); matid(2), 4])
>   %1 =
>   [3 0 1 0]
>
>   [0 0 0 1]
>
>   [1 0 4 0]
>
>   [0 1 0 0]
>
>
> 1) is simplest conceptually but somewhat contrary to the general PARI
> philosophy [ = try to make sense of all inputs, provided the specification
> can be documented in an elegant way ]
>
> 2) is already useful, but doesn't allow e.g.
>
>   matconcat(matdiagonal([[1,2;3,4], [1,2,3;4,5,6;7,8,9]]))
>
> [ = diagonal block matrix ]
>
> One can always add special cases, e.g. allow a "0" scalar, to represent an
> arbitrary rectangular block of zeroes, but it quickly becomes awkward.

There are two other alternatives that can be considered:
Allow non square indentity matrix: e.g.
[1, 0;  and  [1, 0, 0;
 0, 1;        0, 1, 0]
 0, 0]

or fill the block with the value:
[1,1;  and [2,2,2;
 1,1;       2,2,2]
 1,1]

This would solve the problem for 0 and remove ambiguity.
The question is whether that makes mathematical sense.

Cheers,
Bill.