python中复数的平方根

2024-04-20 09:17:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python中遇到了一些复杂数字平方根的混淆行为。运行此代码:

from cmath import sqrt
a = 0.2
b = 0.2 + 0j
print(sqrt(a / (a - 1)))
print(sqrt(b / (b - 1)))

给出输出

0.5j
-0.5j

类似的事情发生在

print(sqrt(-1 * b))
print(sqrt(-b))

看来这对语句应该给出相同的答案?


Tags: 答案代码fromimport数字sqrt语句事情
2条回答

两个答案(+0.5j-0.5j)都是正确的,因为它们是complex conjugates——即实部是相同的,虚部是符号翻转的。

查看code可以使行为清晰-结果的虚部始终具有与输入的虚部相同的符号,如第790行和第793行所示:

r.imag = copysign(d, z.imag);

因为a/(a-1)0.25,它隐式地0.25+0j得到一个阳性结果;b/(b-1)产生0.25-0j(出于某种原因;不确定为什么它不会导致0.25+0jtbh),所以您的结果也是阴性的。

编辑:This question对同一问题有一些有用的讨论。

我能回答为什么会发生这种事,但不能回答为什么选择这种行为。

a/(a - 1)

计算结果为0.2/-0.8,即-0.25,由cmath.sqrt转换为复数,而

b/(b - 1)

计算结果为(0.2+0j)/(-0.8+0j),即(-0.25-0j),转换为具有负复数成分的复数。

举个简单的例子

cmath.sqrt(0j) == 0j
cmath.sqrt(-0j) == -0j

相关问题 更多 >