いくつかのパラメータースペースの下でエラーを出力するPythonスクリプトがあります:
IntegrationWarning: The occurrence of round-off error is detected, which prevents the requested tolerance from being achieved. The error may be underestimated.
function_integral = quad(some_function, x_a, x_b, args = (some parameters))[0]
このコードでは、常に x_b >= x_a であり、常に some_function(x) >= 0 です。したがって、常に function_integral >= 0 になります。またはそうすべきです。
コードは引き続き実行されますが、(考えられるバグをキャッチするために) 故意に追加したエラーが原因でクラッシュした直後に、この場合は function_integral >= 0 が必要でした。私はこのコードを以下の粗雑なアプローチでクラッシュさせました:
if function_integral < 0.:
print("some stuff about the parameters")
1/0
ipython では、「debug」を使用して問題を調査します。
「IntegrationWarning」エラーのこの特定の出力は、x_b = x_a + ガンマ (ガンマが x_b および x_a に比べて非常に小さい) の場合に発生するようです。x_b = x_a のコードの場合があります。この場合、上記の積分は必要ありません。これらの場合は、function_integral をゼロにする必要があるという推論があるからです。したがって、積分関数はここでは使用されません。
丸め誤差の後、コードは function_integral = -1e-11 に近い整数値を返すように見えるため、基本的にゼロですが、負であるという事実が問題を引き起こします (そして、丸め誤差自体が精度に懸念を引き起こします)。実行を継続する場合のコードの)。
理論的には、x_b が基本的に x_a と等しい場合に function_integral = 0 を設定することで、この問題を回避できますが、これで十分かもしれませんが、この問題をもう少し詳しく調べて、最初の場所。
何らかの理由で、組み込みのクラッシュを追加すると、積分を計算してその値を出力/返す関数内で、ここでエラーがキャッチされません。コードの後半で、function_integral を使用して別のパラメーター (>= 0 でなければならない) を定義するときにのみ、クラッシュが発生します (これも組み込みました)。
問題は、Python が "IntegrationWarning" のような組み込みエラーの 1 つを出力しているときに、コードを (デバッグするために) クラッシュさせるにはどうすればよいかということです。
編集: x_b = x_a + ガンマの場合、quad() を呼び出さないという簡単で汚いアプローチに行き着きました。ここで、ガンマは x_b と x_a に比べて小さいです。この解決策に完全に満足しているわけではありませんが、この場合はおそらく十分でしょう。このケースをデバッグする別のアプローチを聞くことは非常に興味深いでしょう。