显示奇怪的复杂阶段

时间:2013-02-28 13:40:07

标签: python numpy matplotlib

使用以下代码:

from numpy import *
from matplotlib.pyplot import *

Radius=10
N=1024
dx=2*Radius/N
dy=dx
x=r_[-Radius:Radius:dx]
y=r_[-Radius:Radius:dy]
X, Y = meshgrid(x,y)
R = sqrt(X**2+Y**2)
PHI = arctan2(Y,X)

ringthing = R < Radius
ring = zeros((2,N,N),dtype=complex)
ring[0] = ringthing
ring[1] = ringthing*exp(1j*PHI)

f=fig()
p1=f.add_subplot(121)
p1.imshow(angle(ring[0]))
p2=f.add_subplot(122)
p2.imshow(angle(ring[1]))

f.show()

第二张图像的左下方正方形为红色(相位等于pi),没有明显的原因。这是为什么?

1 个答案:

答案 0 :(得分:0)

问题是圆外的值为零,复杂的零角没有很好地定义(它的奇点)。浮点算术计算得出,在某些部分,它们评估为0,而在其他部分评估为-0,这可以通过运行来看到

from __future__ import division

from numpy import *

Radius=10
N=1024
dx=2*Radius/N
dy=dx
x=r_[-Radius:Radius:dx]
y=r_[-Radius:Radius:dy]
X, Y = meshgrid(x,y)
R = sqrt(X**2+Y**2)
PHI = arctan2(Y,X)

ringthing = R < Radius
ring = zeros((2,N,N),dtype=complex)
ring[0] = ringthing
ring[1] = ringthing*exp(1j*PHI)

print ring[1][-1, 0], angle(ring[1][-1, 0])
print ring[1][0, -1], angle(ring[1][0, -1])

输出

(-0+0j) 3.14159265359
0j 0.0

围绕这个的一个解决方案是将圆圈外的所有值明确地设置为零。