在python中使用sympy解算器的困难

2024-10-01 05:05:16 发布

您现在位置:Python中文网/ 问答频道 /正文

请运行以下代码

    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,sympy通常会将答案输出为[0.1,0.2,0.3,0.1,0.4]


Tags: 答案代码fromimport代表symbol常规形式
2条回答

要获得答案中的数值近似值,可以使用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]

【编辑】:如下面的注释所述,五阶方程只有在将sympy升级(我的例子是升级到1.0)后才能求解。在

SymPy的solve只给出符号解。CRootOf是一种表示根不能用根表示的多项式根的方法。如果您只对数值解感兴趣,您可以对@tfv建议的每个项使用N,或者使用nsolve,它可以数值求解方程。一般来说,如果只关心数值解,符号solve可能会有点过火。在

相关问题 更多 >