MathGroup Archive 2002

[Date Index] [Thread Index] [Author Index]

Search the Archive

RE: making a block diagonal matrix

  • To: mathgroup at smc.vnet.net
  • Subject: [mg37580] RE: [mg37548] making a block diagonal matrix
  • From: "David Park" <djmp at earthlink.net>
  • Date: Tue, 5 Nov 2002 05:02:50 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

David,

Needs["LinearAlgebra`MatrixManipulation`"]

mat1 = {{a, b}, {c, d}};
mat2 = {{e, f, g}, {h, i, j}, {k, l, m}};

BlockMatrix[{{mat1, ZeroMatrix[2, 3]}, {ZeroMatrix[3, 2],
        mat2}}] // MatrixForm

MatrixManipulation doesn't have a routine to make a diagonal block matrix
directly, but I think the following will work.

diagonalBlockMatrix[blocks : {__?(MatrixQ[#] && Equal @@ Dimensions[#] &)}]
:=
  Module[
    {n = Length[blocks], sizes, rows, cols, i, j},
    sizes = Dimensions /@ blocks;
    rows = Flatten@(First /@ sizes);
    cols = Flatten@(Last /@ sizes);
    Table[
        Join[Table[
            ZeroMatrix[Part[rows, i], Part[cols, j]], {j, 1, i - 1}], {Part[
              blocks, i]},
          Table[ZeroMatrix[Part[rows, i], Part[cols, j]], {j, i + 1, n}]],
{i,
           1, n}] // BlockMatrix
    ]

diagonalBlockMatrix[{mat1, mat2}] // MatrixForm

David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/




From: David E. Burmaster [mailto:deb at alceon.com]
To: mathgroup at smc.vnet.net


Dear MathGroup

Can anyone please suggest an efficient way to convert a list of square
matrices (of different dimensions) into a block diagonal matrix?? The
elements of each matrix are all real numbers

here is an example with a list of two square matrices --

matrix1 =	a b
		c d

matrix2 =	e f g
		h i j
		k l m


output = 	a b 0 0 0
		c d 0 0 0
		0 0 e f g
		0 0 h i j
		0 0 k l m



=-=

many thanks
dave



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
David E. Burmaster, Ph.D.
Alceon Corporation
POBox 382069                 (new Box number effective 1 Sep 2001)
Harvard Square Station
Cambridge, MA 02238-2069     (new ZIP code effective 1 Sep 2001)

Voice	617-864-4300

Web	http://www.Alceon.com
Email	deb at Alceon.com
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++






  • Prev by Date: AW: making a block diagonal matrix
  • Next by Date: Re: Not quite a Swell FLOOP?
  • Previous by thread: Re: making a block diagonal matrix
  • Next by thread: RE: making a block diagonal matrix