Python 系数应该是整数:辛丢番图方程

Python 系数应该是整数:辛丢番图方程,python,sympy,Python,Sympy,我有一个多项式(由矩阵的特征多项式生成),我想求解整数解 import sympy from sympy.solvers.diophantine import diop_linear M = sympy.Matrix([[0,1,1],[1,0,1],[1,1,0]]) p = M.charpoly() 该多项式明确地将因子分解为整数根: print p.factor() # (_lambda - 2)*(_lambda + 1)**2 但是,使用时,输入多项式应为整数系数类型。我不知道如

我有一个多项式(由矩阵的特征多项式生成),我想求解整数解

import sympy
from sympy.solvers.diophantine import diop_linear

M = sympy.Matrix([[0,1,1],[1,0,1],[1,1,0]])
p = M.charpoly()
该多项式明确地将因子分解为整数根:

print p.factor()
# (_lambda - 2)*(_lambda + 1)**2
但是,使用时,输入多项式应为整数系数类型。我不知道如何使用Symphy 0.75实现这一点,尽管我查看了文档。回溯是:

Traceback (most recent call last):
  File "test.py", line 8, in <module>
    diop_linear(p)
  File "/usr/local/lib/python2.7/dist-packages/sympy/solvers/diophantine.py", line 365, in diop_linear
    var, coeff, diop_type = classify_diop(eq)
  File "/usr/local/lib/python2.7/dist-packages/sympy/solvers/diophantine.py", line 232, in classify_diop
    raise TypeError("Coefficients should be Integers")
TypeError: Coefficients should be Integers
回溯(最近一次呼叫最后一次):
文件“test.py”,第8行,在
diop_线性(p)
文件“/usr/local/lib/python2.7/dist-packages/sympy/solvers/diophantine.py”,第365行,在diop_-linear中
var,coeff,diop_类型=分类(等式)
文件“/usr/local/lib/python2.7/dist packages/sympy/solvers/diophantine.py”,第232行,在classify_diop中
raise TypeError(“系数应为整数”)
TypeError:系数应为整数

该错误消息显然不正确。问题是,
diop_-linear
只适用于线性丢番图方程(对于单变量方程来说,这并不有趣)。如果你只想解一个单变量方程,只需使用
solve

书签-我对你感兴趣!我想在整数域上求解,如果多项式有非整数根,我不想返回解。是的,我在寻找一个单变量线性丢番图方程的“不有趣”的例子。使用“解算”和获取浮点有时会失败,而Symphy似乎会被20阶左右的大型多项式扼杀。有没有办法将解空间限制为Z?错误的错误是由于
classify_diop
这一事实造成的,该事实由
diop_linear
调用,以确保方程是线性方程,而多边形对象失败。使用
diophantine
p.factor()
作为等式,这样可以避免这种情况。它还从多项式的根中过滤整数根。如果您不确定方程类型,请不要使用
diop_linear
或任何其他特定于方程类型的函数。我建议你总是使用
丢番图
来用辛解任何丢番图方程。我认为一种只求整数根的相当有效的方法是使用RootOf,它避免了计算相当复杂的根的根的根的根形式。