2016-04-23 52 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可能会矫枉过正。