MathGroup Archive 2007

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

Search the Archive

Re: Simplifying {0,0,0}.X.{0,0,0}

  • To: mathgroup at smc.vnet.net
  • Subject: [mg74062] Re: Simplifying {0,0,0}.X.{0,0,0}
  • From: "Jean-Marc Gulliet" <jeanmarc.gulliet at gmail.com>
  • Date: Thu, 8 Mar 2007 04:36:07 -0500 (EST)
  • References: <esjg5a$26q$1@smc.vnet.net> <45ED6EFF.9050603@gmail.com>

Will Robertson wrote:
> Hello,
>
> In brief: Is there a way that I can specify that "X" is a matrix and
> will resolve to zero when dot multiplied with a vector of zeros?
>
> I'm constructing a swathe of expressions that contain things like
> (when expanded): {0,0,0}.X.{0,0,0}, where X is an arbitrary (well,
> positive definite) square matrix of obvious size, and I'd like to be
> able to have mathematica simplify that for me without much
> intervention.
>
> My only option at the moment is to manually perform the replacements
> {{0, 0, 0}.X._ -> 0, _.X.{0, 0, 0} -> 0} (the left and right vectors
> won't always both be zeros), but this is tedious to perform for a
> large number of expressions. I could also define the matrix X in terms
> of its indices and end up with expressions in terms of x11, x12, ... ,
> x33, but I'd rather not do that.

Hi Will,

If I have correctly understood your query, the following combination of
up-values to the symbol X and down-values to the Dot operator should do
what you are looking for.

In[1]:=
X /: {(0)...} . X = 0;
X /: X . {(0)...} = 0;
Unprotect[Dot];
{___} . 0 = 0;
0 . {___} = 0;
Protect[Dot];
UpValues[X]
DownValues[Dot]
{0, 0} . X
X . {0, 0, 0}
{1, 2, 3, 4} . X . {0, 0, 0, 0}
{0, 0, 0, 0, 0} . X . {5, 6, 7, 8, 9}

Out[7]=
{HoldPattern[{(0)...} . X] :> 0,

   HoldPattern[X . {(0)...}] :> 0}

Out[8]=
{HoldPattern[{___} . 0] :> 0,

   HoldPattern[0 . {___}] :> 0}

Out[9]=
0

Out[10]=
0

Out[11]=
0

Out[12]=
0

Regards,
Jean-Marc


  • Prev by Date: Re: Integrate
  • Next by Date: Re: "Transparency" with respect to differentiation
  • Previous by thread: Re: Simplifying {0,0,0}.X.{0,0,0}
  • Next by thread: logical/set theoretic programming