在python

时间:2016-04-23 13:31:04

标签: 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 -   527136 * x + 3507840,3),2 * CRootOf(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,则通常会将答案输出为[0.1,0.2,0.3,0.1,0.4]

2 个答案:

答案 0 :(得分: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]

[编辑]:如下面的评论所述,五阶方程只能在升级同情之后解决(在我的情况下为1.0)。

答案 1 :(得分:1)

SymPy的solve仅提供符号解决方案。 CRootOf是一种象征性地表示多项式根的方法,其根不能用自由基表示。如果您只对数字解决方案感兴趣,可以在@tfv建议的每个术语上使用N,或使用nsolve,它以数字方式解决等式。一般情况下,如果您只关心数字解,那么符号solve可能会过度。