MathGroup Archive 2002

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

Search the Archive

Re: making a block diagonal matrix (2)

  • To: mathgroup at smc.vnet.net
  • Subject: [mg37605] Re: making a block diagonal matrix (2)
  • From: "Allan Hayes" <hay at haystack.demon.co.uk>
  • Date: Wed, 6 Nov 2002 06:54:06 -0500 (EST)
  • References: <aq598m$sdj$1@smc.vnet.net> <aq86eu$e4f$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

I tidy up my previous posting and make it applicable to rectangular blocks:

BlockDiagonalMatrix[mats_] :=
  Module[{pl, dms, tln},
    pl = 0;
    tln = Plus @@ (Last[Dimensions[#]] & /@ mats);

    Join @@ (PadRight[#, {First[dms = Dimensions[#]], tln},
              0, {0, First[{pl, pl += dms[[2]]}]}] & /@ mats)
    ]


Test,

BlockDiagonalMatrix[{{{1, 1}, {1, 1}}, {{2, 2}}, {{3}, {3}}}] // TableForm
--
Allan

---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565


"Allan Hayes" <hay at haystack.demon.co.uk> wrote in message
news:aq86eu$e4f$1 at smc.vnet.net...
> David,
>
>     DiagonalMatrixSq[sms_]:=
>       Module[{p=0},
>         Join@@(PadRight[#,{Length[#],Plus@@Length/@sms},
>               0,{0,(p+=Length[#])-Length[#]}]&/@sms)
>         ]
>
> Test:
>
>     sms= {{{a,b},{c,d}},{{e,f,g},{h,i,j},{k,l,m}},{{z}}};
>
>     DiagonalMatrixSq[sms]
>
>        {{a,b,0,0,0,0},
>         {c,d,0,0,0,0},
>         {0,0,e,f,g,0},
>         {0,0,h,i,j, 0},
>         {0,0,k,l,m,0},
>         {0,0,0,0,0,z}}
>
> --
> Allan
>
> ---------------------
> Allan Hayes
> Mathematica Training and Consulting
> Leicester UK
> www.haystack.demon.co.uk
> hay at haystack.demon.co.uk
> Voice: +44 (0)116 271 4198
> Fax: +44 (0)870 164 0565
>
>
> "David E. Burmaster" <deb at alceon.com> wrote in message
> news:aq598m$sdj$1 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: Re: OOP in Mathematica
  • Next by Date: Re: Mathematica on the web
  • Previous by thread: Re: how to avoid this evaluation?
  • Next by thread: random matrix init: thank you :-)