1
$\begingroup$

I'm trying to evaluate many long but easy multiple integrals of the form

$$ \int^{\tau}_{s_n=0}\int^{s_n}_{s_{n-1}=0}\dots\int^{s_2}_{s_1=0} C(s_1,\dots,s_n)\ ds_1\dots ds_n $$

where there are multiple integrals over some well behaving function $C$. Here is an example of a simple $n=3$ one:

$$ \int^{\tau}_{s_3=0}\int^{s_3}_{s_2=0}\int^{s_2}_{s_1=0}\frac{1}{2\theta}e^{-(s_1+s_3)/\theta}ds_1ds_2ds_3. $$

The symbol $\theta$ is a constant. I've calculated this particular integral by hand, and found it to be equal to

$$ \frac{\theta}{4}\Big(\theta-\theta e^{-2\tau/\theta}-2\tau e^{-\tau/\theta}\Big). $$

I can use the Mathematica Integrate function to check this

Integrate[(1/(2*\[Theta]))*E^(-(s[1]+s[3])/\[Theta]),{s[3],0,\[Tau]},{s[2],0,s[3]},{s[1],0,s[2]}]

which returns my original answer. However I want to be able to evaluate these integrals for higher $n$ and different functions $C$, and I have many of these integrals I need to calculate.

Using this answer as a starting point, I managed to make a start at generalising the calculations

multi[f_, x_, t_, n_] := 
 Integrate @@ {f @@ Array[x[#] &, {n}]} ~ Join ~ Array[{x[n - # + 1], 0, If[# == 1, t, x[n - # + 2]]} &, {n}]

however when I try to reproduce the above example on the function

h[s] = (1/(2θ)) E^(-(s[1] + s[3])/θ)

the only answer I receive is a formatted version of my input:

enter image description here

My question is: How do I get Mathematica to evaluate this integral and return the same answer as my first attempt? I'm a relatively new user of Mathematica, so please forgive me if this is a trivial question.

$\endgroup$
3
$\begingroup$

The command (where I have used $t$ for $\theta$ and $a$ for $\tau$)

Fold[Integrate[#1, {#2[[1]], 0, #2[[2]]}] &, Exp[-(s1 + s3)/t]/(2 t),
     Partition[{s1, s2, s3, a}, 2, 1]]

evaluates the exact interval you have provided as an example. Note that the result I get is $$\frac{1}{4} \theta \left(\theta - \theta e^{-2 \tau/\theta} - 2 \tau e^{-\tau / \theta} \right)$$ which differs from your answer in that the last term has $e^{-\tau/\theta}$ rather than $e^{-\tau \theta}$.

The command does generalize readily, assuming that the lower limit of integration is always $0$ and the upper limit is the variable of integration for the next iterated integral. For example:

F[n_, g_] := Fold[Integrate[#1, {#2[[1]], 0, #2[[2]]}] &, g,
                  Partition[Append[Table[s[k], {k, 1, n}], a], 2, 1]]

which can be used to evaluate F[5, Exp[-s[1] + s[2] - 5 s[5]]/t s[4]] which is $$\int_{s_5 = 0}^\tau \int_{s_4 = 0}^{s_5} \int_{s_3 = 0}^{s_4} \int_{s_2 = 0}^{s_3} \int_{s_1 = 0}^{s_2} \frac{s_5}{\theta} e^{-s_1 + s_2 - 5s_5} \, ds_1 \, ds_2 \, ds_3 \, ds_4 \, ds_5.$$

$\endgroup$
  • $\begingroup$ Thanks for the speedy reply. This works great, I guess the fold function was the more appropriate choice for this problem. The $e^{\tau/\theta}$ discrepancy is a typo on my part, I will correct it. $\endgroup$ – WilliamMorris Jan 6 at 2:14
  • $\begingroup$ @WilliamMorris I should point out that Fold is not even necessary, since Integrate[] handles multiple integrals directly; e.g., Integrate[Exp[-(s[1] + s[3])/t]/(2 t), Sequence @@ Reverse[Insert[#, 0, 2] & /@ Partition[Append[Table[s[k], {k, 1, 3}], a], 2, 1]]] also works. $\endgroup$ – heropup Jan 6 at 2:43
2
$\begingroup$

Instead of using Fold[] method in heropup's answer, which does multiple univariate integrals, you can directly construct a multivariate integral this way:

Inactive[Integrate][Exp[-(s[1] + s[3])/θ]/(2 θ), ##] & @@
Prepend[Table[{s[k - 1], 0, s[k]}, {k, 3, 2, -1}], {s[3], 0, τ}]

$$\int_0^\tau \int_0^{s[3]} \int_0^{s[2]} \frac{e^\frac{-s[1]-s[3]}{\theta}}{2\theta} \mathrm ds[1]\mathrm ds[2]\mathrm ds[3]$$

where I used Inactive[] so you could visually inspect the integral produced. To evaluate, just use Activate[]:

Activate[%]
   1/4 θ (θ - E^(-((2 τ)/θ)) θ - 2 E^(-(τ/θ)) τ)

In general, you can use a construction like Integrate[f, ##] & @@ Prepend[Table[{s[k - 1], 0, s[k]}, {k, n, 2, -1}], {s[n], 0, τ}], minding the order of arguments used by Integrate[].

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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