       Re: Package for Blockmatrices

• To: mathgroup at smc.vnet.net
• Subject: [mg7778] Re: Package for Blockmatrices
• From: Hans Steffani <hans.steffani at e-technik.tu-chemnitz.de>
• Date: Tue, 8 Jul 1997 22:40:58 -0400
• Sender: owner-wri-mathgroup at wolfram.com

```>As you maybe saw, I am working on a package which handles
>symbolik block matrices ie matrices which elements are
>matrices themselfes. This leads to different behavior of
>Dot and Transpose which are implemented in the package.

>The package seems to work but I am not sure whether the
>simplify functions are optimal concerning calculating time.

>I hope to get some hints but also that the package may be
>interesting for other mathematica users.

I solved some errors (maybe is made some new ones) and
changed the head of the both simplify functions.

Hans Friedrich Steffani

--snip--snap--begin of block.m--snip--snap--
(*
block.m
Handles the dot product of symbolik block matrix.
This means that the elements of a matrix are not skalars
but matrices.
eg:
(A11 A12) (B11 B12)   (A11.B11+A12.B21  A11.B12+A12.B22)
(       ) (       ) = (                                )
(A21 A22) (B21 B22)   (A21.B11+A22.B21  A21.B12+A22.B22)
using the dot product on the right hand side instead of
the normal times.

Also Transpose[] has been enhaced because not only the
blockmatrix itsself but also its elements have to be
transposed.

Todos: SymmetricSimplify[] and DotSimplify[] should become part
of Simplify[]. An Inverse[] and Det[] have to be adapte to this
purpose.

Hans Friedrich Steffani

Version 0.11 End fixed
0.2  Functions changed
0.21 Functions which are not needed are removed
*)

BeginPackage["Utilities`Block`"]

DotSimplify::usage =
"DotSimplify[expr, Scalars->{list of scalars}] replaces Dot[a,b]
by Times[a,b] if a or b are in the list of scalars"

Scalars::usage =
"Scalars is an option for DotSimplify[expr, Scalars->{list of scalars}."

SymmetricSimplify::usage =
"SymmetricSimplify[expr, Symmetric->{list of symmetric values}]
replaces Transpose[a] if a is in the list of symmetric values"

Symmetrics::usage =
"Symmetrics is an option for SymmetricSimplify which indicates
symmetric matrices."

Begin["`Private`"]

Unprotect[Transpose]
(* To Transpose the matrix all Elements get transposed
and the matrix itself too *)
Transpose[m_?MatrixQ] := Transpose[Map[Transpose, m,{2}],
{2,1}]
Transpose[m_?NumberQ] := m
Transpose[Transpose[expr_]] := expr
Protect[Transpose]

Unprotect[Dot]

Dot[a_?MatrixQ, b_?MatrixQ] := Inner[Dot, a, b, Plus]
Dot[a_?NumberQ, b_] := Times[a, b]
Dot[a_, b_?NumberQ] := Times[a, b]

Protect[Dot]

DotSimplify[expr_,
opt:Scalars->theScalars_List] :=
Module[{},

Unprotect[mydot];
Clear[mydot];
mydot[m1_/; (MemberQ[theScalars,m1]), m2_ ] := Times[m1,m2] ;
mydot[m1_, m2_/; (MemberQ[theScalars,m2]) ] := Times[m1,m2] ;
SetAttributes[ mydot,{Flat,OneIdentity} ];
Protect[mydot];

mytranspose[ m_/; (MemberQ[theScalars,m]) ] := m;

expr/.{Dot->mydot,Transpose->mytranspose}/.{mydot->Dot,mytranspose->Transpose}
]

SymmetricSimplify[expr_,
opt:Symmetrics->theSymmetrics_List ] :=
Module[{},
Clear[mytranspose];
mytranspose[ m_/;(MemberQ[ theSymmetrics, m]) ] := m;
expr/.{Transpose->mytranspose}/.{mytranspose->Transpose}
]

Unprotect[Simplify]
Protect[Simplify]

End[] (* Private *)

EndPackage[]

--snip--snap--end of block.m--snip--snap--

--
Hans Friedrich Steffani
Institut fuer Elektrische Maschinen und Antriebe, TU Chemnitz-Zwickau
mailto:hans.steffani at e-technik.tu-chemnitz.de
http://www.tu-chemnitz.de/~hfst/

```

• Prev by Date: Re: recovering from forgetfulness
• Next by Date: Remote Kernel Operation
• Previous by thread: Package for Blockmatrices