Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Suppose that we have the given simple integral expression

$$ \int_{-5}^{5} x \int_{-\infty}^{x} e^{\int_{0}^{z} -y dy} dz dx $$

Writing this out in Mathematica we obtain:

Integrate[x Integrate[Exp[Integrate[-y, {y, 0, z}]], {z, -∞, x}], {x, -5., 5}]


Is it possible to do a numerical integration on this expression by using NIntegrate?

A very naive attempt gives us the following errors:

NIntegrate[x NIntegrate[Exp[NIntegrate[-y, {y, 0, z}]], {z, -∞, x}], {x, -5, 5}]

NIntegrate::nlim: y = z is not a valid limit of integration

Notice that we want everything to be a numerical integration, this includes the inner integrals.

The problem is that one of the NIntegrates is an argument to the exponential function and this does not allow us to write the double integral with only one NIntegrate as mentioned in here


I'm trying to evaluate an expression that is too complicated for Mathematica to do symbolically and it is composed on integrals of the kind mentioned above.

share|improve this question
Thank you so much for asking this question, I have a problem exactly like yours where the bounds of the inner integral are dependent on the current value of the outer integral and it was blowing up in my face. This helped a lot. Thanks again. – James Matta Oct 9 '12 at 17:12
up vote 21 down vote accepted

You can always separate your inner integrals, convert them to functions and use in NIntegrate:

i1[z_?NumericQ] := i1[z] = NIntegrate[-y, {y, 0, z}]
i2[x_?NumericQ] := i2[x] = NIntegrate[Exp[i1[z]], {z, -∞, x}]
NIntegrate[x i2[x], {x, -5., 5}]
(* 30.0795 *)
share|improve this answer
This seems to be working on my actual problem. I'm still waiting on the result. Thank you. – jmlopez Sep 12 '12 at 19:36
Took a while but it finished. :) – jmlopez Sep 12 '12 at 19:43
@R.M. Could one use N[Integrate[...]] in case some of the inner integrals have an analytic solution ? If not, N[Integrate[...]]=NIntegrate[...] anyways. – b.gatessucks Sep 13 '12 at 6:46
Thank you for this answer it has solved my problem perfectly (and saved me the trouble of asking a question to boot :) ) Thanks again. – James Matta Oct 9 '12 at 17:14
Curiously it works only with ?NumericQ. So, it looks like NIntegrate gives numerical values only if the check ?NumericQ is inserted, which looks strange to me. Does anyone has an explanation why it is like this? – Wizzerad Feb 3 '15 at 22:48

It is possible like so for example:

fn[z_?NumericQ] := Exp[NIntegrate[-y, {y, 0, z}]];

NIntegrate[x fn[z], {x, -5, 5}, {z, -∞, x}]

(*  30.0795  *)

but it takes a while to compute.

I used the ability of NIntegrate to handle non-rectangular domains, which is very powerful but not widely known and / or appreciated, it seems. Note that the answers which numericalize all dimensions separately may not pick the optimal integration grid in multi-dimensional case, in which class of cases (and this includes the case in question) this form may generally work better.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.