[Date Index]
[Thread Index]
[Author Index]
Re: Re: Re: Problem with Mathematica 6
*To*: mathgroup at smc.vnet.net
*Subject*: [mg77382] Re: [mg77305] Re: [mg77080] Re: [mg77065] Problem with Mathematica 6
*From*: DrMajorBob <drmajorbob at bigfoot.com>
*Date*: Thu, 7 Jun 2007 04:04:36 -0400 (EDT)
*Organization*: Deep Space Corps of Engineers
*References*: <200706020819.EAA29947@smc.vnet.net> <30015102.1181071420143.JavaMail.root@m35> <op.ttg8bjh0qu6oor@monster.ma.dl.cox.net> <17489534.1181136418488.JavaMail.root@m35>
*Reply-to*: drmajorbob at bigfoot.com
I'd have to retrieve your initial message to test the second method. I =
used the first.
Both methods are tedious, obviously.
Bobby
On Wed, 06 Jun 2007 06:24:49 -0500, Andrzej Kozlowski <akoz at mimuw.edu.pl=
> =
wrote:
> Does this happen when you copy the entire code and then edit it in
> Mathematica (removing the Ins and the Outs in Mathematica) or when
> you copy it line by line?
> In my case I always use the latter approach (and I do not select Ins
> and Outs before copying) and after pasting into Mathematica
> everything works fine.
>
> Andrzej Kozlowski
>
>
>
> On 6 Jun 2007, at 10:41, DrMajorBob wrote:
>
>> If I copy your code into a notebook and execute it (after painfully
>> removing all that In[]:= and Out[]:= nonsense) I get this error
>> message after each use of SmallCircle:
>>
>> Set::write: Tag Factorial in 0! is Protected.
>>
>> If I go back and excute the SmallCircle uses AGAIN, there's no
>> error message, because GetGradeds has stored a result and doesn't
>> repeat the broken test.
>>
>> Then, if I put my cursor after != and press space, Quit, and run
>> the code again, all is well.
>>
>> Apparently, the line break between ! and = caused this strange
>> behavior. The copied code includes what looks like != in the
>> notebook, but it's actually something else.
>>
>> Bobby
>>
>> On Sun, 03 Jun 2007 05:05:27 -0500, Andrzej Kozlowski
>> <akoz at mimuw.edu.pl> wrote:
>>
>>>
>>> On 2 Jun 2007, at 17:19, Michael Weyrauch wrote:
>>>
>>>> Hello,
>>>>
>>>> the following code fragment runs under Mathematica 5.2 but
>>>> produces an infinite recursion error in Mathematica 6.0 in certain
>>>> cases:
>>>>
>>>> First I define a number of commands and slightly change the
>>>> built-in command "NonCommutativeMultiply":
>>>> Grading[_] = 0;
>>>> Fermion[a__] := ((Grading[#1] = 1) & ) /@ {a};
>>>> Fermion[a, b];
>>>> GetGradeds[a___] := GetGradeds[a] = Select[{a}, Grading[#1] !==
0
>>>> & ];
>>>>
>>>> Unprotect[NonCommutativeMultiply];
>>>> NonCommutativeMultiply[a___] /; (Length[GetGradeds[a]] <= 1) :==
>>>> Times[a];
>>>> Protect[NonCommutativeMultiply];
>>>>
>>>> If you now e.g. evaluate
>>>>
>>>> In[22]:= k ** l
>>>> Out[22]= k*l
>>>>
>>>> or
>>>>
>>>> In[23]:= a ** l
>>>> Out[23]= a*l
>>>>
>>>> BUT in Mathematica 6.0:
>>>>
>>>> In[24]:= a ** b
>>>>
>>>> $IterationLimit::"itlim" : "Iteration limit of 4096 exceeded. \
>>>> \!\(\*ButtonBox["\[RightSkeleton]",
>>>> BaseStyle->"Link",
>>>> ButtonData:>"paclet:ref/message/$IterationLimit/itlim",
>>>> ButtonFrame->None,
>>>> ButtonNote->"$IterationLimit::itlim"]\)"
>>>> Out[24]= Hold[(Times[a]) ** b]
>>>>
>>>> However in Mathematica 5.2 one gets
>>>>
>>>> In[10]:= a ** b
>>>> Out[10]=a**b
>>>>
>>>> which is what I expect and I want to have.
>>>>
>>>> I.e., whenever I NonCommutativeMultiply two variables which are
>>>> explicitly declared as fermions by the command Fermion[], I get an
>>>> infinite recursion error in Mathematica 6.
>>>>
>>>> This behaviour of Mathematica 6.0 is rather confusing to me, since
>>>> I believe that I just use very basic and elementary assignments
>>>> in my code. Why shouldn't it work under Mathematica 6.0 if it
>>>> works under 5.2? It appears that the 6.0 kernel behaves differently=
>>>> than the
>>>> 5.2 kernel in such basic situations. Very unpleasant!
>>>>
>>>> (For anyone who wonders about the purpose of this (strange) code:
>>>> It is a small fragment of a package that implements the handling
>>>> of Grassmann variables. I just extracted that bit in order to show
>>>> the Mathematica 6.0 problem.)
>>>>
>>>> Furthermore, beyond an explanation of this unexpected behaviour of
>>>> Mathematica 6, I would like to find a workaround in Mathematica 6
>>>> such that I get
>>>> the same result as in Mathematica 5.2.
>>>>
>>>> Thanks for any suggestions.
>>>>
>>>> Michael Weyrauch
>>>>
>>>
>>> On of the most basic principles in Mathematica programming, stated,
>>> over the years, a number of times on this list by WRI employees,
>>> (particularly by David Withoff) is if you choose to Unprotect and
>>> modify any built-in functions you can only blame yourself for any
>>> unpleasantness that might occur. The workaround is: don't do it.
>>>
>>> One think you can do instead is to do essentially the same thing
>>> without modifying NonCompputativeMultiply. If you want to use a
>>> symbol that looks like multiplication you could choose SmallCircle.
>>> You could then do something like this:
>>>
>>> In[1]:= Grading[_] = 0;
>>> In[2]:= Fermion[a__] := ((Grading[#1] = 1) &) /@ {a};
>>> In[3]:= Fermion[a, b]
>>> Out[3]= {1, 1}
>>> In[4]:= GetGradeds[a___] := GetGradeds[a] = Select[{a}, Gradin=
g[#1] !
>>> = 0 &];
>>> In[9]:= SmallCircle[z___] /; (Length[GetGradeds[z]] <= 1) := T=
imes
>>> [z];
>>> In[10]:= SmallCircle[z___] := NonCommutativeMultiply[z]
>>>
>>> In[13]:= SmallCircle[a, l]
>>> Out[13]= a l
>>>
>>> SmallCircle[a,b]
>>>
>>> In[14]:= SmallCircle[a, b]
>>> Out[14]= a ** b
>>>
>>> In[17]:= SmallCircle[a, l, m]
>>> Out[17]= a l m
>>>
>>> Of course instead of writing SmallCircle[a,l,m] you can use as
>>> input a escape sc escape l escape sc escape m .
>>>
>>> Andrzej Kozlowski
>>>
>>>
>>
>>
>>
>> --
>> DrMajorBob at bigfoot.com
>
>
>
-- =
DrMajorBob at bigfoot.com
Prev by Date:
**Re: NDSolve Errors: icfail and ntdv**
Next by Date:
**Re: Fun with zero sums**
Previous by thread:
**Re: Re: Problem with Mathematica 6**
Next by thread:
**Re: Problem with Mathematica 6**
| |