I'd like to define a function by way of the output of a definite integral with symbolic bounds. For instance, F[m_,k_] := Integrate[x,{x,m,k}] would define F[m_,k_] := (1/2)(k^2 - m^2) This seems to work fine for simple examples, but I've run into the cases where the evaluation takes much longer than the indefinite integral. For instance running

Integrate[r/((p - z)^2 + r^2)^(3/2), {z, 0, L}]

takes several minutes to compute and seems to give different output sometimes. However running the indefinite integral

Integrate[r/((p - z)^2 + r^2)^(3/2), z]

returns almost immediately. How can I use an indefinite integral to generate a function for me? I've tried syntax along the form

F[r_, z_] := Integrate[r/((p - z)^2 + r^2)^(3/2), z]
F[r, L] - F[r, 0]`

but that just takes the indefinite integral of a variable called L and runs in to trouble with the number (it outputs some integral with respect to 0).


1 Answer 1


This works much faster:

f[r_, z_, from_, to_] := (int = Integrate[r/((l - z)^2 + r^2)^(3/2), z]; 
                           Limit[int, z -> to] - Limit[int, z -> from])

sol = f[r, z, 0, L0]

Mathematica graphics

The reason is takes much longer when doing definite integration directly is due to assumptions. If you gives assumptions, then it will be fast also. Try this:

Assuming[Element[{l, r, L0}, Reals] && l > 0 && r > 0 && L0 > 0, 
      Integrate[r/((l - z)^2 + r^2)^(3/2), {z, 0, L0}]]

Mathematica graphics

Now it gives same result, but much faster

Simplify[% - sol]
(* 0 *)
  • $\begingroup$ Thank you, I began to suspect it was because of the assumptions, but didn't know the proper syntax for including them into the integration. The limit solution is more along the lines of what I was trying to do to work around it. $\endgroup$ Commented Nov 4, 2014 at 3:18

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.