Oct*_*iaQ 7 wolfram-mathematica
我试图计算一个确定的积分.我写:
NIntegrate[expression, {x, 0, 1}, WorkingPrecision -> 100]
Run Code Online (Sandbox Code Playgroud)
"表达"描述如下.添加了WorkingPrecision以帮助解决另一个错误.
我收到一个错误:
"NIntegrate :: ncvb:NIntegrate在{x} = {<< 156 >>}附近的9个递归二分之后未能收敛到规定的精度.NIntegrate获得了<< 157 >>和<< 160 >>的积分和误差估计.>>"
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}];
Run Code Online (Sandbox Code Playgroud)
当我集成Expr [3]或更高版本时,我收到错误.奇怪的是,当我使用常规积分然后在最后使用// N时,我得到一个n = 2的复数.
abc*_*bcd 18
这<<156>>并不意味着正在评估积分x=156.<<>>被调用Skeleton,用于表示大输出被抑制.从文档:
Skeleton[n]表示n用Short或打印的表达式中的一系列省略元素Shallow.标准打印表格Skeleton是<<n>>.
来到你的积分,这是我得到的错误:

因此,您可以看到这个长数字在您的情况下被抑制(取决于您的偏好).最后>>一个链接将您带到文档中的相应错误消息.
如果你尝试增加文档中的建议MaxRecursion,你最终会得到一个新的错误::slwcon

所以这现在告诉你,要么你WorkingPrecision的太小,要么你有一个奇点(这是由一个小的工作精度引起的).增加WorkingPrecision以200提供以下输出:

您可以进一步了解表达式的本质.
num = Numerator@Expr@3;
den = Denominator@Expr@3;
Plot[{num, den}, {x, 0, 1}, WorkingPrecision -> 100, PlotRange -> All]
Run Code Online (Sandbox Code Playgroud)

因此,超过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
Run Code Online (Sandbox Code Playgroud)
当你没有足够的精度时,你可以看到分子和分母之间的差异,导致接近奇点.
| 归档时间: |
|
| 查看次数: |
4336 次 |
| 最近记录: |