       RE: Expanding expressions with Dot, Times and Plus

• To: mathgroup at smc.vnet.net
• Subject: [mg35511] RE: [mg35501] Expanding expressions with Dot, Times and Plus
• From: "David Park" <djmp at earthlink.net>
• Date: Wed, 17 Jul 2002 02:09:01 -0400 (EDT)
• Sender: owner-wri-mathgroup at wolfram.com

```Jeremy,

This is an interesting question and I hope you will get answers from some of
the real experts. I had trouble writing a routine using Dot. I think the
problem relates to the fact that Dot has the Attribute Flat. The following
routine works for CircleDot.

distributeCircleDot[expr_] :=
expr //.
{CircleDot[a___, m_ b : CircleDot[__], c___] :> m CircleDot[a, b, c],
prod : CircleDot[a_, b__] :> Distribute[prod, Plus]}

test = -a\[CircleDot](b\[CircleDot]c - d\[CircleDot]e);
test // distributeCircleDot

-a\[CircleDot](b\[CircleDot]c) + a\[CircleDot](d\[CircleDot]e)

When I tried the same routine with Dot, it didn't work. So I just changed
Dot to CircleDot, applied the rules, and changed CircleDot back to Dot.

distributeDot[expr_] :=
Module[{work},
work = expr /. Dot -> CircleDot;
work =
work //. {CircleDot[a___, m_ b : CircleDot[__], c___] :>
m CircleDot[a, b, c],
prod : CircleDot[a_, b__] :> Distribute[prod, Plus]};
work /. CircleDot -> Dot
]

test = a.(b.c + d.e);
test // distributeDot
a.b.c + a.d.e

test = -a.(b.c - d.e);
test // distributeDot
-a.b.c + a.d.e

-ex[0, 1].(ex[0, 1].ex[1, 2] - ex[1, 2].ex[0, 1]) // distributeDot
-ex[0, 1].ex[0, 1].ex[1, 2] + ex[0, 1].ex[1, 2].ex[0, 1]

David Park

From: JL [mailto:jl at aol.com]
To: mathgroup at smc.vnet.net

I am trying to expand a large expression that has terms that look as

follows:

-ex[0,1].(ex[0,1].ex[1,2]-ex[1,2].ex[0,1])

where ex[i,j] are unevaluated expressions. I would like Mathematica to
simplify this and analogous expressions so that they read:

ex[0,1].ex[1,2].ex[0,1]-ex[0,1].ex[0,1].ex[1,2]

However, I cannot seem to find anything that will work. The problem is that
I need to keep track of the order of the expressions ex[i,j]. If Dot were
replaced by Times, there would be no problem whatsoever.

If anyone knows how to help me with this problem, I would greatly appreciate
it.

Thanks,

Jeremy Levy

jlevy at pitt.edu

```

• Prev by Date: RE: simplifying operator experessions with Dot, Times a nd Plus
• Next by Date: Re: Function resolution bug in g++ ?
• Previous by thread: RE: Expanding expressions with Dot, Times and Plus
• Next by thread: Re: Expanding expressions with Dot, Times and Plus