给定值数值x
,您可以执行此操作float(x).is_integer()
以检查它是否为整数。对复杂的数字有没有办法做到这一点?
我正在尝试使用列表推导来仅获取有限域上的多项式的整数根,这些整数是整数。
[r for r in solve(f,domain=FiniteField(p)) if float(r).is_integer()]
但是如果solve函数返回复杂的根,则不起作用。
有没有人知道如何:检查一个给定的(可能是复数)是否是一个整数或者知道是否有一个SymPy函数来获取有限域上多项式的根是整数?
答案 0 :(得分:2)
使用ground_roots
函数以及modulus
关键字参数。这将返回带有多重性的模p
的根。这是一个例子:
>>> from sympy import Symbol, ground_roots
>>> x = Symbol('x')
>>> f = x**5 + 7*x + 1
>>> p = 13
>>> ground_roots(f, modulus=p)
{-5: 1, 4: 2}
这表示poly
modulo 13
的根-5
和4
,根4
具有多重性2
。< / p>
顺便说一句,它看起来好像复数在这里是red herring:有限域上的积分多项式的根本可以自然地被视为复数。原始帖子中对solve
的调用忽略了domain
参数,只是将代数数字(其中可以合理地解释为复数)作为其结果,即可能为什么你最终看到复杂的数字。但是当试图找到以p
为模的根时,这些都无法提供帮助。
答案 1 :(得分:1)
float.is_integer(z.real)
告诉您实部是否为整数
答案 2 :(得分:0)
如果要检查虚部是否为零,可以执行以下操作:
In [17]: a=2 + 2j
In [18]: bool(a.imag)
Out[18]: True
In [19]: b=2 + 0j
In [20]: bool(b.imag)
Out[20]: False
答案 3 :(得分:0)
使用与您原始问题中的列表一样的方法,可以做到:
roots = [complex(r) for r in solve(f, domain=FiniteField(p))]
int_roots = [z.real for z in roots if z.real.is_integer() and not z.imag]