MathGroup Archive 2009

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

Search the Archive

Re: Replace not spotting a replacement

  • To: mathgroup at smc.vnet.net
  • Subject: [mg103422] Re: [mg103399] Replace not spotting a replacement
  • From: danl at wolfram.com
  • Date: Mon, 21 Sep 2009 05:50:56 -0400 (EDT)
  • References: <200909201021.GAA24204@smc.vnet.net>

> Hi Folks,
>
> Seems the replace function is being a bit dim here.  This fails:
>
> Sqrt[2 \[Pi]] \[Tau]^(3/2) /. Sqrt[ 2 \[Pi] \[Tau]] -> \[Mu]
>
> Apologies if this is an FAQ - I couldn't see anything about it.  What do I
> need to do here to coerce Mathematica into making this replacement? I
> tried using the
> Collect function on tau first, but that didn't seem to work.  I also tried
> re-writing the replacement rule as
>
> Sqrt[2 \[Pi]] \[Tau]^(3/2) /. Sqrt[ 2 \[Pi] ] t^(1/2) -> \[Mu]
>
> But still no joy.
>
> Anyone know?
>
> Many thanks,
> David.

It's more of an Occasionally Asked Question. Replacement is working fine;
the fact is, your expression does not contain \[Tau]^(1/2). Syntactic
replacement cares about niceties of that sort.

What you want can usually be attained by algebraic replacement. I say
"usually" because it can be a bit tricky to get the right algebraic
relation recognized where it is needed. Here is a slight alteration of
some code from a few years back, that works on your example.

replacementFunction[expr_, rep_, vars_] :=
 Module[{num = Numerator[expr], den = Denominator[expr],
   hed = Head[expr], base, expon},
  If[PolynomialQ[num, vars] &&
    PolynomialQ[den, vars] && ! NumberQ[den],
   replacementFunction[num, rep, vars]/
    replacementFunction[den, rep, vars],
   If[hed === Power && Length[expr] == 2,
    base = replacementFunction[expr[[1]], rep, vars];
    expon = replacementFunction[expr[[2]], rep, vars];
    PolynomialReduce[base/expon, rep, vars][[2]],
    If[Head[hed] === Symbol &&
      MemberQ[Attributes[hed], NumericFunction],
     Map[replacementFunction[#, rep, vars] &, expr],
     PolynomialReduce[expr, rep, vars][[2]]]]]]

In[10]:= replacementFunction[Sqrt[2 \[Pi]] \[Tau]^(3/2),
 Sqrt[2 \[Pi] \[Tau]] - \[Mu], \[Tau]]

Out[10]= \[Mu]^3/(2 \[Pi])

Some day I'll have an epiphany, or at least a minor vision, and see a way
to code this so that it always just "does the right thing", whatever that
might be.

Daniel Lichtblau
Wolfram Research





  • Prev by Date: Re: Overlaying List...Plots with other Plots?
  • Next by Date: Re: Modifying Default Stylesheet?
  • Previous by thread: Re: Replace not spotting a replacement
  • Next by thread: Re: Re: Replace not spotting a replacement