4

次のゼロ除算エラーが発生するのはなぜですか?

>>> from uncertainties import ufloat
>>> a = ufloat((0,0))
>>> x = ufloat((0.3,0.017))
>>> a**x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/uncertainties/__init__.py", line 601, in f_with_affine_output
    if arg.derivatives
  File "<string>", line 1, in <lambda>
ZeroDivisionError: 0.0 cannot be raised to a negative power
>>> 0.0**x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/uncertainties/__init__.py", line 601, in f_with_affine_output
    if arg.derivatives
  File "<string>", line 1, in <lambda>
ValueError: math domain error

これらは両方とも返されるべきではありません0.0か?

4

2 に答える 2

3

状況は非常に微妙です。

  1. 一方では、あなたの言う通り、両方の結果が数学的に 0 になるはずです。

    実際、動作は Python のものと同じである必要があります。

    >>> 0.**0.3
    0.0
    

    指数に不確実性がある場合、Python の結果は常に 0 であるため、結果は正確に 0 (不確実性なし) になります。

    ケースa = 0±0は特殊です:a**x正の場合は 0 であり、不確実性があるx場合でも x(結果はゼロまたは負の x値に対して未定義です)。一方、 の場合a=0±0.1、 の値a**x は未定義です。なぜなら、負の数の (実数) べき乗を取ることができないためです (aゼロでない不確実性がある場合は、負になる可能性があります) (そうでない複素数を使用しない限り)。不確実性パッケージの目的)。

  2. 一方、不確実性モジュールを使用すると、ユーザーは数値の不確実性をいつでも変更して、正しい結果を得ることができます。a = 0±0これは、上記の「理想的な」数学的結果と衝突しa**x ます。逆に、 の場合、結果は未定義である必要がありますが、 の不確実性が後で 0 に変更されたa = 0±0.3場合、何らかの方法で 0 になるはずです。a

技術的には、これはすべて、a**xwith 0 < x < 1 は a = 0 で定義されているが、そこでは微分できないという事実に要約されます: ゼロの不確実性の場合は機能するはずです (関数は定義されています) が、非ゼロの不確実性はエラーが発生します (導関数は定義されていません)。不確実性はユーザーがオンザフライで変更できるため、これらのケースはどちらも動的に処理する必要があります。

これは興味深い状況であるため、不確実性モジュールを洗練された方法で変更してこの問題に対応できるかどうかをもう一度考えます。

PS : バージョン 2.3.5 から、不確実性パッケージは質問のケースを正しく処理し、より一般的には、不確実性を含む数値が実際には不確実性がゼロであるすべてのケースを処理します (同じ数値でゼロでない不確実性がある場合でも、質問のように、エラーの線形伝播による未定義のエラー)。

于 2012-04-18T03:36:05.357 に答える
0

ZeroDivisionError指数が 1 未満のときはいつでも、これが起こると思います。窒息しているコードのセクションは導関数を取得しようとしています。高校の微積分に関するぼんやりとした記憶から、 の導関数は であることがわかりx ** yますy * x ** (y - 1)

そうは言っても、あなたの例が0に評価されるのは直感的であることに同意します.私たちの直感が間違っているか(私の微積分と同じくらい悪いですが、実際の数学者と科学者が不確実性をどのように機能させたいか、そしてこのパッケージを書いたのは、彼が何をしているのかを知っているようで、さらに彼は多くのテストを含んでいました)、あるいはおそらく私たちは確かに正しく、彼はゼロ (不確実性ゼロ) をべき乗に累乗するという特別なケースの処理を追加する必要があります.

于 2012-04-17T22:38:36.747 に答える