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()

2 番目の画像の左下の四角形は、明確な理由はありませんが、赤色 (位相は 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

これに対する 1 つの解決策は、円の外側のすべての値を明示的にゼロに設定することです。

于 2013-02-28T13:48:28.453 に答える