MathGroup Archive 2010

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

Search the Archive

Re: Constructing matrix out of submatrices

  • To: mathgroup at smc.vnet.net
  • Subject: [mg113789] Re: Constructing matrix out of submatrices
  • From: Bill Rowe <readnews at sbcglobal.net>
  • Date: Sat, 13 Nov 2010 00:57:56 -0500 (EST)

On 11/12/10 at 5:26 AM, sschmitt at physi.uni-heidelberg.de (Sebastian
Schmitt) wrote:

>I would like to construct a matrix out of submatrices. I guess this
>is straight forward but somehow I couldn't find the correct way in
>the documentation. The example that follows is of course simplified.
>Please don't take shortcuts.

>I start with a zero matrix and a submatrix:

>matrix = ConstantArray[0, {3, 3}] submatrix = {{a, b}, {c, d}}

>I want to specificy the upper-left corner in the matrix where the
>submatrix should be placed. If the position is {1,1} the result
>should be:

>result = {{a, b, 0}, {c, d, 0}, {0, 0, 0}}

>If it is {1,2}:

>result = {{0, a, b}, {0, c, d}, {0, 0, 0}}

Here is a simple way to achieve your goal:

In[2]:= SparseArray[Band[{1, 1}] -> submatrix, {3, 3}] // Normal

Out[2]= {{a, b, 0}, {c, d, 0}, {0, 0, 0}}

In[3]:= SparseArray[Band[{1, 2}] -> submatrix, {3, 3}] // Normal

Out[3]= {{0, a, b}, {0, c, d}, {0, 0, 0}}

Here, I used Normal simply to show the goal was achieved. And
note, I am *constructing* the matrix from the submatrix rather
than *replacing* a portion of a larger matrix with the submatrix.

If I wanted the submatrix in the lower right corner of a 3 x 3
matrix, I could do it as follows:

In[4]:= PadLeft[#, 3] & /@ Join[{{0, 0, 0}}, submatrix]

Out[4]= {{0, 0, 0}, {0, a, b}, {0, c, d}}

or

In[5]:= ArrayFlatten[{{List /@ {0, 0, 0}, Join[{{0, 0}}, submatrix]}}]

Out[5]= {{0, 0, 0}, {0, a, b}, {0, c, d}}



  • Prev by Date: Re: Constructing matrix out of submatrices
  • Next by Date: Re: shooting method, boundary value problem
  • Previous by thread: Re: Constructing matrix out of submatrices
  • Next by thread: Re: Constructing matrix out of submatrices