2016-04-23 50 views
3

請運行下面的代碼困難在使用Python sympy求解器

from sympy.solvers import solve 
    from sympy import Symbol 
    x = Symbol('x') 
    R2 = solve(-109*x**5/3870720+4157*x**4/1935360-3607*x**3/69120+23069*x**2/60480+5491*x/2520+38-67,x) 
    print R2 

代碼的輸出是

[2 * CRootOf(109 * X ** 5 - 4157 * X * * 4 + 50498 * x ** 3 - 184552 * x ** 2 - 527136 * x + 3507840,0),2 * CRootOf(109 * x ** 5 - 4157 * x ** 4 + 50498 * x ** 3 - 184552 * x ** 2 - 527136 * x + 3507840,1),2 * CRootOf(109 * x ** 5 - 4157 * x ** 4 + 50498 * x ** 3 - 184552 * x ** 2 - 527136 * x + 3507840,2), 2 * CRootOf(109 * x ** 5 - 4157 * x ** 4 + 50498 * x ** 3 - 184552 * x ** 2 -(* 109 * x ** 5 - 4157 * x ** 4 + 50498 * x ** 3 - 184552 * x ** 2- 527136 * x + 3507840,4 * )]

有人能解釋什麼答案代表,以及如何讓輸出在傳統的形式,即說,如果答案是0.1,0.2,0.3,0.1,0.4 sympy通常輸出答案[0.1,0.2,0.3,0.1,0.4]

回答

1

要在回答中得到數值逼近,你可以使用N()。由於您有多個解決方案,您可以遍歷列表。我用一個更簡單的公式,因爲你需要一段時間...

試試這個:

from sympy.solvers import solve 

from sympy import Symbol, N 
x = Symbol('x') 
#R2 = solve(-109*x**5/3870720+4157*x**4/1935360-3607*x**3/69120+23069*x**2/60480+5491*x/2520+38-67,x) 
R2 = solve(x**2+2*x-4,x) 
print R2 
print [N(solution) for solution in R2] 

[編輯]:正如在下面的評論中提到,5次方程只能升級sympy後問題(在我的情況下爲1.0)。

+0

謝謝,但如果你能解釋答案意味着什麼,例如2 * CRootOf(109 * x * \ * 5 - 4157 * x * \ * 4 + 50498 * x * \ * 3 - 184552 * x * \ * 2 - 527136 * x + 3507840,0) –

+0

您等了多長時間結果? 20秒內沒有得到任何東西。 – tfv

+0

似乎有一個問題,在我的筆記本電腦,它並沒有多少,但在我的朋友的筆記本電腦,它需要31.48秒 –

0

SymPy的solve只提供符號解決方案。 CRootOf是象徵性地表示根不能用自由基表示的多項式的根的一種方式。如果您只對數字解決方案感興趣,則可以按照@tfv所建議的每個術語使用N,或者使用nsolve,它可以用數字方式解決方程式。如果你只關心數字解決方案,一般象徵性的solve可能會矯枉過正。