MathGroup Archive 1999

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

Search the Archive

Re: Setting order of variables other than alphabetical.

  • To: mathgroup at smc.vnet.net
  • Subject: [mg21150] Re: Setting order of variables other than alphabetical.
  • From: Bojan Bistrovic <bojanb at physics.odu.edu>
  • Date: Fri, 17 Dec 1999 01:22:00 -0500 (EST)
  • Organization: Old Dominion Universityaruba
  • References: <831v8k$g4p@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

chesri wrote:
> 
> Hello!
> 
> I am a regular user of MATHEMATICA, and while doing problems in
> dynamical system theory, I have faced following problem.
> 
> Consider a term involving power series expansion terms. (These terms too
> were generated using MATHEMATICA functions.)
> 
> ( e x10 +d x01+ e^2 x20 + 2 ed x11 + d^2 x02 + ...) ( e x10 +d x01+ e^2
> x20
>             + 2 ed x11 + d^2 x02 + ...)
> 
> The term in third order should be, for x1 = x10 = x01,
> 
> e^3 (x1 x2 + x2 x1)
> 
> but MATHEMATICA re-orders terms in alphabetical order and writes the
> term as
> 
> e^3 (2 x1 x2)
> 
> which is incorrect, if x1 and x2 are (column) vectors in R^n,
> i.e. x1 x2 [\NOT] = x2 x1.
> 
> Now it is possible to define a variable as is done to define it to be a
> real or integer by  setting an attribute, in MATHEMATICA as a general
> condition, but it is not possible to define it as a vector.
> 
> Does anyone know how to effectively set this problem right?
> 
> Satish

Aaaaah...
Wouldn't it be nice if you could? Unfortunately, as long as you multiply
something either by * or by leaving blank space it will be transformed
to commutaticve multiplication, a*b or a b are interpreted as Times[a,b]
which is by default commutative. You could try removing the attribute
Orderless from the Times function, but then objects would NEVER be
commutative. In other words, there's NO easy way to do it. You can try
using ether Dot product (a.b) or NonCommutativeMultiply (a**b) and then
manualy "pull out" everything you need, for example:

In[1]:= aa= ( e x10 +d x01+ e^2 x20 + 2 ed x11 + d^2 x02 ).( e x10 +d
x01+ e^2 x20 + 2 ed x11 + d^2 x02 )

Out[1]= ( e x10 +d x01+ e^2 x20 + 2 ed x11 + d^2 x02 ).( e x10 +d x01+
e^2 x20 + 2 ed x11 + d^2 x02)

In[2]:= Mytest[x_^n_]:=MemberQ[{e,d},x];
In[3]:= Mytest[x_]:=NumericQ[x]||MemberQ[{e,d},x];
In[4]:= distrules={x__ .((e_?Mytest)*y_) -> e*(x.y),((e_?Mytest)*x_
).y__ -> e*(x.y)};


In[5]:= Coefficient[Distribute[aa ]//. distrules , e^3]

Out[5]= x10.x20+2 d x11.x20+x20.x10+2 d x20.x11

or 

In[6]:= Select[%,FreeQ[#,d]&]
Out[6]= x10.x20+x20.x10

In more complex cases, you'd have to do more "tricks". I hope this
helps.

-- 
-------------------------------------------------------------
Bojan Bistrovic,                       bojanb at physics.odu.edu  
Old Dominion University, Physics Department,      Norfolk, VA
-------------------------------------------------------------


  • Prev by Date: Re: help - saving an eps file for latex
  • Next by Date: Re: 2 coupled diff. eqns
  • Previous by thread: Setting order of variables other than alphabetical.
  • Next by thread: Training in Mathematica