SymPy不能求解四阶多项式方程

时间:2015-02-06 13:14:10

标签: python sympy polynomial-math equation-solving

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

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.

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

2 个答案:

答案 0 :(得分:1)

升级到最新版本的SymPy,它支持任意四分之一解决方案。

答案 1 :(得分: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)