Thread Closed

[Mathematica 6.0+] Preserving order of variables

 
Share Thread Thread Tools
May26-09, 03:24 PM   #1
 
Recognitions:
Gold Membership Gold Member

[Mathematica 6.0+] Preserving order of variables


Is there a way to set Mathematica so that it preserves the order of variables.
i.e. I put:

F[x_] = A B x
F[a]
output : aAB

where I would want it: ABa

Thanks.
 
PhysOrg.com
PhysOrg
science news on PhysOrg.com

>> Front-row seats to climate change
>> Attacking MRSA with metals from antibacterial clays
>> New formula invented for microscope viewing, substitutes for federally controlled drug
May26-09, 05:04 PM   #2
 
Blog Entries: 5
Recognitions:
Homework Helper Homework Help
Science Advisor Science Advisor
I am having the same problem.
The best solution I have found in general is using NonCommutativeMultiply:
F[x_] := A ** B ** x
although you usually have to define lots of other stuff to get everything working out as you want.
In some cases (like where A and B are explicitly defined matrices) you can use matrix multiplication
F[x_] := A . B . x
or a function
F[x_] := AB[x]

Do you have anything specific in mind?
 
May26-09, 06:17 PM   #3
 
Recognitions:
Gold Membership Gold Member
I just have a long string of things that could either be matrices or vectors or scalars or tensors or etc. I'm trying to do some simplifications and then use the output. Its nothing special, I just need to preserve order. I'm not doing any REAL products (like inner, outer, contractions, etc) just representative products. If I define everything as matrices/vectors etc then it'll try to simplify it which i don't want. It needs to stay symbolic, yet perform basic distribution multiplication.

I guess I'll try the noncommutative, that should work.
Thanks!
 
May27-09, 08:38 AM   #4
 
Blog Entries: 5
Recognitions:
Homework Helper Homework Help
Science Advisor Science Advisor

[Mathematica 6.0+] Preserving order of variables


If you want distributivity, you probably want to define something like
Code:
ExpandNCM[x_] := x //. {
   NonCommutativeMultiply[a__, b_ + c_, d__] :> a ** b ** d + a ** c ** d
   }
So that, for example,
Code:
a ** (b + c) ** d // ExpandNCM
gives
Code:
a ** b ** d + a ** c ** d
.

By the way, you can also try
Code:
ClearAttributes[Times, Orderless]
but I don't think it's the best solution because the Orderless attribute gets re-set seemingly at random.
 
Thread Closed
Thread Tools


Similar Threads for: [Mathematica 6.0+] Preserving order of variables
Thread Forum Replies
Order-preserving Embedding Functions Set Theory, Logic, Probability, Statistics 1
how do i plot a function of two variables in mathematica? Math & Science Software 3
Order-preserving injection Calculus & Beyond Homework 1
order (mathematica) Math & Science Software 4
second order diff eq with two variables Calculus & Beyond Homework 7