MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: ReplaceAll and ReplaceRepeated Strange Behavior

  • To: mathgroup at
  • Subject: [mg111506] Re: ReplaceAll and ReplaceRepeated Strange Behavior
  • From: Bill Rowe <readnews at>
  • Date: Tue, 3 Aug 2010 06:41:47 -0400 (EDT)

On 8/2/10 at 7:04 AM, blamm64 at (blamm64) wrote:

>Given the expression:

>eff = (L*(-L*mu+dm*Pi*Cos[b]))/(dm*Pi*(dm*Pi*mu+L*Cos[b]))

>After this I enter

>eff /. {dm*Pi -> L/Tan[a]}

>and get a result that does not, for a reason I cannot fathom and
>believe to be a bug, replace one instance of dm*Pi. The result of
>the evaluation yields


>Precisely the same result occurs with eff //.{dm*Pi->L/Tan[a]}

>Why is the one remaining dm*Pi not replaced with L/Tan[a]?

Replacements are done using a very literal matching on the
=46ullForm of the expression. There is no algebra done until after
the replacement occurs.

In this specific instance

In[11]:= FullForm[eff]

Out[11]//FullForm= Times[Power[dm,-1],L,Power[Pi,-1],Power[Plus[Times[dm,mu,Pi],Times[L,Cos[b]]],-1],Plus[Times[-1,L,mu],Times[dm,Pi,Cos[b]]]]

Note, the dm and Pi found in the denominator internally are seen
by Mathematica as being Power[dm,-1] and Power[Pi, -1]. Additionally,

In[15]:= MatchQ[Times[Power[dm, -1], Power[Pi, -1]], dm Pi]

Out[15]= False

This lack of matching is why the one dm*Pi you see in the
denominator did not get replaced. This is the way ReplaceAll
(/.) and ReplaceRepeated (//.) are supposed to work.

You can get the result you want by doing:

In[16]:= eff /. {dm -> L/Tan[a]/Pi}

Out[16]= (Tan[a]*(L*Cot[a]*Cos[b] - L*mu))/
    (L*mu*Cot[a] + L*Cos[b])


In[18]:= eff //. {dm*Pi -> L/Tan[a], 1/dm 1/Pi -> Tan[a]/L}

Out[18]= (Tan[a]*(L*Cot[a]*Cos[b] - L*mu))/
    (L*mu*Cot[a] + L*Cos[b])

The key to understanding why any replacement doesn't work as
expected is to look at the FullForm of the expression containing
the things to be replaced.

>By the way, how do you guys copy input or output from Mathematica
>notebook into this usergroup window?  I had to do all this by hand,
>copy it from here into a notebook, and execute the notebook cells just
>to make sure I was getting it correct.  I ran across this originally
>when I was constructing a simple notebook for doing some Acme power
>screw calculations.

Select the cell you want to copy then change it to InputForm.
See the menu item Cell->Convert To->input Form. Note, this
should have a keyboard short cut which on a Mac is cmd-shift-i.
Once you have converted the cell to input form, you will be able
to copy and paste that directly into an email without the manual
typing. Also note while it is possible to create something
readable with subscripts, Greek symbols etc in InputForm, posts
are generally much more readable if you avoid using those things.

  • Prev by Date: Re: Brillouin function for a Ferromagnet
  • Next by Date: More streamline with StreamDensityPlot
  • Previous by thread: Re: ReplaceAll and ReplaceRepeated Strange Behavior
  • Next by thread: Re: Bare Bones Backup Button