Could anyone please hint me what is the best way to calculate numerically the phase-space integral $\Phi$? $$\Phi={\int\limits_{-\infty}^{+\infty}}_{3n\;times}\hspace{-13mm}\dots\hspace{-0.7mm}\dots\hspace{-0.7mm}\dots{\int\limits_{-\infty}^{+\infty}}\delta^{4}\Biggl(\begin{pmatrix}0\\0\\0\\m_0\end{pmatrix}-\sum_{i=1}^{n}\begin{pmatrix}p_{i_{x}}\\p_{i_{y}}\\p_{i_{z}}\\E(m_i,p_{i_{x}},p_{i_{y}},p_{i_{z}})\end{pmatrix}\Biggr)\prod_{i=1}^{n}\frac{dp_{i_{x}}dp_{i_{y}}dp_{i_{z}}}{16\pi^3\times E(m_i,p_{i_{x}},p_{i_{y}},p_{i_{z}})},$$
where $E(m_i,p_{i_{x}},p_{i_{y}},p_{i_{z}}) = \sqrt{m_{i}^2 + p_{i_{x}}^2 + p_{i_{y}}^2 +p_{i_{z}}^2}$. All the parameters $m_i$ are fixed and satisfy: $$m_0>\sum_{i=1}^{n}m_{i}\hspace{15mm}\rm and \hspace{15mm}m_i>0,~~~i=0,1,2,\dots,n$$
The number of parameters $n$ is fixed within single $\Phi$-integral, but I'd prefer to be able to change it easily (as well as $m_i$) without rewriting the script from scratch.
For simplicity let's put $n=3,~m_0=5,~m_1=m_2=m_3=1.$
I tried to calculate it the way I used to calculate integrals over the implicitly declared area, but this method fails in this particular case:
m0 = 5;
m1 = 1;
m2 = 1;
m3 = 1;
energy[px_, py_, pz_, m_] := Sqrt[px^2 + py^2 + pz^2 + m^2];
df1[px_, py_, pz_] := 1./(2.*energy[px, py, pz, m1] (2*Pi)^3);
df2[px_, py_, pz_] := 1./(2.*energy[px, py, pz, m2] (2*Pi)^3);
df3[px_, py_, pz_] := 1./(2.*energy[px, py, pz, m3] (2*Pi)^3);
PhaseSpaceRegion = ImplicitRegion[
(px1 + px2 + px3)^2 +
(py1 + py2 + py3)^2 +
(pz1 + pz2 + pz3)^2 +
(Sqrt[px1^2 + py1^2 + pz1^2 + m1^2] +
Sqrt[px2^2 + py2^2 + pz2^2 + m2^2] +
Sqrt[px3^2 + py3^2 + pz3^2 + m3^2] - m0)^2 == 0,
{px1, py1, pz1, px2, py2, pz2, px3, py3, pz3}];
NIntegrate[
df1[px1, py1, pz1]
df2[px2, py2, pz2]
df3[px3, py3, pz3]
{px1, py1, pz1, px2, py2, pz2, px3, py3, pz3} \[Element] PhaseSpaceRegion]
Unfortunately it fails with the following error:
DiscretizeRegion::cdim: The region given at position 1 in
DiscretizeRegion[ImplicitRegion[(px1+py1+pz1)^2+(px2+py2+pz2)^2+(px3+py3+pz3)^2+
(-5+Sqrt[Plus[<<4>>]]+Sqrt[Plus[<<4>>]]+Sqrt[Plus[<<4>>]])^2==0,
{px1,py1,pz1,px2,py2,pz2,px3,py3,pz3}]] is in dimension 9.
DiscretizeRegion only supports dimensions 1 through 3.
NIntegrate::nsr: Automatic is not a valid specification of an integration
strategy or rule.
P.S. This is quite common construction in High Energy Physics, maybe someone could suggest a package with predefined functions or anything else somehow useful in this case?
DiracDelta
, so you may be able to implement that directly. (2) You'll probably have more luck if you describe your implicit region as a list of separate equations $f_1 = 0$, $f_2 = 0$, etc. rather than as a single equation $f_1^2 + f_2^2 + ... = 0$. While these are mathematically equivalent, Mathematica usually finds it easier to deal with the former than the latter (it has to do with the gradient vanishing on the constraint surface.) $\endgroup$px1 + px2 + px3 = 0
(and similarly fory
andz
); right now you havepx1 + py1 + pz1 = 0
(and similarly for 2 and 3.) $\endgroup$