Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Mathematica®: performing a varying number of multiple integrals

  1. Jul 18, 2011 #1
    Hello everyone.
    In Mathematica® I want to numerically integrate a function of k variables (k varies) with respect to all of them. Does anyone of you know a way to do that? I tried the following simplified example.

    k = 5;
    int[x_] := x[[1]] + x[[2]] + x[[3]] + x[[4]] + x[[5]] ; (* My integrand. Of course, together with a and b below, the true version will be defined in terms of k. *)
    a = {1, 2, 3, 4, 5}; (* lower limits of integration *)
    b = {2, 3, 4, 5, 6}; (* upper limits of integration *)
    For[i = k, i >= 1, i--,
    y = Table[x[j], {j, 1, i}];
    int[x_] = Integrate[int[y], {x, a[], b[]}] /. {x[p_] -> x[[p]]};
    ]

    int becomes now a constant function, which is what I wanted. My problem is that my initial integrand int[x_] is more complicated than the one written in the example and is not analytically integrable, so that I have to use numerical integration NIntegrate instead of Integrate. However, I cannot NIntegrate one variable at a time. Also using the definition with := (int[x_] := Integrate[...]) trying to perform just one numerical estimation at the end is not working. Any ideas to help me with this problem?

    Lucio
     
  2. jcsd
  3. Jul 18, 2011 #2
    It is very difficult to be certain I understand the problem you have tried to simplify.

    This
    http://reference.wolfram.com/mathematica/ref/NIntegrate.html
    shows you can
    NIntegrate[f,{x,x0,x1},{y,y0,y1},{z,z0,z1}...]

    That will let you numerically integrate over all your variables in a single step.

    Will that solve your problem?
     
  4. Jul 18, 2011 #3
    My problem is that in the non-simplified problem the number of variables is k, with k varying in a for cycle.
     
  5. Jul 18, 2011 #4
    Again and again people show up here with slight variations of "My problem is too complicated to understand or explain, I absolutely positively MUST use For to do it, but it doesn't work, what do I do?" That almost never turns out well.

    v={{x,x0,x1},{y,y0,y1},{z,z0,z1}};
    For[i=1,i<=3,i++,
    Print[NIntegrate[f,Evaluate[Sequence@@Take[v,i]]]]
    ]

    There is more going on inside that than can be briefly explained to a new user.

    I don't believe this is going to solve your problem, but good luck.
     
    Last edited: Jul 18, 2011
  6. Jul 19, 2011 #5
    It did solve my problem, thanks! I didn't know the commands Sequence and @@ (Apply), which turned out to do what I wanted. I programmed the k-th step the following way:

    y = Table[x, {i, 1, k}]; (* my k variables *)
    a = Table[i, {i, 1, k}]; (* lower limits of integration *)
    b = Table[i + 1, {i, 1, k}]; (* upper limits of integration *)
    v = Table[{x, a[], b[]}, {i, 1, k}];
    f[x_] := E^(Sum[-x[]^2, {i, 2, k - 1}] - 0.5 (x[[1]]^2 + x[[k]]^2)); (* my integrand *)
    Print[NIntegrate[f[y], Evaluate[Sequence @@ v]]];

    Thanks for your time and your suggestions.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Mathematica®: performing a varying number of multiple integrals
Loading...