の等角写像を考えよう。
と
が等しいので、
から
への双正則写像として、
恒等写像
が取れるのは自明である。
正規化条件によっては、それ以外のものが得られる。実際、
として、
の写像関数
のうち、正規化条件
ここでは、前項で説明した天野の方法で
の近似等角写像を求めて、
真の等角写像 (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()
|