3

sympy.solve()私に間違った結果を与えるようです。http://code.google.com/p/sympy/issues/detail?id=3244など、不等式に関する既知の問題がありますが、これは十分に単純であり、機能するはずです。

 import sympy
    from sympy.abc import x, u, s
    t1 = x*(1 - x)/(1 - s*x)
    t2 = u*x + (1-s)*(1 - u)*x*(1 - x)/(1 - s*x)
    sympy.solve(t1-t2,x)

私に3つの解決策を与えています。2 つしかないはずですが、最初の 1 つが間違っています。これはバグですか、それともどこかで間違いを犯していますか?

4

1 に答える 1

2

これは SymPy の開発版 (および約 1 週間後にリリースされる 0.7.2) で修正されています。これで が得られ[0, s*(u - 1)/(2*s*u - s - u)]ます。

それで、あなたの質問に答えるために、はい、それはバグであり、修正されました.

以前に何がうまくいかなかったのかについては、問題を修正git bisectしたコミットを絞り込んでいました。このコミットにより、SymPy の基本的な単純化アルゴリズムの 1 つである が動作する方法が変更されました。したがって、中間操作の結果が十分に単純になり、悪い解決策が正しいことを認識できるようになったと思います(平方根が一致すると仮定して)。 見つけた解決策を再度プラグインしてチェックしますが、複雑すぎる場合は、それらが偽物であるかどうかを判断できません。as_numer_denomsolve()1/ssolve()

おそらく実際に何が起こったのか、もう少し詳しく見てみると(t1 - t2).as_numer_denom()[0]、0.7.2 では次数 2 しかありませんがx、0.7.1 では次数は 3 でした。偽の解は、この「偽のゼロ」(分母のゼロでもあったことを意味します) から生じました。

これは、コードを深く掘り下げることなく、私が言える最善のことです。

于 2012-10-09T03:57:29.497 に答える