如何计算复数的模数?
How to calculate a modulo of complex numbers?
我正在尝试找到一种在 Python 中执行 (w+xi) % (y+zi)
的方法。
我试过cmath
,但它似乎不支持这个。我已经确定它在数学上是可行的并尝试对其进行编程,但是它没有用。代码在下面,我发现问题是在除数之后的某个时候需要四舍五入,但在其他时候这会产生不正确的结果。
def ComplexModulo(a,b):
x = a/b
x = round(x.real) + (round(x.imag)*1j)
z = x*b
return a-z
我需要一个更好的方法来解决这个问题,因为现在如果我这样做 (8+2j)%(2+1j)
我应该得到 (1+1j)
,但我却得到 (-1+0j)
。我还尝试将 round
更改为 int
,以及它们的不同组合,虽然它在某些情况下有效,但在其他情况下却失败了。
modulo
操作的正确定义涉及使用 floor
而不是 round
。您可以在 math
或 numpy
包中找到它。
编辑
扩展一下为什么 round()
和 int()
不起作用,这当然与四舍五入有关。
让我们考虑一个整数示例:
5 / 3 = 1.6666...
5 // 3 = 1
5 % 3 = 2
5 == 3 * 1 + 2
现在:
round(5 / 3) == 2 != 5 // 3
对于 5 / 3
的整数商不会给出正确的结果。
另一方面:
int(5 / 3) == 1 == 5 // 3
在这种情况下实际上会给出正确的商数。
但如果现在考虑:
-5 / 3 = -1.6666...
-5 // 3 = -2
-5 % 3 = 1
-5 == 3 * (-2) + 1
然后:
int(-5 / 3) == -1 != -5 // 3
和:
round(-5 / 3) == -2 == -5 // 3
在这种情况下,round()
会给出正确的结果,而 int()
不会。
floor()
,被定义为小于输入的最大整数,在两种情况下都能正常工作。
我正在尝试找到一种在 Python 中执行 (w+xi) % (y+zi)
的方法。
我试过cmath
,但它似乎不支持这个。我已经确定它在数学上是可行的并尝试对其进行编程,但是它没有用。代码在下面,我发现问题是在除数之后的某个时候需要四舍五入,但在其他时候这会产生不正确的结果。
def ComplexModulo(a,b):
x = a/b
x = round(x.real) + (round(x.imag)*1j)
z = x*b
return a-z
我需要一个更好的方法来解决这个问题,因为现在如果我这样做 (8+2j)%(2+1j)
我应该得到 (1+1j)
,但我却得到 (-1+0j)
。我还尝试将 round
更改为 int
,以及它们的不同组合,虽然它在某些情况下有效,但在其他情况下却失败了。
modulo
操作的正确定义涉及使用 floor
而不是 round
。您可以在 math
或 numpy
包中找到它。
编辑
扩展一下为什么 round()
和 int()
不起作用,这当然与四舍五入有关。
让我们考虑一个整数示例:
5 / 3 = 1.6666...
5 // 3 = 1
5 % 3 = 2
5 == 3 * 1 + 2
现在:
round(5 / 3) == 2 != 5 // 3
对于 5 / 3
的整数商不会给出正确的结果。
另一方面:
int(5 / 3) == 1 == 5 // 3
在这种情况下实际上会给出正确的商数。
但如果现在考虑:
-5 / 3 = -1.6666...
-5 // 3 = -2
-5 % 3 = 1
-5 == 3 * (-2) + 1
然后:
int(-5 / 3) == -1 != -5 // 3
和:
round(-5 / 3) == -2 == -5 // 3
在这种情况下,round()
会给出正确的结果,而 int()
不会。
floor()
,被定义为小于输入的最大整数,在两种情况下都能正常工作。