の等角写像を考えよう。 と が等しいので、 から への双正則写像として、 恒等写像 が取れるのは自明である。
正規化条件によっては、それ以外のものが得られる。実際、 として、 の写像関数 のうち、正規化条件
ここでは、前項で説明した天野の方法で の近似等角写像を求めて、 真の等角写像 (B.13) と比べてみることにする。
(答えの分かっている問題を解くことによって、 アルゴリズムやプログラムの正しさをチェックする、 というしばしば使われるテクニック。)
天野の方法では、 , を適切に選ぶ必要があるが、 今の場合は は円盤領域であるから、 として
conformalmap.py |
import numpy as np import matplotlib.pyplot as plt def amanomap(z,z0,n,Q0,Q,zeta): s=Q0 for k in range(n): s += Q[k]*np.log((z-zeta[k])/(z0-zeta[k])) return (z-z0) * np.exp(s) z0=0.6 R=2 N=80 dt=2*np.pi/N I=1j thetas=np.linspace(0.0,2.0*np.pi,N,endpoint=False) zetas=R*np.exp(I*thetas) zs=np.exp(I*thetas) a=np.empty((N,N)) for j in (range(N)): for k in (range(N)): a[j,k]=np.log(abs(zs[j]-zetas[k])) b=-np.log(abs(zs-z0)) # Qk (k=1,...N) と Q0 を求める Q=np.linalg.solve(a,b) Q0=0 for k in (range(N)): Q0 += Q[k]*np.log(abs(z0-zetas[k])) # 計算の方はまあまあだけど、可視化はどうするものかな plt.clf() fig=plt.figure() fig.set_size_inches(5, 5) plt.axes().set_aspect('equal') m=20 nr=m rs=np.linspace(0.0,1.0,nr+1) nt=4*nr ts=np.linspace(0.0,2.0*np.pi,nt+1) #zs=np.empty((nr+1,nt+1),dtype=np.complex128) ws=np.empty((nr+1,nt+1),dtype=np.complex128) for i in range(nr+1): for j in range(nt+1): zs=rs[i]*np.exp(1j*ts[j]) ws[i,j]=amanomap(zs,z0,N,Q0,Q,zetas) for i in range(nr+1): plt.plot(ws[i,:].real,ws[i,:].imag) for j in range(nt+1): plt.plot(ws[:,j].real,ws[:,j].imag) plt.show() |
conformalmap-v2.py |
# conformalmap-v2.py import numpy as np import matplotlib.pyplot as plt def amanomap(z,z0,n,Q0,Q,zeta): s = Q0+np.dot(Q,np.log(np.divide(z-zeta,z0-zeta))) return (z-z0) * np.exp(s) z0=0.6 R=2 N=80 I=1j thetas=np.linspace(0.0,2.0*np.pi,N,endpoint=False) zetas=R*np.exp(I*thetas) zs=np.exp(I*thetas) a=np.empty((N,N)) for j in (range(N)): for k in (range(N)): a[j,k]=np.log(abs(zs[j]-zetas[k])) b=-np.log(abs(zs-z0)) # Qk (k=1,...N) と Q0 を求める Q=np.linalg.solve(a,b) Q0=np.dot(Q,np.log(abs(z0-zetas))) # 計算の方はまあまあだけど、可視化はどうするものかな plt.clf() fig=plt.figure() fig.set_size_inches(5, 5) plt.axes().set_aspect('equal') m=20 nr=m rs=np.linspace(0.0,1.0,nr+1) nt=4*nr ts=np.linspace(0.0,2.0*np.pi,nt+1) #zs=np.empty((nr+1,nt+1),dtype=np.complex128) ws=np.empty((nr+1,nt+1),dtype=np.complex128) for i in range(nr+1): for j in range(nt+1): zs=rs[i]*np.exp(1j*ts[j]) ws[i,j]=amanomap(zs,z0,N,Q0,Q,zetas) for i in range(nr+1): plt.plot(ws[i,:].real,ws[i,:].imag) for j in range(nt+1): plt.plot(ws[:,j].real,ws[:,j].imag) plt.show() |