3
$\begingroup$

I was trying to answer this question but having hard time with the correct way to write the transformation rule.

Trying to write a rule to transform Gamma[1/2 + n] to Sqrt[Pi] (Factorial2[2 *(n - 1/2) - 1])/2^(n - 1/2). Will worry about the conditions when this transformation is valid later on. I now can't even make Simplify use this rule.

The rule is being invoked (I add a Print and see it there), but the final result returned by the transformation function is not being used or returned)

I looked at this answer and tried what is there, but still no success. These are my attempts. The result of the Simplify command should return Sqrt[Pi] (Factorial2[2 *(n - 1/2) - 1])/2^(n - 1/2) in this example.

I am not sure if it is scoping issue. Can one use an If or Cases in the transformationFunction or must it be based only on the syntax of /. :>?

I wish help has more examples. Only 3 basic examples are shown and that is it.

When an expression being used inside the tranformation function (like in this case, Gamma[1/2 + n] then n here is taken as global symbol, right? I mean it will not have a $$n or it? That what seems to be the case. So I do not see why any of these are not working.

ClearAll[n, f, e];
f = # /. Gamma[1/2 + n] :> Sqrt[Pi] (Factorial2[2*(n - 1/2) - 1])/2^(n - 1/2) &
Simplify[Gamma[1/2 + n], TransformationFunctions -> {Automatic, f}]

Mathematica graphics

ClearAll[n, f, e];
f[e_] := If[MatchQ[e, Gamma[1/2 + n]], Sqrt[Pi] (Factorial2[2 *(n - 1/2) - 1])/2^(n - 1/2), e]
Simplify[Gamma[1/2 + n], TransformationFunctions -> {Automatic, f}]

Mathematica graphics

http://reference.wolfram.com/mathematica/ref/TransformationFunctions.html

$\endgroup$
7
  • $\begingroup$ Perhaps I didn't read it attentively enough, sorry if I'm rushing. But if the ComplexityFunction doesn't value the new transformed expression as less complex than the original, it won't transform anything. Could this be it? $\endgroup$
    – Rojo
    Commented Aug 12, 2013 at 20:23
  • $\begingroup$ @Rojo thanks. good point. I have not thought of this. So what is one supposed to do in this case? Use the ComplexityFunction in addition somehow? Will look into it. $\endgroup$
    – Nasser
    Commented Aug 12, 2013 at 20:26
  • $\begingroup$ Simplify and friends' objective is to "more or less" minimize the ComplexityFunction, and you can help out by allowing additional transformations to be tried on parts or subparts. If you don't specify a ComplexityFunction for which the expression you aim to get is simpler, then you are not really trying to simplify. $\endgroup$
    – Rojo
    Commented Aug 12, 2013 at 20:31
  • $\begingroup$ Try adding a ComplexityFunction that punishes Gamma, such as ComplexityFunction -> Function[exp, Count[exp, Gamma, Infinity, Heads -> True] 1000 + LeafCount@exp] $\endgroup$
    – Rojo
    Commented Aug 12, 2013 at 20:32
  • $\begingroup$ Arrgh, I had just been working on answering the question you referred to when I saw you asked an additional question on this. I'm afraid there's quite a bit of overlap. Anyway, there are several problems with your solution: 1) it only works with the literal symbol n and 2) it doesn't take the constraints on n (positive integer) into account. See my answer for that. $\endgroup$ Commented Aug 12, 2013 at 21:30

1 Answer 1

2
$\begingroup$

Thanks to @Rojo hint. The problem was that the complexity function needs to be also taken care of. Hence the final result works as below

ClearAll[n, tf, e, cf];
cf[e_] := Count[e, Gamma, Infinity, Heads -> True] 1000 + LeafCount@e 
tf[e_] := If[MatchQ[e, Gamma[1/2 + n]], Sqrt[Pi] (Factorial2[2 *(n - 1/2) - 1])/2^(n - 1/2), e]

Simplify[Gamma[1/2 + n], TransformationFunctions -> {Automatic, tf}, ComplexityFunction -> cf]

Mathematica graphics

Simplify[Gamma[1/3 + n], TransformationFunctions -> {Automatic, tf}, ComplexityFunction -> cf]

Mathematica graphics

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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