如何检查复数是否为整数
How to check if complex number is a whole number
给定一个数值 x
,您可以这样做 float(x).is_integer()
来检查它是否为整数。有没有办法对复数执行此操作?
我正在尝试使用列表推导式仅取整数有限域上的多项式的整数根。
[r for r in solve(f,domain=FiniteField(p)) if float(r).is_integer()]
但是如果求解函数 returns 复根,这不起作用。
有谁知道如何:检查给定的(可能是复数)是否为整数或知道是否有 SymPy 函数来获取整数有限域上的多项式的根?
float.is_integer(z.real)
告诉你实部是否为整数
如果你想检查虚部是否为零,你可以这样做:
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
使用 ground_roots
函数和 modulus
关键字参数。这 returns 根模 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
模 13
的根是 -5
和 4
,根 4
具有多重性 2
.
顺便说一句,在我看来,这里的复数好像是 red herring:有限域上的整数多项式的根自然不能被视为复数。在原始 post 中对 solve
的调用忽略了 domain
参数,只是给出代数数( 可以 合理地解释为复数) 作为其结果,这可能就是您最终查看复数的原因。但是,当试图找到对素数取模的根时,这些都无济于事 p
.
使用你原来问题中的列表理解,可以做到:
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]
给定一个数值 x
,您可以这样做 float(x).is_integer()
来检查它是否为整数。有没有办法对复数执行此操作?
我正在尝试使用列表推导式仅取整数有限域上的多项式的整数根。
[r for r in solve(f,domain=FiniteField(p)) if float(r).is_integer()]
但是如果求解函数 returns 复根,这不起作用。
有谁知道如何:检查给定的(可能是复数)是否为整数或知道是否有 SymPy 函数来获取整数有限域上的多项式的根?
float.is_integer(z.real)
告诉你实部是否为整数
如果你想检查虚部是否为零,你可以这样做:
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
使用 ground_roots
函数和 modulus
关键字参数。这 returns 根模 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
模 13
的根是 -5
和 4
,根 4
具有多重性 2
.
顺便说一句,在我看来,这里的复数好像是 red herring:有限域上的整数多项式的根自然不能被视为复数。在原始 post 中对 solve
的调用忽略了 domain
参数,只是给出代数数( 可以 合理地解释为复数) 作为其结果,这可能就是您最终查看复数的原因。但是,当试图找到对素数取模的根时,这些都无济于事 p
.
使用你原来问题中的列表理解,可以做到:
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]