# Strange problem with double integrals

I need to calculate a double of integral a large expression numerically. But, I found a strange error. The code:

def doubleIntegral():
def f2(theta):
def f1(phi):
return theta*phi/pi
return numerical_integral(f1,0,2*pi)
return numerical_integral(f2,0,pi)


works. but

a = theta*phi/pi  # Suppose this is a huge expression that came out of previous calculations

def doubleIntegral():
def f2(theta):
def f1(phi):
return a
return numerical_integral(f1,0,2*pi)
return numerical_integral(f2,0,pi)


doesn't work

unable to simplify to float approximation
unable to simplify to float approximation
.
.
.


What is going on? And how can I fix this?

edit retag close merge delete

Try doing an internet search for using lambda functions for this. http://ask.sagemath.org/question/68/double-integral might be helpful along these lines...

my function doubleIntegral does the same thing as what that nestled numerical_integral with lambda functions (from that question) does. It has the exact same problem. Trying the internet search...

Sort by » oldest newest most voted

In the second example function, you are returning a from the innermost loop, but a is a symbolic expression. In the first example, what you return from the innermost loop is just a number evaluated at theta and phi. What happens if you instead use return a.subs(theta=theta, phi=phi) in the second example?

more

Oh! I get it. I also found dblquad in scipy.integrate (instead of this function) which seems to be faster. ty :)