Hi Chris, In order to simplify these further you'll need to break down U1 and U2 so that they are of compatible shape with D1 and the 0-matrix. At the moment there is no way to take these larger matrices and simplify them against smaller ones. This mismatch would be more evident if we had size-sensitive printing. For example seeing the U_1^T on the right as a big solid block rather than a single letter would make this mismatch easier to spot.
One way to cut the matrices into smaller blocks is with blockcut. The inputs are input matrix, desired row sizes, desired block sizes. Output is a blockmatrix of MatrixSlice objects U1 = blockcut(U1, (n1,), (n1, n2)) U2 = blockcut(U2, (n2,), (n1, n2)) They look like this In [13]: U1 Out[13]: [U₁[:n₁, :n₁] U₁[:n₁, n₁:n₁ + n₂]] After you do this (and go through the rest of your pipeline) then block_collapse reduces things cleanly to a 2x2 block matrix. All of the indexing can get in the way of clean printing unfortunately. You might consider creating MatrixSymbols U11, U12, U21, U22 explicitly. Best, -Matt On Thu, Mar 6, 2014 at 4:19 PM, Chris <[email protected]> wrote: > Dear all, > > > I'm trying to use block matrices in the following way: > > > n1, n2 = symbols('n1 n2', integer=True) > > U1 = MatrixSymbol('U1', n1, n1+n2) > U2 = MatrixSymbol('U2', n2, n1+n2) > > D1 = MatrixSymbol('D1', n1, n1) > D2 = MatrixSymbol('D2', n2, n2) > > D = BlockDiagMatrix(D1, D2) > U = BlockMatrix([[U1], [U2]]) > K = U * D * U.T > > Kc = sympy.block_collapse(K) > > For the record, K looks like this: > In [32]: K > Out[32]: > ⎡ T T⎤ > ⎡U₁⎤⋅⎡D₁ 0 ⎤⋅⎣U₁ U₂ ⎦ > ⎢ ⎥ ⎢ ⎥ > ⎣U₂⎦ ⎣0 D₂⎦ > > > Kc looks as follows: > > ⎡ T T⎤ > ⎢⎡U₁⎤⋅⎡D₁ 0 ⎤⋅U₁ ⎡U₁⎤⋅⎡D₁ 0 ⎤⋅U₂ ⎥ > ⎢⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎥ > ⎣⎣U₂⎦ ⎣0 D₂⎦ ⎣U₂⎦ ⎣0 D₂⎦ ⎦ > > > In [30]: Kc.blockshape > Out[30]: (1, 2) > > > What I'm looking for is a way to recursively break down these blocks > further (i.e. a blockshape of (2,2)). I tried the following, to no avail: > > In [31]: sympy.block_collapse(Kc.blocks[0]) > Out[31]: > > > T > ⎡U₁⎤⋅⎡D₁ 0 ⎤⋅U₁ > ⎢ ⎥ ⎢ ⎥ > ⎣U₂⎦ ⎣0 D₂⎦ > > > > > Any ideas on how to achieve this? > > > Thank you! > Chris > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/sympy. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/4297d8bf-c9a7-4927-bd25-428bc2ea4954%40googlegroups.com<https://groups.google.com/d/msgid/sympy/4297d8bf-c9a7-4927-bd25-428bc2ea4954%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAJ8oX-E9B1fuuuirUNYZSPC9ckPAFGjHTxcQxABK%2B%2B4u-U3EsA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
