Re: Conversion of Orderless functions to non Orderless one
- To: mathgroup at smc.vnet.net
- Subject: [mg24069] Re: [mg24046] Conversion of Orderless functions to non Orderless one
- From: Andrzej Kozlowski <andrzej at tuins.ac.jp>
- Date: Thu, 22 Jun 2000 01:02:03 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
It seems you want to be able to do some non-commutative algebra. The question is "how much?" If you want to do only what you wrote in your posting and no more than the following might be enough. In[1]:= SetAttributes[times, {Flat, OneIdentity}] In[2]:= times[l___] := Times @@ DeleteCases[{l}, a | b | c] ** NonCommutativeMultiply @@ Cases[{l}, a | b | c] Now you can get something like what you asked for: In[4]:= times[c, x, y, b, v, a, z] Out[4]= (v x y z) ** c ** b ** a However,if you want be able to do any algebra, e.g. expand expressions etc. then the the only choice (not involving a lot of programming) seems to be to download the NonCommutative algebra package available on MathSource. It is a powerful package which I used quite lot about a year ago. You should be warned however of several problems. First of all, the documentation is very inconvenient, being in the form of a dvi file without hyperlinks. Secondly, it is not really a proper Mathematica package (it does not use contexts). The easiest way to load it is to use SetDirectory to enter the NCAlgebra directory and load the NCAlgebra.m file (which loads in a number of individual files of which this "package" consists of) with: << NCAlgebra` The functions defined in this "package" allow you to do a lot of non-commutative algebra, of the kind you seem to be interested in, but you have to carefully avoid using many built in functions (e.g. you should use NonCommutativeExpand, not Expand, you can't use the built in Power, and so on. Of course I do not mean that your computer will explode if ytou do so, just that you will get answers which are likely to be wrong). It would certainly seem a good idea for Mathematica to include more non-commutative functions than the very rudimentary NonCommutativeMultiply. There has been some talk about this for a long time but so far other things seem to have been given higher priority. Andrzej -- Andrzej Kozlowski Toyama International University, JAPAN For Mathematica related links and resources try: <http://www.sstreams.com/Mathematica/> on 6/21/00 3:20 PM, zhl67 at hotmail.com at zhl67 at hotmail.com wrote: > Hi, there > > My question might be silly to somebody out there but it really bothers > me: Is there any way to convert an orderless function into non > orderless ones for a certain range of arguments? > > For instance, let's say have a set Operators: > > Operators={a,b,c} > > What I wanted to do is that whenever expressions like Times[b,a,c] is > entered, the outcome should look like b**a**c (i.e. Times turned into > NonCommutativeMultiply). The special requirement is that this change > happens only for members of the set Operators (otherwise I can just > ClearAttributes[Times,Orderless] ), and that the output keeps the order > of the input argument, i.e. it should be b**a**c, NOT a**b**c. Could > anyone help the case? > > Liu Zhao > Univ. York, UK > > > Sent via Deja.com http://www.deja.com/ > Before you buy. >