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
djmp at earthlink.net
http://home.earthlink.net/~djmp/
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