2011-10-16 104 views
7

我想要計算一個定積分。我寫:NIntegrate未能收斂在不在我的定積分內的點附近?

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

下面描述「表達式」。 WorkingPrecision已被添加以幫助解決另一個錯誤。

我得到一個錯誤:

"NIntegrate::ncvb: NIntegrate failed to converge to prescribed accuracy after 9 recursive bisections in x near {x} = {<<156>>}. NIntegrate obtained <<157>> and <<160>> for the integral and error estimates. >>"

爲什麼我收到此錯誤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的複數。

+0

經過一番實驗,如果我提高工作精度,在某些情況下錯誤消失,但這不是錯誤消息幫助說的。當我畫出這個間隔時,它會在一定範圍內出現非常示波,但它不應該是這樣。雖然這只是一小部分,但也許它與精確度有關,以至於不可能。在某些點上舍入爲零? – 2011-10-16 19:58:13

+3

在這些情況下重要的一般提示:當您增加WorkingPrecision時,請注意,默認情況下會使用更高的PrecisionGoal,這會使問題變得更加困難。如果你只需要例如6位有效數字,明確設置PrecisionGoal - > 6. –

+0

@Andrew:謝謝!我不需要很多數字,所以這非常有幫助。 – OctaviaQ

回答

18

<<156>>並不意味着積分正在評估x=156<<>>稱爲Skeleton,用於表示大輸出被抑制。從文檔:

Skeleton[n] represents a sequence of n omitted elements in an expression printed with Short or Shallow . The standard print form for Skeleton is <<n>> .


來到您的積分,這裏是我得到的錯誤:

enter image description here

所以你可以看到,這個長的數字是在你的情況下抑制(視根據你的喜好)。最後的>>是一個鏈接,可以將您帶到文檔中相應的錯誤消息。

如果嘗試文檔,這是增加MaxRecursion的建議,你最終會得到一個新的錯誤::slwcon

enter image description here

所以這個現在告訴您,或者您的WorkingPrecision太小或你有一個奇點(這是由一個小的工作精度帶來的)。增加WorkingPrecision200給出了下面的輸出:

enter image description here


你可以看得更遠了一點到你的表情的性質。

num = [email protected]@3; 
den = [email protected]@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 

你可以在這裏看到分子和分母之間的區別,當你沒有足夠的精度,導致近似奇點。

+0

謝謝,yoda!問題是,在WorkingPrecision中,錯誤返回n> 3,並且當我嘗試增加它時,出現各種其他錯誤。你有什麼洞見,爲什麼這個積分造成這些問題? – OctaviaQ

+1

我剛剛在表達式中添加了一些有關不穩定性的詳細信息。 – abcd

+0

非常感謝!希望只有一個問題:當分子沒有足夠的精度時,爲什麼分數變成負數,而不是零?分子從來沒有實際上是負的(你可以通過表達式的邏輯來判斷),而更高精度的分子估計是正的。 – OctaviaQ