2017-12-12 5 views
1

g関数をグラフとして表示したいのですが、実行するたびにタイトルにOverflowErrorが返され、理由がわかりません。誰も助けることができますか?Python sympy.Plot - OverflowError:floatに変換するには大きすぎます

%matplotlib inline 

import sympy as sym 

def g(x): 

    return 1 - (sym.factorial(365)/((365 ** x) * sym.factorial(365 - x))) 

sym.plot(f(x), (x, 0, 100), ylim=(0, 1)) 
+0

あなたは何をしようとしていますか?実装しようとしている特定の数式がありますか?あなたの 'x 'が範囲[0,100]にあるループを書いてみて、print文を使って操作の結果を見てください。私は、ある値の 'x'の後に、あなたの結果がInfinityに行くと思います。 –

+0

私は式g(x)をグラフに実装しようとしています。私は結果を印刷し、分数には無限に長い分子と分母があります。丸めて浮動小数点数を使用しようとしましたが、両方ともエラーを突き抜けています。 –

答えて

1

問題は、関数をプロットするために、NumPyを使ってNumPyを数値的に評価することです。 NumPyはマシンの精度浮動小数点数に制限されていますが、これは〜10^309(365!〜10^778)を超えることはできません。

あなたがする必要があるのは、そのような大きな中間値にならないように式を書き換えることです。 SymPyはまだneeds some workこの井戸を助けることができる。

我々はアイデンティティを使用することができます。

  • binomial(n, x) = factorial(n)/(factorial(x - n)*factorial(x)

を交換するfactorial(365)/factorial(365 - x)binomial(365, x)*factorial(x)と:このプロットを与え

1 - binomial(365, x)*factorial(x)*365**-x 

enter image description here

+0

あなたのコメントのおかげで、残念なことに私は別の問題に遭遇しました。エラーは "xf + xからmpfを作成できません"というエラーを返すようになりました。浮動小数点数に変換するために大きい " –

+0

mpmathをインポートしていますか? sympy関数の代わりにmpmath関数を使用しているようです。 – asmeurer

関連する問題