【问题标题】:SymPy cannot solve polynomial equation of 4th orderSymPy 无法求解四阶多项式方程
【发布时间】:2015-02-06 13:14:09
【问题描述】:

我有一个四阶多项式方程,我需要找到所有根。 简单例子:

from sympy import (Symbol,solve,I)

a=4+5*I; b=3+7*I; c=12-56*I; d=33+56*I; e=345-67*I; x=Symbol('x')
eq=a*x**4 + b*x**3 + c*x**2 + d*x +e
solve(eq,x)

如果 a,b,c,d,e 是纯实数,那么 它工作得很好。 但就我而言,它们都是复数。然后我确实接到了电话:

PolynomialError: 'cannot return general quartic solution'

我发现了类似的问题,并实施了修复: Description of the issueFix of the issue

但这并没有真正的帮助。有一些奇怪的问题,因为现在调用是(在修复中更改):

PolynomialError: Cannot determine if `-((12 - 56*I)/(4 + 5*I) - 3*(3 + 7*I)**2/(8*(4 + 5*I)**2))**2/12 + (3 + 7*I)*((33 + 56*I)/(4*(4 + 5*I)) + (3 + 7*I)*(3*(3 + 7*I)**2/(256*(4 + 5*I)**2) - (12 - 56*I)/(16*(4 + 5*I)))/(4 + 5*I))/(4 + 5*I) - (345 - 67*I)/(4 + 5*I)` is nonzero.

但是确定上面的表达式是否非零是最简单的事情,所以不知道问题出在哪里。

【问题讨论】:

    标签: python sympy polynomial-math equation-solving


    【解决方案1】:

    升级到支持任意四次解法的 SymPy 最新版本。

    【讨论】:

    • 在我更新到 sympy 0.7.6(使用 python 3.4)之后,出现了不同的错误消息:nonzero 中的第 103 行:raise TypeError("cannot determine truth value of\n %s" % 自我)
    • 看起来这是个bug,已经在git版本的SymPy中修复了。
    • 我正在使用 python 的 anaconda 发行版。是否可以在那里以某种方式更新到这个 git 版本,或者我必须重写一些脚本?
    • 安装 git(在 OS X 和 Windows 上最简单的方法是安装 GitHub 桌面客户端),克隆 github.com/sympy/sympy,并使用 python setup.py installpython setup.py develop(如果你使用后者会自动更新)执行 git pull,否则每次都必须重新安装)。或者如果你只使用 isympy,你可以直接 cd 到 sympy 目录并从那里运行bin/isympy
    【解决方案2】:

    如果您想要一个更灵活的解决方案,您可以使用二进制搜索来求解 x,如下所示:

    def maybeRightX(maybeX, polys):
        sum = 0
        for i in range(len(polys)):
            sum += polys[i]*(maybeX ** i)
        return sum
    
    def solve(y, polys):
        lo = 0
        hi = y
        while lo <= hi:
            mid = (lo + hi)//2
            if (maybeRightX(mid, polys)) < y:
                lo = mid + 1
            else:
                hi = mid - 1
        return (hi + 1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 2015-10-28
      • 2011-07-25
      • 1970-01-01
      • 2019-02-19
      相关资源
      最近更新 更多