2011-10-16 3 views
7

私は定積分を計算しようとしています。私は以下のように書いています。NIntegrateは、定積分の中にない点の近くで収束しませんか?

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

"表現"は以下の通りです。 WorkingPrecisionは、別のエラーを助けるために追加されました。

私はエラーを取得する:私だけ0<x<1で探していたときに

"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>>}ため、このエラーを取得していますか?数字の周りに二重の括弧で囲まれた括弧は何を意味しますか?

この表現は実際には長いので、生成方法を示すことがより意味があると思います。これは基本的なバージョンです(変数にする必要がある指数のいくつかですが、それでもエラーが発生します)。

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]以上を統合するとエラーが発生します。奇妙なことに、正規のIntegrateを使って最後にNを使うと、n = 2の複素数が得られます。

+0

いくつかの実験の後で、エラーメッセージのヘルプには言いませんが、作業精度を上げるとエラーが消えてしまうことがあります。私が間隔をプロットすると、あるべき範囲で非常に振動的になるが、そうではないはずである。それは分かりましたが...おそらくそれはデンマークのような精密さと関係があります。いくつかの点でゼロに丸めますか? –

+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どちらかが小さすぎるかであることを示していますあなたは特異性を持っている(これは小さな作業精度でもたらされます)。あなたの表現の本質にさらに少し見ることができ

enter image description here


200WorkingPrecisionを大きくすると、次の出力が得られます。

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

ありがとう、よだ!問題は、そのWorkingPrecisionで、エラーはn> 3に戻ってきます。増やそうとすると、私はあらゆる種類のエラーを受け取ります。なぜこの一体化がこれらの問題を引き起こしているかについての洞察はありますか? – OctaviaQ

+1

私はあなたの表現の不安定性がどこに来るかについてもう少し詳細を追加しました。 – abcd

+0

ありがとう!うまくいけばちょうどもう1つの質問:精度が不十分なときには、ゼロに比べて、分子が負の数に丸められるのはなぜですか?分子は実際には負ではありません(式の論理によって分かります)。そして、より正確な分子の推定値は正です。 – OctaviaQ

関連する問題