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