Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Double Integral

So I have an equation:
Eq
which before expanding the functions is placed into sage as:
integral(integral(B(500,d,h,.6)*normal(d,2.85,.61)*normal(h,11.16,13.85),d,0,Infinity),h,0,Infinity)

So I want the numerical approximation of this double integral, but when I try for it using the numerical_approx() command I get the following response:
"ValueError: Integrand has wrong number of parameters" (I can give you the entire error, but I doubt you need it.)

At any rate, I think what is happening is that it is trying to evaluate the inside integral numerically first perhaps, which it is not able to do as it has a variable?

Thanks for any help! Wil

click to hide/show revision 2
Anyway to do this without lambda?

Double Integral

So I have equations:

B(x,d,h,G)=(a01+b01*x+c01*x^2+d01*x^3) + (a02+b02*x+c02*x^2+d02*x^3)*h + (a11+b11*x+c11*x^2+d11*x^3)*(G/d) +  (a12+b12*x+c12*x^2+d12*x^3)*(G/d)*h +  (a21+b21*x+c21*x^2+d21*x^3)*(G/d)^2 +  (a22+b22*x+c22*x^2+d22*x^3)*((G/d)^2)*h

normal(x,av,sd)=(1/(sd*sqrt(2*pi)))*exp(-(x-av)^2/(2*sd^2))

brk(x,d,h,D,H,Dstd,Hstd,G)=B(x,d,h,G)*normal(d,D,Dstd)*normal(h,H,Hstd)

(a##-d## are all decimals)

And I want to double integrate over d and h. So just for example I can integrate over just d:

f(x) = break1(x,d,11.16,2.85,11.16,0.61,13.85,.5).integrate(d,0,infinity)
f(500).numerical_approx()                                              
1.04299933381999

and it evaluates just fine. Likewise if I put in an equation:
Eq
which before expanding the functions is placed into sage as:
integral(integral(B(500,d,h,.6)*normal(d,2.85,.61)*normal(h,11.16,13.85),d,0,Infinity),h,0,Infinity)
value for d and integrate over h, it also produces a value.

So I want the numerical approximation of this double integral, but when I try for it using the numerical_approx() command I get the following response:
"ValueError:
using:

f(x) = break1(x,d,h,2.85,11.16,0.61,13.85,.5).integrate(d,0,infinity).integrate(h,0,infinity)
f(500).numerical_approx()

/home/wil/sage/local/lib/python2.6/site-packages/sage/symbolic/integration/integral.pyc in _evalf_(self, f, x, a, b, parent)
    199         # The gsl routine returns a tuple, which also contains the error.
    200         # We only return the result.
--> 201         return numerical_integral(f, a, b)[0]
    202 
    203     def _tderivative_(self, f, x, a, b, diff_param=None):

/home/wil/sage/local/lib/python2.6/site-packages/sage/gsl/integration.so in sage.gsl.integration.numerical_integral (sage/gsl/integration.c:1551)()

ValueError: Integrand has wrong number of parameters" (I can give you the entire error, but I doubt you need it.)

parameters

At any rate, I think what is happening is that it is trying to evaluate the inside integral numerically first perhaps, which it is not able to do as it has a variable?

I tried using the lambda in the first answer, and I was able to evaluate, but I had to set it to max_points=10 to get an answer that was even close to correct, plus I could find no way to plot that one.

Thanks for any help! Wil