SymPy无法解决四次方程的多项式方程问题。

6

我有一个4次方程式,需要找到所有的根。简单的例子:

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'

我发现一个类似的问题,并且实施了修复: 问题描述. 问题解决方案

但是这并没有真正帮助。现在有一些奇怪的问题,因为现在调用的方式已经改变 (如修复中所更改的):
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.

但是确定上面的表达式是否为非零最简单不过了,所以不知道问题可能在哪里。

2个回答

1

升级到最新版本的SymPy,支持任意四次方程的解决方案。


升级到 sympy 0.7.6 后(使用 Python 3.4),出现了不同的错误信息:在 nonzero 的第 103 行:raise TypeError("cannot determine truth value of\n%s" % self)。 - K4stan
看起来这是一个错误,在SymPy的git版本中已经修复了。 - asmeurer
我正在使用Python的Anaconda发行版。有没有可能在那里更新到这个Git版本,还是我必须重写一些脚本? - K4stan
1
安装git(在OS X和Windows上,最简单的方法是安装GitHub桌面客户端),克隆https://github.com/sympy/sympy,并使用`python setup.py installpython setup.py develop(后者将自动更新如果您进行了git pull,否则每次都必须重新安装)。或者,如果您只使用isympy,则可以直接cd到sympy目录并从那里运行bin/isympy`。 - asmeurer

0
如果你想要一个更灵活的解决方案,你可以使用二分查找来解决 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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接