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.

I solved an integral and get a conditional expression as the result. The conditions are quite heavy but if I use Assumptions within my Integral call the computation time is heavily increased. My question, how can I evaluate a conditional expression?

Example:

Integrate[1/Sqrt[z - Cos[x]], {x, 0, 2*Pi}]
Out[1]:= ConditionalExpression[(2 EllipticK[-(2/(-1 + z))])/Sqrt[-1 + z] + (
  2 EllipticK[2/(1 + z)])/Sqrt[1 + z], Re[z] > 1]

And now let's say I know that $z \in \mathbb{R}$. I want to see what conditions are left when I plug that assumption in (of course this is quite an easy case here, but in my case I have tons of conditions and I like to see which disappear because I can make certain assumptions). Again, I could use Assumptions but it will make the computation ultra slow.

share|improve this question

2 Answers 2

up vote 1 down vote accepted

You don't have to re-evaluate the integral with assumptions. You can instead use Simplify with assumptions directly on the conditional expression. In your second example

Integrate[ 1/Sqrt[ x^2 + y^2 - 2 x y Cos[z]], {z, 0, 2π}]

the output is

ConditionalExpression[(2 EllipticK[(-4 x y)/(x - y)^2])/Sqrt[(x - y)^2] 
                      +(2 EllipticK[(4 x y)/(x + y)^2])/Sqrt[(x + y)^2],  
                       (Re[x/y + y/x] >= 2 || Re[x/y + y/x] <= -2 ||
                      NotElement[x/y + y/x, Reals]) &&   Re[(x - y)^2] > 0 && 
                      Re[(x + y)^2] > 0]

Now, you can restrict $x$ and $y$ to be real numbers:

Simplify[ %, Assumptions-> {x ∈ Reals, y ∈ Reals}

Or assume that they are both larger than zero (which implies the former)

Simplify[ %, Assumptions -> {x > 0, y > 0}]

etc. This is reasonably fast and doesn't require re-evaluating the integral over and over again

share|improve this answer

At my machine HP, Mma 9.0.1.0, WinXP

Timing[Integrate[1/Sqrt[z - Cos[x]], {x, 0, 2*Pi}, 
  Assumptions -> z > 1]]

(*  {1.187500, (
 2 (Sqrt[1 + z] EllipticK[-(2/(-1 + z))] + 
    Sqrt[-1 + z] EllipticK[2/(1 + z)]))/Sqrt[-1 + z^2]}  *)

1.9 seconds is not too much, is it? Might it be that you had some expensive process on the background? Otherwise one can do like this:

    Simplify[ConditionalExpression[(2 EllipticK[-(2/(-1 + z))])/
    Sqrt[-1 + z] + (2 EllipticK[2/(1 + z)])/Sqrt[1 + z], Re[z] > 1], 
 z > 1]

 (*    (2 EllipticK[-(2/(-1 + z))])/Sqrt[-1 + z] + (
     2 EllipticK[2/(1 + z)])/Sqrt[1 + z]   *)
share|improve this answer
    
Could you try Integrate[1/Sqrt[x^2 + y^2 - 2*x*y*Cos[z]], {z, 0, 2*Pi}, Assumptions -> {x \[Element] Reals, y \[Element] Reals, x > 0, y > 0}], this takes an extremely long time on my machine, and I have just the MathKernel running. I just wanted to make my point with a simple example. –  DaPhil May 8 at 8:24
    
Without the assumption it is much faster but gives me conditional expressions. –  DaPhil May 8 at 8:26
    
@DaPhil Yes, I tried this integral and you are right. It takes infinite time with assumptions and about 13 s without. –  Alexei Boulbitch May 8 at 12:33
    
I see now that your 2nd part gives the answer and is as correct as the answer from Oliver Jennrich... Unfortunately can't mark both as accepted answer. –  DaPhil May 8 at 12:42

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.