Re: Subscript Bug?
- To: mathgroup at smc.vnet.net
- Subject: [mg90131] Re: Subscript Bug?
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Mon, 30 Jun 2008 04:52:44 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <g47l28$t66$1@smc.vnet.net>
Aaron Fude wrote:
> I have this code in a cell:
>
> Subscript[H, 1] = 110; Subscript[H, 2] = 90;
> H = Subscript[H, 1] + Subscript[H, 2];
> Tanh[Subscript[H, 1]]
>
> The first time I execute the cell, I get
>
> Tanh[Subscript[200, 1]]
>
> which of course is nonsense.
>
> A second execution, yields the correct answer:
>
> Tanh[110]
>
> Is this a feature that I don't understand or a bug?
*NO BUG HERE*. The "feature" you are looking for is indeed the standard
evaluation process of an expression by Mathematica (the main loop) and
you must keep in mind that _subscripted names are not symbols_.
That is they are *not* atomic.
Thus any elements, or their values, within the head *Subscript* can (and
will) change if any replacement rules may be applied.
To correctly deal with subscripted names as if they were symbols, you
must use the *Symbolize* command from the *Notation* package [1, 2, 3].
The first time you execute the cell, H is equal to 200 and is replaced
in the Tanh expression.
Then second time you execute the cell, H_1 becomes 200_1 and the
expression 200_1 gets the values 100.
You can follow the whole process below.
In[1]:= Subscript[H,1]=110;Subscript[H,2]=90;
H=Subscript[H,1]+Subscript[H,2];
Tanh[Subscript[H,1]]//Trace
Out[3]= {{{H,200},Subscript[200, 1]},Tanh[Subscript[200, 1]]}
In[4]:= ?Global`*
Global`H
H0
In[5]:= Tanh[Subscript[H,1]]//Trace
Out[5]= {{{H,200},Subscript[200, 1]},Tanh[Subscript[200, 1]]}
In[6]:= Subscript[H,1]=110;Subscript[H,2]=90;
Subscript[200,1]===Subscript[H,1]
Out[7]= True
In[8]:= Tanh[Subscript[H,1]]//Trace
Out[8]= {{{H,200},Subscript[200, 1],110},Tanh[110]}
In[9]:= <<Notation`
Symbolize[Subscript[H, _]]
Subscript[H,1]=110;Subscript[H,2]=90;
H=Subscript[H,1]+Subscript[H,2];
Tanh[Subscript[H,1]]
Out[13]= Tanh[110]
Regards,
-- Jean-Marc
(* Easy cut and past without the outputs. *)
Subscript[H, 1] = 110; Subscript[H, 2] = 90;
H = Subscript[H, 1] + Subscript[H, 2];
Trace[Tanh[Subscript[H, 1]]]
Information["Global`*", LongForm -> False]
Trace[Tanh[Subscript[H, 1]]]
Subscript[H, 1] = 110; Subscript[H, 2] = 90;
Subscript[200, 1] === Subscript[H, 1]
Trace[Tanh[Subscript[H, 1]]]
<< "Notation`"
Symbolize[ParsedBoxWrapper[\(H \_ _\)]]
Subscript[H, 1] = 110; Subscript[H, 2] = 90;
H = Subscript[H, 1] + Subscript[H, 2];
Tanh[Subscript[H, 1]]
[1] http://reference.wolfram.com/mathematica/Notation/tutorial/\
NotationSymbolizeAndInfixNotation.html
[2] Notation/guide/NotationPackage
[3] http://reference.wolfram.com/mathematica/Notation/ref/Symbolize.html