【问题标题】:Difficulty in using sympy solver in python在 python 中使用 sympy 求解器的困难
【发布时间】:2016-04-26 01:42:33
【问题描述】:

请运行以下代码

    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]

【问题讨论】:

    标签: python sympy


    【解决方案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]
    

    [编辑]:如下面的 cmets 所述,五阶方程只能在升级 sympy(在我的情况下为 1.0)后求解。

    【讨论】:

    • 谢谢,但如果你能解释一下答案的含义,例如2*CRootOf(109*x**5 - 4157*x**4 + 50498*x**3 - 184552*x**2 - 527136*x + 3507840, 0)
    • 您等了多长时间? 20 秒内没有收到任何信息。
    • 似乎有问题,在我的笔记本电脑上运行时间不长,但在我朋友的笔记本电脑上需要 31.48 秒
    • 我在 2 分钟内没有得到任何东西。我只有在删除您的五阶和四阶术语后才能得到结果。我的电脑没那么差。奇怪,对不起,我没有回答你的第二个问题。
    • 为了提高速度尝试更新sympy版本,我的朋友也将sympy更新到1.0版本,秒出结果(之前已经提到他31.48秒)。
    【解决方案2】:

    SymPy 的solve 只提供象征性解决方案。 CRootOf 是一种符号表示多项式根的方法,这些多项式的根不能用根式表示。如果您只对数值解感兴趣,您可以按照@tfv 的建议在每个术语上使用N,或者使用nsolve,它以数值方式求解方程。一般来说,如果您只关心数字解决方案,符号 solve 可能会过大。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多