# Multivariable numerical-symbolic integration

I need to find the symbolic expression of a multivariable integral. The real integrand contains 11 variables (I have to integrate "only" four of them) so example code is simplified here:

```
x, y, z = var('x','y','z')
integrand = sin(x)*cos(y)*z
result = integrand.integral(x, 0, pi).integral(z, 0, 1)
```

It works just fine generally but given the complexity of the integral no algorithm gives me a result and it returns just:

```
integrate(integrate(sin(x)*cos(y), x, 0, pi), z, 0, 1)
```

Is there a built in way to numerically evaluate an integral on some variables that returns symbolic result with the numerical integration found coefficients (or constants)? Namely, in this case:

```
cos(y)
```

EDIT1: I managed to get a very very simple example of the function I need:

```
def numsym_integral( f, variable, a, b, points = 1000):
dx = (b-a)/points
result = 0
for i in range(0,points):
result = result + f.substitute({variable:a + i*dx}) * dx
return result
```

It still doesn't work though in my specific case because of the complexity of the expression. I get the number of terms gets multiplied by "points" per integration, leading to something too big. Could something built in be more efficient?

Don't you mean :

?

In so, the numerical equivalent would be

Illustration :

No, I didn't mean that. My bad though, I've not explained clearly enough, I just edited the example code to make it clearer and added a (not working in my case) not built in solution to better explain what I mean.

About your second edit :What you have programmed is a simple version (constant step) of trapeze integration.`numerical_integral`

has lots of further sophistication allowing integration in cases where the trapeze rule fails miserably (singularities, infinite bounds, etc...).I fail to understand the problem you are trying to solve...

From what I've understood on the docs

`numerical_integral`

forces you to set the value of every other non integrating variable in your integrand. I don't need a number, I possibly need an expression.That's why you have to nest

`numerical_integral`

calls : the first argumentmustbe numerically evaluableat run time(i. e. no symbolic variables).In other words, the value of a

`numerical_integral`

call is a numeric value, not an expression...