MathGroup Archive 2002

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

Search the Archive

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






  • 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