0

使用以下代码:

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)。为什么是这样?

4

1 回答 1

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

解决此问题的一种解决方案是将圆外的所有值显式设置为零。

于 2013-02-28T13:48:28.453 回答