Compute unstable integral with high precisionHelp at speeding up simplification/nested symbolic integrationHow to do multi-dimensional principal value integration?A 1D numerical integral Mathematica cannot compute, from physicsUsing DeleteCases to ignore term of Producthow to get table (with lists of arguments and values) from numerically obtained function?Parallelization of Monte Carlo numerical integrationTriple integral with dependent parameters2d vs 1d FourierTransformHow to compute this integral with a better precision?Precision control of double integral with $iepsilon$ prescription
What are good ways to spray paint a QR code on a footpath?
Should I hide continue button until tasks are completed?
Three column layout
Why does the numerical solution of an ODE move away from an unstable equilibrium?
What does 2>&1 | tee mean?
Why won't the ground take my seed?
How well known and how commonly used was Huffman coding in 1979?
AT system without -5v
Is there any set of 2-6 notes that doesn't have a chord name?
How hard is it to sell a home which is currently mortgaged?
A player is constantly pestering me about rules, what do I do as a DM?
Do we or do we not observe (measure) superpositions all the time?
How to modify the uneven space between separate loop cuts, while they are already cut?
SPI Waveform on Raspberry Pi Not clean and I'm wondering why
What is the line crossing the Pacific Ocean that is shown on maps?
Generate and graph the Recamán Sequence
Compute unstable integral with high precision
How can I check type T is among parameter pack Ts... in C++?
Why isn’t the tax system continuous rather than bracketed?
Why is Madam Hooch not a professor?
“Transitive verb” + interrupter+ “object”?
Transitive action of a discrete group on a compact space
Should I report a leak of confidential HR information?
How can I convince my reader that I will not use a certain trope?
Compute unstable integral with high precision
Help at speeding up simplification/nested symbolic integrationHow to do multi-dimensional principal value integration?A 1D numerical integral Mathematica cannot compute, from physicsUsing DeleteCases to ignore term of Producthow to get table (with lists of arguments and values) from numerically obtained function?Parallelization of Monte Carlo numerical integrationTriple integral with dependent parameters2d vs 1d FourierTransformHow to compute this integral with a better precision?Precision control of double integral with $iepsilon$ prescription
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
$begingroup$
I want to calculate
$$
int_mathbbR^n e^-t_1^4-t_2^4- ...-t_n^4-(1-t_1-t_2-...-t_n)^4 textdt_1 textdt_2 ... textdt_n
$$
with the highest possible n.
I tried with
Module[n = 3, intVars, poly,
intVars = Table[Subscript[t, i], -∞, ∞, i, 1, n - 1];
poly = Sum[Subscript[t, i]^4, i, 1, n - 1] + (1 - Sum[Subscript[t, i], i, 1, n - 1])^4;
Print[E^-poly];
NIntegrate[E^-poly, ##, Method -> Automatic, "SymbolicProcessing" -> 0] & @@ intVars
]
which seems to work well only for n<6.
Is there any trick I can use?
calculus-and-analysis numerical-integration numerics precision-and-accuracy
$endgroup$
add a comment |
$begingroup$
I want to calculate
$$
int_mathbbR^n e^-t_1^4-t_2^4- ...-t_n^4-(1-t_1-t_2-...-t_n)^4 textdt_1 textdt_2 ... textdt_n
$$
with the highest possible n.
I tried with
Module[n = 3, intVars, poly,
intVars = Table[Subscript[t, i], -∞, ∞, i, 1, n - 1];
poly = Sum[Subscript[t, i]^4, i, 1, n - 1] + (1 - Sum[Subscript[t, i], i, 1, n - 1])^4;
Print[E^-poly];
NIntegrate[E^-poly, ##, Method -> Automatic, "SymbolicProcessing" -> 0] & @@ intVars
]
which seems to work well only for n<6.
Is there any trick I can use?
calculus-and-analysis numerical-integration numerics precision-and-accuracy
$endgroup$
$begingroup$
Play with NIntegrate[E^-poly, ##, Method -> "QuasiMonteCarlo", "SymbolicProcessing" -> 0, AccuracyGoal -> 3, PrecisionGoal -> 3, WorkingPrecision -> 30] & @@ intVars]. It works for $n=19$.
$endgroup$
– user64494
7 hours ago
$begingroup$
You cannot calculate a high-dimensional integral with high precision. Read the tutorial: "For low-dimensional integrals, the default setting for PrecisionGoal is related to WorkingPrecision. For high-dimensional integrals, it is typically taken to be a fixed value, usually 2. "
$endgroup$
– Alex Trounev
7 hours ago
$begingroup$
@Alex Trounev: You are right. My idea is unsufficiently considered.
$endgroup$
– user64494
7 hours ago
add a comment |
$begingroup$
I want to calculate
$$
int_mathbbR^n e^-t_1^4-t_2^4- ...-t_n^4-(1-t_1-t_2-...-t_n)^4 textdt_1 textdt_2 ... textdt_n
$$
with the highest possible n.
I tried with
Module[n = 3, intVars, poly,
intVars = Table[Subscript[t, i], -∞, ∞, i, 1, n - 1];
poly = Sum[Subscript[t, i]^4, i, 1, n - 1] + (1 - Sum[Subscript[t, i], i, 1, n - 1])^4;
Print[E^-poly];
NIntegrate[E^-poly, ##, Method -> Automatic, "SymbolicProcessing" -> 0] & @@ intVars
]
which seems to work well only for n<6.
Is there any trick I can use?
calculus-and-analysis numerical-integration numerics precision-and-accuracy
$endgroup$
I want to calculate
$$
int_mathbbR^n e^-t_1^4-t_2^4- ...-t_n^4-(1-t_1-t_2-...-t_n)^4 textdt_1 textdt_2 ... textdt_n
$$
with the highest possible n.
I tried with
Module[n = 3, intVars, poly,
intVars = Table[Subscript[t, i], -∞, ∞, i, 1, n - 1];
poly = Sum[Subscript[t, i]^4, i, 1, n - 1] + (1 - Sum[Subscript[t, i], i, 1, n - 1])^4;
Print[E^-poly];
NIntegrate[E^-poly, ##, Method -> Automatic, "SymbolicProcessing" -> 0] & @@ intVars
]
which seems to work well only for n<6.
Is there any trick I can use?
calculus-and-analysis numerical-integration numerics precision-and-accuracy
calculus-and-analysis numerical-integration numerics precision-and-accuracy
edited 5 hours ago
Carl Woll
85.4k3 gold badges109 silver badges220 bronze badges
85.4k3 gold badges109 silver badges220 bronze badges
asked 8 hours ago
m137m137
1635 bronze badges
1635 bronze badges
$begingroup$
Play with NIntegrate[E^-poly, ##, Method -> "QuasiMonteCarlo", "SymbolicProcessing" -> 0, AccuracyGoal -> 3, PrecisionGoal -> 3, WorkingPrecision -> 30] & @@ intVars]. It works for $n=19$.
$endgroup$
– user64494
7 hours ago
$begingroup$
You cannot calculate a high-dimensional integral with high precision. Read the tutorial: "For low-dimensional integrals, the default setting for PrecisionGoal is related to WorkingPrecision. For high-dimensional integrals, it is typically taken to be a fixed value, usually 2. "
$endgroup$
– Alex Trounev
7 hours ago
$begingroup$
@Alex Trounev: You are right. My idea is unsufficiently considered.
$endgroup$
– user64494
7 hours ago
add a comment |
$begingroup$
Play with NIntegrate[E^-poly, ##, Method -> "QuasiMonteCarlo", "SymbolicProcessing" -> 0, AccuracyGoal -> 3, PrecisionGoal -> 3, WorkingPrecision -> 30] & @@ intVars]. It works for $n=19$.
$endgroup$
– user64494
7 hours ago
$begingroup$
You cannot calculate a high-dimensional integral with high precision. Read the tutorial: "For low-dimensional integrals, the default setting for PrecisionGoal is related to WorkingPrecision. For high-dimensional integrals, it is typically taken to be a fixed value, usually 2. "
$endgroup$
– Alex Trounev
7 hours ago
$begingroup$
@Alex Trounev: You are right. My idea is unsufficiently considered.
$endgroup$
– user64494
7 hours ago
$begingroup$
Play with NIntegrate[E^-poly, ##, Method -> "QuasiMonteCarlo", "SymbolicProcessing" -> 0, AccuracyGoal -> 3, PrecisionGoal -> 3, WorkingPrecision -> 30] & @@ intVars]. It works for $n=19$.
$endgroup$
– user64494
7 hours ago
$begingroup$
Play with NIntegrate[E^-poly, ##, Method -> "QuasiMonteCarlo", "SymbolicProcessing" -> 0, AccuracyGoal -> 3, PrecisionGoal -> 3, WorkingPrecision -> 30] & @@ intVars]. It works for $n=19$.
$endgroup$
– user64494
7 hours ago
$begingroup$
You cannot calculate a high-dimensional integral with high precision. Read the tutorial: "For low-dimensional integrals, the default setting for PrecisionGoal is related to WorkingPrecision. For high-dimensional integrals, it is typically taken to be a fixed value, usually 2. "
$endgroup$
– Alex Trounev
7 hours ago
$begingroup$
You cannot calculate a high-dimensional integral with high precision. Read the tutorial: "For low-dimensional integrals, the default setting for PrecisionGoal is related to WorkingPrecision. For high-dimensional integrals, it is typically taken to be a fixed value, usually 2. "
$endgroup$
– Alex Trounev
7 hours ago
$begingroup$
@Alex Trounev: You are right. My idea is unsufficiently considered.
$endgroup$
– user64494
7 hours ago
$begingroup$
@Alex Trounev: You are right. My idea is unsufficiently considered.
$endgroup$
– user64494
7 hours ago
add a comment |
2 Answers
2
active
oldest
votes
$begingroup$
One idea I like to use for these kinds of integrals is to add an auxiliary variable and a Dirac delta function, convert the Dirac delta function to it's integral formulation, and then do a bunch of simple 1D integrals. For your case, this would proceed as follows, starting from:
$$undersettin mathbbR^nint e^-t_1^4-t_2^4-ldots
-t_n^4-left(1-t_1-t_2-ldots -t_nright)^4$$
Introduce the auxiliary variable $s$ and add a Dirac delta function:
$$undersettin mathbbR^nint undersetsin
mathbbRint e^-t_1^4-t_2^4-ldots -t_n^4-s^4 delta(1-t_1-t_2-ldots -t_n-s)$$
Next, introduce the integral formulation of the Dirac delta function:
$$frac12 pi undersettin
mathbbR^nint undersetsin mathbbRint undersetuin
mathbbRint e^-t_1^4-t_2^4-ldots -t_n^4-s^4 e^i u-i t_1 u-i t_2
u-ldots -i t_n u-i s u$$
Finally, we can do all of the $t$ and $s$ integrals to obtain:
$$frac12 pi int_-infty
^infty e^i u g(u)^n+1 , du$$
where:
$$g(u)=int_-infty ^infty e^-i t u-t^4 , dt$$
Now, let's have Mathematica do these integrals:
g[u_] = Sqrt[2 Pi] FourierTransform[Exp[-t^4], t, u]
2 Gamma[5/4] HypergeometricPFQ[, 1/2, 3/4, u^4/256] -
1/4 u^2 Gamma[3/4] HypergeometricPFQ[, 5/4, 3/2, u^4/256]
So, the desired integral has become:
int[n_, opts:OptionsPattern[NIntegrate]] := (1/(2 Pi)) NIntegrate[
Cos[u] g[u]^(n+1),
u, -Infinity, Infinity,
opts,
Method->"GlobalAdaptive", Method->"GaussKronrodRule"
]
Now, g[u]
is real:
Refine[g[u] ∈ Reals, u ∈ Reals]
True
so I use Cos[u]
instead of Exp[I u]
since the integral is real. I also customize the integration method. Let's check:
int[2, WorkingPrecision->20]
int[2, WorkingPrecision->40]
int[2, WorkingPrecision->60]
1.4733172914977911077
1.473317291497785926905017339845596712841
1.47331729149778592690501733984559670949096610342311667206502
The result seems correct, and improves with higher working precision. Now, for higher orders:
int[4, WorkingPrecision -> 20]
int[5, WorkingPrecision -> 20]
int[6, WorkingPrecision -> 20]
int[40, WorkingPrecision -> 20]
4.4732305211180348293
7.7543594355221995796
13.461688085347942892
4.0351905913672630176*10^9
$endgroup$
$begingroup$
You change the order of the integration in the above. This is not a simple matter for improper integrals. Next, in the integral presentation of DiracDelta the principal value is taken.
$endgroup$
– user64494
5 hours ago
$begingroup$
@user64494 What makes you sayg[u]
is complex valued? I don't think it is. As for order of integration, I haven't been rigorous in proving that it is possible to do so, but the results seem correct, and that is sufficient for me.
$endgroup$
– Carl Woll
5 hours ago
$begingroup$
You are right concerning g[u]. However, other remarks of me remain open. The statement "the results seem correct" is not based.
$endgroup$
– user64494
4 hours ago
$begingroup$
Also int[40, WorkingPrecision -> 20] performs a lot of errors and (1/(2 [Pi]))NIntegrate[ Cos[u] g[u]^(40 + 1), u, -[Infinity], [Infinity], WorkingPrecision -> 20, Method -> "GlobalAdaptive", Method -> "GaussKronrodRule"] in version11.3. PS. The same issue in version 12.0.
$endgroup$
– user64494
4 hours ago
$begingroup$
@user64494 You probably have lingering definitions. Try usingClear[int]
and then run the code again.
$endgroup$
– Carl Woll
4 hours ago
|
show 3 more comments
$begingroup$
We can increase n
, reducing the accuracy of calculations, for example
f[m_, p_] :=
Block[n = m, $MinPrecision = p, $MaxPrecision = p,
intVars =
Table[Subscript[t, i], -[Infinity], [Infinity], i, 1, n];
poly = Sum[
Subscript[t, i]^4, i, 1,
n] + (1 - Sum[Subscript[t, i], i, 1, n])^4;
NIntegrate[E^-poly, ##, PrecisionGoal -> p/2,
AccuracyGoal -> p/2] & @@ intVars]
f[4, 6]
(* 4.47148*)
f[5, 4]
(* 7.75615*)
f[6, 2]
(* 15.8289*)
$endgroup$
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "387"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f200889%2fcompute-unstable-integral-with-high-precision%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
One idea I like to use for these kinds of integrals is to add an auxiliary variable and a Dirac delta function, convert the Dirac delta function to it's integral formulation, and then do a bunch of simple 1D integrals. For your case, this would proceed as follows, starting from:
$$undersettin mathbbR^nint e^-t_1^4-t_2^4-ldots
-t_n^4-left(1-t_1-t_2-ldots -t_nright)^4$$
Introduce the auxiliary variable $s$ and add a Dirac delta function:
$$undersettin mathbbR^nint undersetsin
mathbbRint e^-t_1^4-t_2^4-ldots -t_n^4-s^4 delta(1-t_1-t_2-ldots -t_n-s)$$
Next, introduce the integral formulation of the Dirac delta function:
$$frac12 pi undersettin
mathbbR^nint undersetsin mathbbRint undersetuin
mathbbRint e^-t_1^4-t_2^4-ldots -t_n^4-s^4 e^i u-i t_1 u-i t_2
u-ldots -i t_n u-i s u$$
Finally, we can do all of the $t$ and $s$ integrals to obtain:
$$frac12 pi int_-infty
^infty e^i u g(u)^n+1 , du$$
where:
$$g(u)=int_-infty ^infty e^-i t u-t^4 , dt$$
Now, let's have Mathematica do these integrals:
g[u_] = Sqrt[2 Pi] FourierTransform[Exp[-t^4], t, u]
2 Gamma[5/4] HypergeometricPFQ[, 1/2, 3/4, u^4/256] -
1/4 u^2 Gamma[3/4] HypergeometricPFQ[, 5/4, 3/2, u^4/256]
So, the desired integral has become:
int[n_, opts:OptionsPattern[NIntegrate]] := (1/(2 Pi)) NIntegrate[
Cos[u] g[u]^(n+1),
u, -Infinity, Infinity,
opts,
Method->"GlobalAdaptive", Method->"GaussKronrodRule"
]
Now, g[u]
is real:
Refine[g[u] ∈ Reals, u ∈ Reals]
True
so I use Cos[u]
instead of Exp[I u]
since the integral is real. I also customize the integration method. Let's check:
int[2, WorkingPrecision->20]
int[2, WorkingPrecision->40]
int[2, WorkingPrecision->60]
1.4733172914977911077
1.473317291497785926905017339845596712841
1.47331729149778592690501733984559670949096610342311667206502
The result seems correct, and improves with higher working precision. Now, for higher orders:
int[4, WorkingPrecision -> 20]
int[5, WorkingPrecision -> 20]
int[6, WorkingPrecision -> 20]
int[40, WorkingPrecision -> 20]
4.4732305211180348293
7.7543594355221995796
13.461688085347942892
4.0351905913672630176*10^9
$endgroup$
$begingroup$
You change the order of the integration in the above. This is not a simple matter for improper integrals. Next, in the integral presentation of DiracDelta the principal value is taken.
$endgroup$
– user64494
5 hours ago
$begingroup$
@user64494 What makes you sayg[u]
is complex valued? I don't think it is. As for order of integration, I haven't been rigorous in proving that it is possible to do so, but the results seem correct, and that is sufficient for me.
$endgroup$
– Carl Woll
5 hours ago
$begingroup$
You are right concerning g[u]. However, other remarks of me remain open. The statement "the results seem correct" is not based.
$endgroup$
– user64494
4 hours ago
$begingroup$
Also int[40, WorkingPrecision -> 20] performs a lot of errors and (1/(2 [Pi]))NIntegrate[ Cos[u] g[u]^(40 + 1), u, -[Infinity], [Infinity], WorkingPrecision -> 20, Method -> "GlobalAdaptive", Method -> "GaussKronrodRule"] in version11.3. PS. The same issue in version 12.0.
$endgroup$
– user64494
4 hours ago
$begingroup$
@user64494 You probably have lingering definitions. Try usingClear[int]
and then run the code again.
$endgroup$
– Carl Woll
4 hours ago
|
show 3 more comments
$begingroup$
One idea I like to use for these kinds of integrals is to add an auxiliary variable and a Dirac delta function, convert the Dirac delta function to it's integral formulation, and then do a bunch of simple 1D integrals. For your case, this would proceed as follows, starting from:
$$undersettin mathbbR^nint e^-t_1^4-t_2^4-ldots
-t_n^4-left(1-t_1-t_2-ldots -t_nright)^4$$
Introduce the auxiliary variable $s$ and add a Dirac delta function:
$$undersettin mathbbR^nint undersetsin
mathbbRint e^-t_1^4-t_2^4-ldots -t_n^4-s^4 delta(1-t_1-t_2-ldots -t_n-s)$$
Next, introduce the integral formulation of the Dirac delta function:
$$frac12 pi undersettin
mathbbR^nint undersetsin mathbbRint undersetuin
mathbbRint e^-t_1^4-t_2^4-ldots -t_n^4-s^4 e^i u-i t_1 u-i t_2
u-ldots -i t_n u-i s u$$
Finally, we can do all of the $t$ and $s$ integrals to obtain:
$$frac12 pi int_-infty
^infty e^i u g(u)^n+1 , du$$
where:
$$g(u)=int_-infty ^infty e^-i t u-t^4 , dt$$
Now, let's have Mathematica do these integrals:
g[u_] = Sqrt[2 Pi] FourierTransform[Exp[-t^4], t, u]
2 Gamma[5/4] HypergeometricPFQ[, 1/2, 3/4, u^4/256] -
1/4 u^2 Gamma[3/4] HypergeometricPFQ[, 5/4, 3/2, u^4/256]
So, the desired integral has become:
int[n_, opts:OptionsPattern[NIntegrate]] := (1/(2 Pi)) NIntegrate[
Cos[u] g[u]^(n+1),
u, -Infinity, Infinity,
opts,
Method->"GlobalAdaptive", Method->"GaussKronrodRule"
]
Now, g[u]
is real:
Refine[g[u] ∈ Reals, u ∈ Reals]
True
so I use Cos[u]
instead of Exp[I u]
since the integral is real. I also customize the integration method. Let's check:
int[2, WorkingPrecision->20]
int[2, WorkingPrecision->40]
int[2, WorkingPrecision->60]
1.4733172914977911077
1.473317291497785926905017339845596712841
1.47331729149778592690501733984559670949096610342311667206502
The result seems correct, and improves with higher working precision. Now, for higher orders:
int[4, WorkingPrecision -> 20]
int[5, WorkingPrecision -> 20]
int[6, WorkingPrecision -> 20]
int[40, WorkingPrecision -> 20]
4.4732305211180348293
7.7543594355221995796
13.461688085347942892
4.0351905913672630176*10^9
$endgroup$
$begingroup$
You change the order of the integration in the above. This is not a simple matter for improper integrals. Next, in the integral presentation of DiracDelta the principal value is taken.
$endgroup$
– user64494
5 hours ago
$begingroup$
@user64494 What makes you sayg[u]
is complex valued? I don't think it is. As for order of integration, I haven't been rigorous in proving that it is possible to do so, but the results seem correct, and that is sufficient for me.
$endgroup$
– Carl Woll
5 hours ago
$begingroup$
You are right concerning g[u]. However, other remarks of me remain open. The statement "the results seem correct" is not based.
$endgroup$
– user64494
4 hours ago
$begingroup$
Also int[40, WorkingPrecision -> 20] performs a lot of errors and (1/(2 [Pi]))NIntegrate[ Cos[u] g[u]^(40 + 1), u, -[Infinity], [Infinity], WorkingPrecision -> 20, Method -> "GlobalAdaptive", Method -> "GaussKronrodRule"] in version11.3. PS. The same issue in version 12.0.
$endgroup$
– user64494
4 hours ago
$begingroup$
@user64494 You probably have lingering definitions. Try usingClear[int]
and then run the code again.
$endgroup$
– Carl Woll
4 hours ago
|
show 3 more comments
$begingroup$
One idea I like to use for these kinds of integrals is to add an auxiliary variable and a Dirac delta function, convert the Dirac delta function to it's integral formulation, and then do a bunch of simple 1D integrals. For your case, this would proceed as follows, starting from:
$$undersettin mathbbR^nint e^-t_1^4-t_2^4-ldots
-t_n^4-left(1-t_1-t_2-ldots -t_nright)^4$$
Introduce the auxiliary variable $s$ and add a Dirac delta function:
$$undersettin mathbbR^nint undersetsin
mathbbRint e^-t_1^4-t_2^4-ldots -t_n^4-s^4 delta(1-t_1-t_2-ldots -t_n-s)$$
Next, introduce the integral formulation of the Dirac delta function:
$$frac12 pi undersettin
mathbbR^nint undersetsin mathbbRint undersetuin
mathbbRint e^-t_1^4-t_2^4-ldots -t_n^4-s^4 e^i u-i t_1 u-i t_2
u-ldots -i t_n u-i s u$$
Finally, we can do all of the $t$ and $s$ integrals to obtain:
$$frac12 pi int_-infty
^infty e^i u g(u)^n+1 , du$$
where:
$$g(u)=int_-infty ^infty e^-i t u-t^4 , dt$$
Now, let's have Mathematica do these integrals:
g[u_] = Sqrt[2 Pi] FourierTransform[Exp[-t^4], t, u]
2 Gamma[5/4] HypergeometricPFQ[, 1/2, 3/4, u^4/256] -
1/4 u^2 Gamma[3/4] HypergeometricPFQ[, 5/4, 3/2, u^4/256]
So, the desired integral has become:
int[n_, opts:OptionsPattern[NIntegrate]] := (1/(2 Pi)) NIntegrate[
Cos[u] g[u]^(n+1),
u, -Infinity, Infinity,
opts,
Method->"GlobalAdaptive", Method->"GaussKronrodRule"
]
Now, g[u]
is real:
Refine[g[u] ∈ Reals, u ∈ Reals]
True
so I use Cos[u]
instead of Exp[I u]
since the integral is real. I also customize the integration method. Let's check:
int[2, WorkingPrecision->20]
int[2, WorkingPrecision->40]
int[2, WorkingPrecision->60]
1.4733172914977911077
1.473317291497785926905017339845596712841
1.47331729149778592690501733984559670949096610342311667206502
The result seems correct, and improves with higher working precision. Now, for higher orders:
int[4, WorkingPrecision -> 20]
int[5, WorkingPrecision -> 20]
int[6, WorkingPrecision -> 20]
int[40, WorkingPrecision -> 20]
4.4732305211180348293
7.7543594355221995796
13.461688085347942892
4.0351905913672630176*10^9
$endgroup$
One idea I like to use for these kinds of integrals is to add an auxiliary variable and a Dirac delta function, convert the Dirac delta function to it's integral formulation, and then do a bunch of simple 1D integrals. For your case, this would proceed as follows, starting from:
$$undersettin mathbbR^nint e^-t_1^4-t_2^4-ldots
-t_n^4-left(1-t_1-t_2-ldots -t_nright)^4$$
Introduce the auxiliary variable $s$ and add a Dirac delta function:
$$undersettin mathbbR^nint undersetsin
mathbbRint e^-t_1^4-t_2^4-ldots -t_n^4-s^4 delta(1-t_1-t_2-ldots -t_n-s)$$
Next, introduce the integral formulation of the Dirac delta function:
$$frac12 pi undersettin
mathbbR^nint undersetsin mathbbRint undersetuin
mathbbRint e^-t_1^4-t_2^4-ldots -t_n^4-s^4 e^i u-i t_1 u-i t_2
u-ldots -i t_n u-i s u$$
Finally, we can do all of the $t$ and $s$ integrals to obtain:
$$frac12 pi int_-infty
^infty e^i u g(u)^n+1 , du$$
where:
$$g(u)=int_-infty ^infty e^-i t u-t^4 , dt$$
Now, let's have Mathematica do these integrals:
g[u_] = Sqrt[2 Pi] FourierTransform[Exp[-t^4], t, u]
2 Gamma[5/4] HypergeometricPFQ[, 1/2, 3/4, u^4/256] -
1/4 u^2 Gamma[3/4] HypergeometricPFQ[, 5/4, 3/2, u^4/256]
So, the desired integral has become:
int[n_, opts:OptionsPattern[NIntegrate]] := (1/(2 Pi)) NIntegrate[
Cos[u] g[u]^(n+1),
u, -Infinity, Infinity,
opts,
Method->"GlobalAdaptive", Method->"GaussKronrodRule"
]
Now, g[u]
is real:
Refine[g[u] ∈ Reals, u ∈ Reals]
True
so I use Cos[u]
instead of Exp[I u]
since the integral is real. I also customize the integration method. Let's check:
int[2, WorkingPrecision->20]
int[2, WorkingPrecision->40]
int[2, WorkingPrecision->60]
1.4733172914977911077
1.473317291497785926905017339845596712841
1.47331729149778592690501733984559670949096610342311667206502
The result seems correct, and improves with higher working precision. Now, for higher orders:
int[4, WorkingPrecision -> 20]
int[5, WorkingPrecision -> 20]
int[6, WorkingPrecision -> 20]
int[40, WorkingPrecision -> 20]
4.4732305211180348293
7.7543594355221995796
13.461688085347942892
4.0351905913672630176*10^9
edited 4 hours ago
answered 5 hours ago
Carl WollCarl Woll
85.4k3 gold badges109 silver badges220 bronze badges
85.4k3 gold badges109 silver badges220 bronze badges
$begingroup$
You change the order of the integration in the above. This is not a simple matter for improper integrals. Next, in the integral presentation of DiracDelta the principal value is taken.
$endgroup$
– user64494
5 hours ago
$begingroup$
@user64494 What makes you sayg[u]
is complex valued? I don't think it is. As for order of integration, I haven't been rigorous in proving that it is possible to do so, but the results seem correct, and that is sufficient for me.
$endgroup$
– Carl Woll
5 hours ago
$begingroup$
You are right concerning g[u]. However, other remarks of me remain open. The statement "the results seem correct" is not based.
$endgroup$
– user64494
4 hours ago
$begingroup$
Also int[40, WorkingPrecision -> 20] performs a lot of errors and (1/(2 [Pi]))NIntegrate[ Cos[u] g[u]^(40 + 1), u, -[Infinity], [Infinity], WorkingPrecision -> 20, Method -> "GlobalAdaptive", Method -> "GaussKronrodRule"] in version11.3. PS. The same issue in version 12.0.
$endgroup$
– user64494
4 hours ago
$begingroup$
@user64494 You probably have lingering definitions. Try usingClear[int]
and then run the code again.
$endgroup$
– Carl Woll
4 hours ago
|
show 3 more comments
$begingroup$
You change the order of the integration in the above. This is not a simple matter for improper integrals. Next, in the integral presentation of DiracDelta the principal value is taken.
$endgroup$
– user64494
5 hours ago
$begingroup$
@user64494 What makes you sayg[u]
is complex valued? I don't think it is. As for order of integration, I haven't been rigorous in proving that it is possible to do so, but the results seem correct, and that is sufficient for me.
$endgroup$
– Carl Woll
5 hours ago
$begingroup$
You are right concerning g[u]. However, other remarks of me remain open. The statement "the results seem correct" is not based.
$endgroup$
– user64494
4 hours ago
$begingroup$
Also int[40, WorkingPrecision -> 20] performs a lot of errors and (1/(2 [Pi]))NIntegrate[ Cos[u] g[u]^(40 + 1), u, -[Infinity], [Infinity], WorkingPrecision -> 20, Method -> "GlobalAdaptive", Method -> "GaussKronrodRule"] in version11.3. PS. The same issue in version 12.0.
$endgroup$
– user64494
4 hours ago
$begingroup$
@user64494 You probably have lingering definitions. Try usingClear[int]
and then run the code again.
$endgroup$
– Carl Woll
4 hours ago
$begingroup$
You change the order of the integration in the above. This is not a simple matter for improper integrals. Next, in the integral presentation of DiracDelta the principal value is taken.
$endgroup$
– user64494
5 hours ago
$begingroup$
You change the order of the integration in the above. This is not a simple matter for improper integrals. Next, in the integral presentation of DiracDelta the principal value is taken.
$endgroup$
– user64494
5 hours ago
$begingroup$
@user64494 What makes you say
g[u]
is complex valued? I don't think it is. As for order of integration, I haven't been rigorous in proving that it is possible to do so, but the results seem correct, and that is sufficient for me.$endgroup$
– Carl Woll
5 hours ago
$begingroup$
@user64494 What makes you say
g[u]
is complex valued? I don't think it is. As for order of integration, I haven't been rigorous in proving that it is possible to do so, but the results seem correct, and that is sufficient for me.$endgroup$
– Carl Woll
5 hours ago
$begingroup$
You are right concerning g[u]. However, other remarks of me remain open. The statement "the results seem correct" is not based.
$endgroup$
– user64494
4 hours ago
$begingroup$
You are right concerning g[u]. However, other remarks of me remain open. The statement "the results seem correct" is not based.
$endgroup$
– user64494
4 hours ago
$begingroup$
Also int[40, WorkingPrecision -> 20] performs a lot of errors and (1/(2 [Pi]))NIntegrate[ Cos[u] g[u]^(40 + 1), u, -[Infinity], [Infinity], WorkingPrecision -> 20, Method -> "GlobalAdaptive", Method -> "GaussKronrodRule"] in version11.3. PS. The same issue in version 12.0.
$endgroup$
– user64494
4 hours ago
$begingroup$
Also int[40, WorkingPrecision -> 20] performs a lot of errors and (1/(2 [Pi]))NIntegrate[ Cos[u] g[u]^(40 + 1), u, -[Infinity], [Infinity], WorkingPrecision -> 20, Method -> "GlobalAdaptive", Method -> "GaussKronrodRule"] in version11.3. PS. The same issue in version 12.0.
$endgroup$
– user64494
4 hours ago
$begingroup$
@user64494 You probably have lingering definitions. Try using
Clear[int]
and then run the code again.$endgroup$
– Carl Woll
4 hours ago
$begingroup$
@user64494 You probably have lingering definitions. Try using
Clear[int]
and then run the code again.$endgroup$
– Carl Woll
4 hours ago
|
show 3 more comments
$begingroup$
We can increase n
, reducing the accuracy of calculations, for example
f[m_, p_] :=
Block[n = m, $MinPrecision = p, $MaxPrecision = p,
intVars =
Table[Subscript[t, i], -[Infinity], [Infinity], i, 1, n];
poly = Sum[
Subscript[t, i]^4, i, 1,
n] + (1 - Sum[Subscript[t, i], i, 1, n])^4;
NIntegrate[E^-poly, ##, PrecisionGoal -> p/2,
AccuracyGoal -> p/2] & @@ intVars]
f[4, 6]
(* 4.47148*)
f[5, 4]
(* 7.75615*)
f[6, 2]
(* 15.8289*)
$endgroup$
add a comment |
$begingroup$
We can increase n
, reducing the accuracy of calculations, for example
f[m_, p_] :=
Block[n = m, $MinPrecision = p, $MaxPrecision = p,
intVars =
Table[Subscript[t, i], -[Infinity], [Infinity], i, 1, n];
poly = Sum[
Subscript[t, i]^4, i, 1,
n] + (1 - Sum[Subscript[t, i], i, 1, n])^4;
NIntegrate[E^-poly, ##, PrecisionGoal -> p/2,
AccuracyGoal -> p/2] & @@ intVars]
f[4, 6]
(* 4.47148*)
f[5, 4]
(* 7.75615*)
f[6, 2]
(* 15.8289*)
$endgroup$
add a comment |
$begingroup$
We can increase n
, reducing the accuracy of calculations, for example
f[m_, p_] :=
Block[n = m, $MinPrecision = p, $MaxPrecision = p,
intVars =
Table[Subscript[t, i], -[Infinity], [Infinity], i, 1, n];
poly = Sum[
Subscript[t, i]^4, i, 1,
n] + (1 - Sum[Subscript[t, i], i, 1, n])^4;
NIntegrate[E^-poly, ##, PrecisionGoal -> p/2,
AccuracyGoal -> p/2] & @@ intVars]
f[4, 6]
(* 4.47148*)
f[5, 4]
(* 7.75615*)
f[6, 2]
(* 15.8289*)
$endgroup$
We can increase n
, reducing the accuracy of calculations, for example
f[m_, p_] :=
Block[n = m, $MinPrecision = p, $MaxPrecision = p,
intVars =
Table[Subscript[t, i], -[Infinity], [Infinity], i, 1, n];
poly = Sum[
Subscript[t, i]^4, i, 1,
n] + (1 - Sum[Subscript[t, i], i, 1, n])^4;
NIntegrate[E^-poly, ##, PrecisionGoal -> p/2,
AccuracyGoal -> p/2] & @@ intVars]
f[4, 6]
(* 4.47148*)
f[5, 4]
(* 7.75615*)
f[6, 2]
(* 15.8289*)
answered 7 hours ago
Alex TrounevAlex Trounev
10.4k1 gold badge9 silver badges25 bronze badges
10.4k1 gold badge9 silver badges25 bronze badges
add a comment |
add a comment |
Thanks for contributing an answer to Mathematica Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f200889%2fcompute-unstable-integral-with-high-precision%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
$begingroup$
Play with NIntegrate[E^-poly, ##, Method -> "QuasiMonteCarlo", "SymbolicProcessing" -> 0, AccuracyGoal -> 3, PrecisionGoal -> 3, WorkingPrecision -> 30] & @@ intVars]. It works for $n=19$.
$endgroup$
– user64494
7 hours ago
$begingroup$
You cannot calculate a high-dimensional integral with high precision. Read the tutorial: "For low-dimensional integrals, the default setting for PrecisionGoal is related to WorkingPrecision. For high-dimensional integrals, it is typically taken to be a fixed value, usually 2. "
$endgroup$
– Alex Trounev
7 hours ago
$begingroup$
@Alex Trounev: You are right. My idea is unsufficiently considered.
$endgroup$
– user64494
7 hours ago