Re: Re: symbol replace
- To: mathgroup at smc.vnet.net
- Subject: [mg51274] Re: [mg51244] Re: [mg51241] symbol replace
- From: Delfino Matteo <delfino at studenti.ph.unito.it>
- Date: Mon, 11 Oct 2004 01:25:33 -0400 (EDT)
- References: <200410090819.EAA09741@smc.vnet.net> <200410100557.BAA22538@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Hi,
have you ever tried the package <<Utilities'Notation? It is a standard
built-in package and I think It's perfect for your first problem, just do:
<< Utilities`Notation`
Notation Palette will appear, then select Symbolize[] from the palette
(AND ONLY FROM THE PALETTE,do not type it) and:
Symbolize[Eo];
every expression containing Eo from now on will be treated correctly (even
replace rules),for more informations about Symbolize[] ??Symbolize or
search mathematica help browser.
Hope it helps,
Delfino Matteo
> Hi,
>
> Answer to the first question.
> You should temporary replace \!\(E\_0\) (Subscript[E,0]) with "E0" or
> other unused symbol, then perform substitution and finally replace "E0"
> back:
>
> In[1]= E*Subscript[E,0]/.
> Subscript[E,0]->"E0"/.
> E->Subscript[E,0]/.
> "E0"->Subscript[E, 0]
> Out[1]= Subscript[E, 0]^2
>
> The following is general solution for this problem.
> Function "SubscriptProtectReplaceAll" is the same as
> Build-In function "ReplaceAll", but it preserves parts of
> Subscripted symbols from replacing:
>
> In[2]= SubscriptProtectReplaceAll[exprn_, rules_] :=
> Module[{ProtectRules},
> ProtectRules =
> Cases[
> exprn,
> Subscript[A_,b_]:>(Subscript[A,b]->Unique[tmp]),
> {0, Infinity},
> Heads->True
> ];
> exprn/.ProtectRules/.rules/.(Reverse/@ProtectRules)
> ]
>
> In[3]= SubscriptProtectReplaceAll[
> E*Subscript[E,0],
> E->Subscript[E,0]
> ]
> Out[3]= Subscript[E,0]^2;
>
> More sophisticated example:
>
> In[4]= \!\(SubscriptProtectReplaceAll[A+A\_2+A\_A+A\_\(A\_3\)+A\_4[x],
> A->A\_1]\)
> Out[4]= \!\(A\_1+A\_2+A\_A+A\_\(A\_3\)+A\_4[x]\)
>
> The following code permanently substitutes "ReplaceAll" with
> "SubscriptProtectReplaceAll":
>
> In[5]= Unprotect[ReplaceAll];
> SubscriptProtect[ReplaceAll]=True;
> (exprn_ /. rules_)/;SubscriptProtect[ReplaceAll]:=
> Block[{SubscriptProtect},
> SubscriptProtect[ReplaceAll]=False;
> SubscriptProtectReplaceAll[exprn, rules]
> ];
> Protect[ReplaceAll];
>
> Now you can use ordinary substitution symbol "/.":
>
> In[6]= \!\(A+A\_2+A\_A+A\_\(A\_3\)+A\_4[x]/.A->A\_1\)
> Out[6]= \!\(A\_1+A\_2+A\_A+A\_\(A\_3\)+A\_4[x]\)
>
> Resetting
>
> In[7]= SubscriptProtect[ReplaceAll]=False;
>
> Will return you to ordinary substitution rules.
>
>
>
> Sincerely,
> Maxim A. Dubinnyi
>
>
>
> symbio wrote:
>
>>I am facing 2 problems with Mathematica:
>> 1st problem)
>>With replace all command, when I use it with subscripts I get an
>>unintended effect, this is what I do:
>>E * (Eo) /. E -> (Eo)
>>I intend to replace only E with Eo, but Mathematica instead replaces
>>all E's with (Eo) and I get this instead:
>>(Eo) * (Eo)o
>>Please note the 'o' in Eo is supposed to be a subscript here and reads
>>Enot. Can anyone please help?
>>here is the Mathematica code:
>>
>>In[1]:=
>>\!\(E\ *\ E\_0\ /. \ E -> \ E\_0\)
>>Out[1]=
>>\!\(\[ExponentialE]\_0\ \((\[ExponentialE]\_0)\)\_0\)
>>
>>2nd problem)
>>I like to use descriptive names for my variables with Underscore to
>>separate the names, it's really easier to read, but of course
>>underscore is a special character in Mathematica unfortunately, so is
>>there an alternative?? For example, I like to use variable
>>Dynamic_Energy_of_Stars_With_Sand = 123; Is there something else
>>equally as obvious as Underscore that maybe used for purpose of
>>separting words in a variables names??
>>
>>Thanks a lot for your help
>>
>>
- References:
- symbol replace
- From: "symbio" <symbio@h0tmail.com>
- Re: symbol replace
- From: "Maxim A. Dubinnyi" <maxim@nmr.ru>
- symbol replace