Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

How can I force Mathematica to completely evaluate a subexpression before using a replacement rule?

For example, consider the following definition (for the series of n correction factors in Stirling's formula):

stirlingSeries[n_] := 
Series[Exp[
Total[Table[(-1)^(k - 1)/k t^k h^(k/2 - 1), {k, 3, 
   2 n + 2}]]], {h, 0, n}] /. 
t^m_ -> If[Mod[m, 2] == 0, (m - 1)!!, 0]

What I want to tell Mathematica to do is replace powers of t at the end, as the very last step in calculating stirlingSeries[n]. Instead, it replaces them first. This changes the result of the calculation.

share|improve this question
4  
I don't think I see the problem. What are you expecting instead? –  Mr.Wizard Feb 1 '13 at 2:25
add comment

1 Answer

Let me guess what could be the problem: you could have defined m before executing the definition of stirlingSeries that you wrote in the question. In that case, the replacement rule -> would have assigned the current value of m, instead of the delayed value. To illustrate what I think went wrong, here is the scenario:

m = 4

(* ==> 4 *)


stirlingSeries[n_] := 
 Series[Exp[
    Total[Table[(-1)^(k - 1)/k t^k h^(k/2 - 1), {k, 3, 
       2 n + 2}]]], {h, 0, n}] /. 
  t^m_ -> If[Mod[m, 2] == 0, (m - 1)!!, 0]

stirlingSeries[4]

$$1+\sqrt{h}-\frac{7 h}{12}+\frac{199 h^{3/2}}{540}-\frac{3193 h^2}{12960}+\frac{46801 h^{5/2}}{272160}-\frac{6084467 h^3}{48988800}+\frac{13558333 h^{7/2}}{146966400}-\frac{494880067 h^4}{7054387200}+O\left(h^{9/2}\right)$$

stirlingSeries[n_] := 
 Series[Exp[
    Total[Table[(-1)^(k - 1)/k t^k h^(k/2 - 1), {k, 3, 
       2 n + 2}]]], {h, 0, n}] /. 
  t^m_ :> If[Mod[m, 2] == 0, (m - 1)!!, 0]

stirlingSeries[4]

$$1+\frac{h}{12}+\frac{h^2}{288}-\frac{139 h^3}{51840}-\frac{571 h^4}{2488320}+O\left(h^{9/2}\right)$$

On the last lines, I changed the definition to RuleDelayed (:>) which does what I believe you want: take the value of m to be that found in the pattern t^m_.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.