11

sympyを使用して多項式を解きます:

x = Symbol('x')
y = solve(int(row["scaleA"])*x**3 + int(row["scaleB"])*x**2 + int(row["scaleC"])*x + int(row["scaleD"]), x)

yは可能な解決策のリストです。ただし、架空のものを無視して、実際のソリューションのみを使用する必要があります。また、式ではなく値としての解法をお願いします。現在、次のようになっています。

[-2/3 - 55**(1/3)*(-1/2 - sqrt(3)*I/2)/3, -2/3 - 55**(1/3)*(-1/2 + sqrt(3)*I/2)/3, -55**(1/3)/3 - 2/3]

最後の式の値(-2.22756)が必要です。これを単純化するためのsympyの関数はありますか?

4

5 に答える 5

13

リアルに設定xすると、SymPy はリアルなソリューションのみを提供します。

x = Symbol('x', real=True)
solve(..., x)
于 2013-07-26T00:52:15.810 に答える
2

クラストノフが言及したように、mpmath はより簡単な方法を提供しました。

y = polyroots([int(row["scaleA"]), int(row["scaleB"]), int(row["scaleC"]), int(row["scaleD"])-value])
for root in y:
   if "j" not in str(root):
       value = root
于 2013-03-05T15:23:55.477 に答える
-3

文字を含むソリューションを単に無視することができ、式の評価に"I"使用されました。.evalf()コードは次のとおりです。

    x = Symbol('x')
    y = solve(int(row["scaleA"])*x**3 + int(row["scaleB"])*x**2 + int(row["scaleC"])*x + int(row["scaleD"]), x)
    for root in y:
        if "I" not in str(root):
            print("This One:" + str(root.evalf()))
于 2013-03-04T21:00:44.243 に答える