NIntegrate无法收敛到不在我的定积分内的点附近?

时间:2011-10-16 19:50:03

标签: wolfram-mathematica

我正在尝试计算一个确定的积分。我写道:

NIntegrate[expression, {x, 0, 1}, WorkingPrecision -> 100]

“表达”描述如下。添加了WorkingPrecision以帮助解决另一个错误。

我收到错误:

  

“NIntegrate :: ncvb:NIntegrate未能收敛到规定   在{x} = {<<>>>}附近的x中的9个递归二分之后的准确度。   获得的NIntegrate<< 157>和<<<>>为积分和错误   估计。 >>“中

为什么当我只查看near{x} = {<<156>>}时,我为0<x<1收到此错误?数字周围的双尖括号是什么意思?

表达式真的很长,所以我认为展示如何生成它会更有意义。这是一个基本版本(一些指数我需要变量,但这些是最低值,我仍然得到错误。)

F[n_] := (1 - (1 - F[n-1])^2)^2;
F[0] = x;
Expr[n_]:= (1/(1-F[n]))Integrate[D[F[n],x]*x,{x,x,1}];

当我集成Expr [3]或更高版本时,我收到错误。奇怪的是,当我使用常规积分然后在最后使用// N时,我得到一个n = 2的复数。

1 个答案:

答案 0 :(得分:18)

<<156>>并不意味着正在x=156评估积分。 <<>>被称为Skeleton,用于表示大输出被抑制。来自文档:

  

Skeleton[n]   表示打印有nShort的表达式中Shallow个省略元素的序列。 Skeleton的标准打印表单为<<n>>


来到你的积分,这是我得到的错误:

enter image description here

所以你可以看到你的情况下这个长号被抑制了(取决于你的喜好)。最后一个>>是一个链接,可以将您带到文档中的相应错误消息。

如果您尝试使用文档中的建议(即增加MaxRecursion),您最终会收到新错误::slwcon

enter image description here

所以这现在告诉你,你的WorkingPrecision太小或你有一个奇点(由一个小的工作精度引起)。将WorkingPrecision增加到200会得到以下输出:

enter image description here


您可以进一步了解表达的本质。

num = Numerator@Expr@3;
den = Denominator@Expr@3;
Plot[{num, den}, {x, 0, 1}, WorkingPrecision -> 100, PlotRange -> All]

enter image description here

超过0.7ish,你的表达有可能导致严重的稳定性问题,导致奇点。它是分子而不是分母,需要高精度才能收敛到正确的值。

num /. x -> 0.99
num /. x -> 0.99`100

Out[1]= -0.015625
Out[2]= 1.2683685178049112809413795626911317545171610885215799438968\
06379991565*10^-14

den /. x -> 0.99
den /. x -> 0.99`100

Out[3]= 1.28786*10^-14
Out[4]= 1.279743968014714505561671861369465844697720803022743298030747945923286\
915425027352809730413954909*10^-14

当你没有足够的精度时,你可以看到分子和分母之间的差异,导致接近奇点。