The code below will with computing double integrals $\int\int_RfdA$ that have been set up as the iterated integral $\int_a^b\int_{c(y)}^{d(y)} f dydx$ or $\int_c^d\int_{a(x)}^{b(x)} f dxdy$. The code will draw the region given by your bounds, as well as show you several steps in the integration process required to evaluate the integral.
var('x,y,t') outer_bounds=(x,-2,3) #Should always be constants inner_bounds=(y,x^2-4,x+2) #Can involve functions f(x,y)=y+4 #This might be density (if you need mass), or it might be height (if you want to find volume). #It can also represent many other things. in1=inner_bounds[1] in2=inner_bounds[2] if inner_bounds[0]==y: inner_integral=integrate(f(x,y),y).subs(y=in2)-integrate(f(x,y),y).subs(y=in1) else: inner_integral=integrate(f(x,y),x).subs(x=in2)-integrate(f(x,y),x).subs(x=in1) inner_integral_unevaluated=integrate(f(x,y),inner_bounds[0]) outer_integral=integrate(inner_integral,outer_bounds) outer_integral_unevaluated=integrate(inner_integral,outer_bounds[0]) show(table([ ["Outer Bounds",outer_bounds], ["Inner Bounds",inner_bounds], [r"Integrand $f(x,y)$",f(x,y)], ["Inner Integral before evaluating",inner_integral_unevaluated], ["Inner Integral",inner_integral], ["Outer Integral before evaluating",outer_integral_unevaluated], ["Outer Integral",outer_integral], ])) show(html("The plot below shows you the region over which you are integrating. You'll integrate from red to blue.") ) if inner_bounds[0]==y: p=parametric_plot((x,inner_bounds[1]),outer_bounds,color='red') p+=parametric_plot((x,inner_bounds[2]),outer_bounds,color='blue') xv(j)=j/8*outer_bounds[1]+(1-j/8)*outer_bounds[2] p+=sum(parametric_plot((xv(j), t*inner_bounds[2].subs(x=xv(j))+(1-t)*inner_bounds[1].subs(x=xv(j))),(t,0,1),color='black') for j in [0..8]) else: p=parametric_plot((inner_bounds[1],y),outer_bounds,color='red') p+=parametric_plot((inner_bounds[2],y),outer_bounds,color='blue') yv(j)=j/8*outer_bounds[1]+(1-j/8)*outer_bounds[2] p+=sum(parametric_plot((t*inner_bounds[2].subs(y=yv(j))+(1-t)*inner_bounds[1].subs(y=yv(j)),yv(j)),(t,0,1),color='black') for j in [0..8]) show(p) #print "Here is a 3D plot of the region, fully shaded." #rep=t*inner_bounds[2]+(1-t)*inner_bounds[1] #r=vector((x,y,0)) #if inner_bounds[0]==y: # r=r.subs(y = rep) #else: # r=r.subs(x = rep) #p=parametric_plot(r,outer_bounds,(t,0,1)) #show(p)