Re: ReplaceAll and ReplaceRepeated Strange Behavior
- To: mathgroup at smc.vnet.net
- Subject: [mg111506] Re: ReplaceAll and ReplaceRepeated Strange Behavior
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Tue, 3 Aug 2010 06:41:47 -0400 (EDT)
On 8/2/10 at 7:04 AM, blamm64 at charter.net (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 >L*(-L*mu+L*Cos[b]*Cot[a])/(dm*Pi*(L*Cos[b]+L*mu*Cot[a])) >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]) or 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.